1 / 13

Estructura de Datos En C++

Estructura de Datos En C++. Dr. Romeo S ánchez Nigenda . E-mail: romeo.sanchez @ gmail.com http: //yalma.fime.uanl.mx/~ romeo / Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes.

Download Presentation

Estructura de Datos En C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Estructura de Datos En C++ Dr. Romeo SánchezNigenda. E-mail: romeo.sanchez@gmail.com http://yalma.fime.uanl.mx/~romeo/ Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar Chacón Horas de Tutoría: 10am-11am Martes y Jueves, 3:30pm-4:30pm Miércoles, 2:00pm-4:00pm Viernes. Website: http://yalma.fime.uanl.mx/~romeo/ED/2011/ Sesiones: 48

  2. Clases (C++) • Una clase es un concepto de un tipo de datos abstracto (ADTs), definiendo tanto el conjunto de valores de un cierto tipo (datos), como el conjunto de operaciones que se ejecutan sobre tales valores. • A la instanciación de la clase se le conoce como un objeto, define un estado que es representado por los valores de sus atributos • A las operaciones como métodos definen el comportamiento del objeto Tipo de datos abstracto Interface Pública Datos abstractos Elementos Privados Operaciones

  3. Clases (C++) Para proveer un buen mecanismo de soporte de definición y uso de tipos, Clases deben: • Soportar definiciones de tipo con: • Estado de un programa (datos miembros de la clase) • Definición de semántica (funciones de la clase) • Inicialización (constructores de la clase) • Terminación (destructores de la clase) • Soportar el uso de tipos: • Globales, locales o vía New • En argumentos a funciones • Retornos de funciones • Comportamiento • Capacidad de soportar operaciones definidas por el usuario • Capacidad de soportar conversiones definidas por el usuario • Capacidad de soportar asignación y copia de tipos

  4. Clases: Principios básicos de POO • Encapsulación: Principio de esconder las estructuras de datos usadas, y solo proveer una interface pública para operar sobre dichos datos. • La separación de estructuras de datos y operaciones, y la restricción de solamente acceder a la estructura de datos vía una interface bien definida, permite escoger independientemente las estructuras de datos apropiadas al tipo de la aplicación

  5. Clases: Relaciones • Un-tipo-de: (A-kind-of) class Circle { int x, y, radius; public: void setX(int); intgetX(); void setY(int); intgetY() ; void setRadius(int); intgetRadius(); } class Point { int x, y; public: void setX(int); intgetX(); void setY(int); intgetY() } Es un tipo de • Es-un: (is-a) Es un

  6. Clases: Relaciones • Es-parte-de (is-part-of): class Logo { Circle circle; Triangle triangle; public: void set(Circle) ; } Es parte de Es parte de • Tiene-un (has-a): Es parte de Es parte de Tiene un Tiene un

  7. Herencia (inheritance) • Relaciona objetos usando relaciones un-tipo-de y es-un. Es el mecanismoquepermitequeunaclase A heredepropiedades de unaclase B. Ejemplo: Un Círculo hereda de un Punto: Superclase class Circle : public Point { int radius; public: void setRadius(); intgetRadius(); } Circleacircle; acircle.setX(1); acircle.setY(2); acircle.setRadius(); Subclase • La relación es-un implica que se puede utilizar un círculo en cualquier lugar donde se espera un punto Move(Point apoint, intdeltax){ apoint.setX(apoint.getX()+deltax); } Circlecircle; Move(circle,10);

  8. Clases abstractas • Describe únicamente las propiedades de un conjunto de objetos sin especificar su comportamiento • Cada subclase deberá entonces proveer métodos que implementen los de la clase abstracta abstractclass Figura { public: print(); } class Point : public Figura(){ public: print(){ …;} } No esnecesaria la implementación, dependerá de las subclases…

  9. Tipos genéricos • Cuando definimos una clase, en realidad definimos un tipo, podría haber una lista de carros, frutas, números, etc. • Usamos tipos genéricos para definir la clase • Ya que no sabemos con que tipos la clase será usada, debemos usar placeholdersy referir a ellos como el tipo que opera la clase • Por la tanto la definición de clase actuará como un template, la clase actual se definirá cuando creemos un objeto. templateclassList T{ public: append(T element); T getFirst(); T getNext(); } Clase Template: Clase A parametrizada con un tipo de datos B. Unavezque un objeto de A escreado, B esreemplazado un el tipo actual de datos. List Point pointList; Point apoint; pointList.append(apoint);

  10. Polimorfismo • Permitequeunaentidad (variable, función, objeto) tome una variedad de representaciones. • Concepto de linkeo dinámico, dependiendo de el contenido en un determinado tiempo. Nos permite utilizar el mismo nombre para funciones, mientras su lista de parámetros sea diferente (overloading) BooleanisNull(int i); BooleanisNull(float r); • Objetos de una superclase pueden reemplazarse con objetos de sus subclases. voiddisplay (Figura o){ o.print } Circle c; Point p; //AsumaquetodasestassubclasesextiendenFigura Square s; display(c); //Utiliza la implementación de Circle.print display(p); //UtilizaPoint.print

  11. Clases (C++): Ejemplo Clase Fraction almacena números fraccionales: 4/5, 1/3, Simplifica radios: 3/3 = 1/1, 3/6= 1/2, 6/2=3/1, -1/-1=1/1 Soportaoperadores: +, *, / classFraction{ long numerador; long denominador; void normalize(void); long gcf(long, long); //Greatest common factor long lcm(long,long); //Lowest common denominator public: Fraction(void); Fraction (long); Fraction (long,long); long get_numerator(); long get_denominator(); … } Área privada

  12. Clases (C++) • Constructores y homogeneidad: Fraction::Fraction(void){ //Suponeque un número racional es 0 numerador = 0; denominador = 1; } Fraction::Fraction(long i){ numerador = i; denominador = 1; } Fraction::Fraction(long i, long j){ numerador = i; denominador = j; normalize(); } voidmain(){ Fraction r; //0/1 Fraction r(3); // 3/1 Fraction r(2,5); // 2/5 }

  13. Clases (C++) • Implementación de métodos longFraction::get_numerator(){ return numerator; } longFraction::get_denominator(){ return denominator; } Inline functions: public: long get_numerator(){return numerator;} long get_denominator(){return denominator;} Returnadatosprivados

More Related