13
Estructura de Datos En C++ Dr. Romeo Sánchez Nigenda. E-mail: [email protected] 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

Estructura de Datos En C++

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

Page 1: Estructura de Datos En C++

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

Page 2: Estructura de Datos En C++

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

Page 3: Estructura de Datos En C++

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

Page 4: Estructura de Datos En C++

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>};

Page 5: Estructura de Datos En C++

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

Page 6: Estructura de Datos En C++

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

Page 7: Estructura de Datos En C++

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

Page 8: Estructura de Datos En C++

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…

Page 9: Estructura de Datos En C++

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);

Page 10: Estructura de Datos En C++

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

Page 11: Estructura de Datos En C++

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

Page 12: Estructura de Datos En C++

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++)

Page 13: Estructura de Datos En 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