Upload
melvin-walls
View
23
Download
1
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
Estructura de Datos En C++
Dr. Romeo Sánchez Nigenda.E-mail: [email protected]://yalma.fime.uanl.mx/~romeo/Oficina: 1er. Piso del CIDET. Oficina con Dr. Oscar ChacónHoras 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
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
Datos abstractos
Operaciones
Interface Pública
Elementos Privados
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
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
class <classname> {
public: <constructor> <destructor> <public data members> <public member functions (methods)>
private: <private data members> <private member functions>};
Un-tipo-de: (A-kind-of)
Clases: Relaciones
class Point { int x, y; public: void setX(int); int getX(); void setY(int); int getY() }
class Circle { int x, y, radius; public: void setX(int); int getX(); void setY(int); int getY() ; void setRadius(int); int getRadius(); }
Es un tipo de
Es-un: (is-a)
Es un
Es-parte-de (is-part-of):
Clases: Relaciones
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
Herencia (inheritance) Relaciona objetos usando relaciones un-tipo-de y es-un. Es el
mecanismo que permite que una clase A herede propiedades de una clase B. Ejemplo: Un Círculo hereda de un Punto:
class Circle : public Point { int radius; public: void setRadius(); int getRadius(); }
Circle acircle;acircle.setX(1);acircle.setY(2);acircle.setRadius();
La relación es-un implica que se puede utilizar un círculo en cualquier lugar donde se espera un punto
Move(Point apoint, int deltax){ apoint.setX(apoint.getX()+deltax);}Circle circle;Move(circle,10);
Subclase
Superclase
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
abstract class Figura {public:
print(); }
class Point : public Figura(){public:
print(){ …;}}
Clases abstractas
No es necesaria la implementación, dependerá de las subclases…
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 placeholders y 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.
template class List T{public:
append(T element);T getFirst();T getNext();
}
Clase Template: Clase A parametrizada con un tipo de datos B. Una vez que un objeto de A es creado, B es reemplazado un el tipo actual de datos.
List Point pointList;Point apoint;pointList.append(apoint);
Polimorfismo Permite que una entidad (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)
Boolean isNull(int i);Boolean isNull(float r);
Objetos de una superclase pueden reemplazarse con objetos de sus subclases.
void display (Figura o){ o.print
}Circle c;Point p; //Asuma que todas estas subclases extienden FiguraSquare s;display(c); //Utiliza la implementación de Circle.print display(p); //Utiliza Point.print
Clases (C++): Ejemplo
class Fraction{ long numerador; long denominador;
void normalize(void); long gcf(long, long); //Greatest common factor long lcm(long,long); //Lowest common
denominatorpublic:
Fraction(void); Fraction (long); Fraction (long,long); long get_numerator(); long get_denominator(); …
}
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/1Soporta operadores: +, *, /
Área privada
Constructores y homogeneidad:Fraction::Fraction(void){
//Supone que 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();}
void main(){Fraction r; //0/1Fraction r(3); // 3/1Fraction r(2,5); // 2/5
}
Clases (C++)
Implementación de métodoslong Fraction::get_numerator(){
return numerator;}
long Fraction::get_denominator(){return denominator;
}
Inline functions: public:
long get_numerator(){return numerator;}long get_denominator(){return denominator;}
Clases (C++)
Returna datos privados