La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.

Presentaciones similares


Presentación del tema: "Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2."— Transcripción de la presentación:

1 Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2

2 C HISTE DEL D ÍA Informática II 2011/2 2

3 C ONTENIDO Informática II 2011/2 3 Repaso 1 Arreglos 2 Clase String 3 4 Listas Enlazadas

4 H ERENCIA Diferentes tipos de objetos usualmente comparten características similares entre sí. La herencia permite generar nuevos tipos, tomando como base alguno ya implementado. También hace posible la implementación de jerarquías desde la generalización hasta la especialización de los objetos. Informática II 2011/2 4

5 H ERENCIA La programación orientada a objetos permite a las clases heredar las características y los comportamientos de otras clases (variables miembro y los métodos). Adicionalmente C++, permite definir una clase modificando una o más clases ya existentes. Estas modificaciones consisten habitualmente en añadir nuevos miembros (variables o métodos) a la clase que se está definiendo, aunque también se puede redefinir variables o funciones miembro ya existentes. Informática II 2011/2 5

6 H ERENCIA La clase de la que se parte en este proceso recibe el nombre de clase base, y la nueva clase que se obtiene se denomina clase derivada. Ésta a su vez puede ser clase base en un nuevo proceso de derivación, iniciando de esta manera una jerarquía de clases. Informática II 2011/2 6

7 E JEMPLO H ERENCIA class vehiculo{ protected: int vel; bool on; public: vehiculo(); vehiculo(int _vel,bool _on); int getVel() const; void setVel(int _vel); ~vehiculo(); }; Informática II 2011/2 7 class bicicleta: private vehiculo{ private: int Ncambio; int pedalear; int Ndiscos; public: bicicleta(); void cambCambio(int _Ncambio); ~bicicleta(); }; //clase vehiculo vehiculo::vehiculo():vel(0),on(false){ cout<<"constructor clase base"<<endl; } vehiculo::vehiculo(int _vel,bool _on):vel(_vel),on(_on){ cout<<"constructor con argumentos clase base"<<endl; } int vehiculo::getVel() const { return vel; } void vehiculo::setVel(int _vel){ vel=_vel; } vehiculo::~vehiculo(){} //clase carro carro::carro():Ncambio(0),acelerar(0){ cout<<"constructor por defecto clase derivada"<<endl; } void carro::cambCambio(int _cambCambio){ Ncambio= _cambCambio; } carro::~carro(){} class carro: public vehiculo{ private: int Ncambio; int acelerar; public: carro(); void cambCambio(int _Ncambio); ~carro(); }; using namespace std; carro audi; int main() { //damos un valor a una variable miembro heredada audi.setVel(10); //accedemos a un metodo heredado cout<<audi.getVel()<<endl; return 0; } audi vel: 10

8 N OTAS : 1 Primero se debe crear la clase base, antes de tratar de crear clases que deriven de esta. 2 El número de variables miembro de una clase derivada es mayor o igual que el de la clase base. 3 Hay algunos elementos de la clase base que no pueden ser heredados: Constructores y destructores Funciones friend Funciones y datos estáticos de la clase Operador de asignación (=) sobrecargado Informática II 2011/2 8

9 C ONSTRUCTORES Y D ESTRUCTORES Cuando un objeto derivado es creado primero es llamado el constructor de la clase base y luego el propio. Informática II 2011/2 9 int vel; bool on; int vel; bool on; int Ncambio; int acelerar; int Ncambio; int acelerar; Parte vehículo Objeto carro Cuando un objeto es derivado y este se destruye, se llamará primero el destructor de este y posteriormente se llama automáticamente el destructor de la clase base. No es posible crear una clase derivada sin crear primero su porción de la clase base.

10 P ASAR ARGUMENTOS AL CONSTRUCTOR BASE Se pueden inicializar las variables miembro heredadas, llamando al constructor de la clase base desde la etapa de inicialización del constructor de la clase derivada así: Informática II 2011/2 10 carro(int _vel,bool _on); carro::carro(int _vel,bool _on): Ncambio(0), acelerar(0){ } vehiculo(_vel,_on),

11 E JEMPLO R EDEFINICIÓN DE M ÉTODOS Informática II 2011/2 11 class vehiculo{ protected: int vel; bool on; public: vehiculo(); vehiculo(int _vel,bool _on); int getVel() const; void setVel(int _vel); ~vehiculo(); }; class carro: public vehiculo{ private: int Ncambio; int acelerar; public: carro(); carro(int _vel,bool _on); int getVel() const; void cambCambio(int _Ncambio); ~carro(); }; int vehiculo::getVel() const { cout<<"funcion getVel clase base"<<endl; return vel; } int carro::getVel() const{ cout<<"funcion getVel clase derivada"<<endl; return vel; } int main() { carro audi(); //damos un valor a una variable miembro heredada audi.setVel(10); //accedemos a un método heredado redefinido cout<<audi.getVel()<<endl; //acedemos al metodo de la clase base cout<<audi.vehiculo::getVel()<<endl; return 0; }

12 S OBRECARGAR V S R EDEFINIR Cuando se sobrecarga funciones, el nombre de la función permanece, pero los argumentos de entrada y de retorno pueden variar, al igual que la implementación. Cuando se redefine una función lo único que cambia es su implementación. El encabezado permanece igual (argumento de retorno y firma) en la clase base como en la derivada. Informática II 2011/2 12

13 O CULTANDO LOS M ÉTODOS DE LA C LASE B ASE Si la clase base contiene varios métodos sobrecargados, es decir métodos con nombres iguales pero con argumentos e implementaciones diferentes, y redefinimos uno de esos métodos dentro de una clase derivada, todos los métodos dentro de la clase base que respondan al mismo nombre quedaran ocultos, es decir no se podrán acceder a través del objeto derivado. Informática II 2011/2 13

14 C ONVERSIONES ENTRE CLASE B ASE Y D ERIVADA Informática II 2011/2 14 Objeto_claseBase= Objeto_claseDerivada; Objeto_claseDerivada= Objeto_claseBase; Se puede hacer referencia a un objeto de la clase derivada con su dirección contenida en un puntero a la clase base. vehiculo *ptrV=new carro(30,true); carro *ptrC=new vehiculo();

15 C ONVERSIONES ENTRE CLASE B ASE Y D ERIVADA En conclusión un puntero a la clase base puede almacenar la dirección de un objeto perteneciente a una clase derivada. Sin embargo, se aplicarán los métodos de la clase a la que pertenezca el puntero (base), no los de la clase a la que pertenece el objeto (derivada). El tipo del puntero utilizado para acceder a un método que se encuentra implementado en ambas clases (base y derivada), determinará cuál de los dos métodos llamar. Informática II 2011/2 15 using namespace std; int main() { vehiculo *ptrV=new carro(30,true); cout getVel()<<endl; //se accede al metodo de la clase base return 0; }

16 E JEMPLO M ÉTODOS V IRTUALES Informática II 2011/2 16 class vehiculo{ protected: int vel; bool on; public: vehiculo(); vehiculo(int _vel,bool _on); virtual int getVel() const; void setVel(int _vel); ~vehiculo(); }; class carro: public vehiculo{ private: int Ncambio; int acelerar; public: carro(); carro(int _vel,bool _on); int getVel() const; void cambCambio(int _Ncambio); ~carro(); }; int vehiculo::getVel() const { cout<<"funcion getVel clase base"<<endl; return vel; } int carro::getVel() const{ cout<<"funcion getVel clase derivada"<<endl; return vel; } using namespace std; int main() { vehiculo *ptrV=new carro(30,true); cout getVel()<<endl; //se accede al método de la clase derivada return 0; }

17 C ONTENIDO Informática II 2011/2 17 Repaso 1 Arreglos 2 Clase String 3 4 Listas Enlazadas

18 D EFINICIÓN Definición: Un array es una colección de variables del mismo tipo de datos con un mismo nombre. Los arrays son un ejemplo de una variable estructurada en la cual: –Hay un numero de piezas de datos contenidos en el mismo nombre. –Hay un método ordenado para la extracción de datos individuales del array

19 E JEMPLO A RREGLOS Solución 1: Crear una variable especifica por empleado en la cual se almacene la identificación de cada uno de los empleados. Problema: Supongamos el señor Burns le solicita a usted un programa que le permita llevar un registro de la identificación de cada uno de los empleados de la plata nuclear de Springfield, ¿Cómo lo haría?

20 E JEMPLO A RREGLOS Problema solución anterior: El problema se vuelve mas difícil a medida que el numero de empleados aumenta, pues implicara la creación de mas variables individuales (id5, id6, …)

21 Solución al problema anterior: En los arrays se encuentra la respuesta. Pues un array es como una caja para guardar elementos o como un archivador. Utiliza un sistema de indexación para encontrar el valor de cada una de las variables almacenadas en su interior. E JEMPLO A RREGLOS

22 R EPASO A RREGLOS Un array contiene N elementos. Los elementos de un array se enumeran consecutivamente 0, 1, 2, 3,.. (N-1) Estos números se denominan valores índice o subindice del array. Y sirven para accesar cualquier elemento del array. Número de elementos = 10 Subíndice

23 El arreglo edad tiene 10 elementos (edades), los indice van desde 0 hasta 9. Cada elemento se accede con el nombre del arreglo y con el indice al que corresponda. El elemento 0 del vector Edad vale 24 El elemento 5 del vector Edad vale 17 Número de elementos = 10 Subíndices Valores Nombre R EPASO A RREGLOS

24 I NICIALIZACIÓN DE A RREGLOS INICIALIZACIÓN En el momento de declarar el arreglo, se puede inicializar Se crea el arreglo y se inicializa int edad[10]={16,22,19,21,21,18,19,15,32,28}; Se crea el arreglo y se inicializa float temp[4]={21.3, 23.5, 27.5, 26.4}; 16221921 1819153228 21.3 23.5 27.526.4

25 A RREGLOS DE O BJETOS Los arreglos pueden guardar secuencias de datos de cualquier tipo, incluyendo los objetos. Si se desea usar un método de un objeto en un arreglo se usa el operador punto (.), tal como se hace con los objetos. Carro carrosBacanos[2]; // ¡Debe existir un constructor // por defecto que inicialice cada uno de los objetos! carrosBacanos[0].acelerar(); Informática II 2009/2 25

26 A RREGLOS M ULTIDIMENSIONALES Es posible crear arrays de tantas dimensiones como requieran sus aplicaciones. Se declaran siguiendo el patrón de la declaración de un vector: tipo nombre [d1] [d2] [d3]… [dN];

27 A RREGLOS DE 2 D IMENSIONES Declaración Ejemplo: tipo nombre [fila] [columna]; int A[2] [3]; A[0][0] Nombre Columnas = 3 Filas = 2 A[0][1] A[0][2] A[1][0] A[1][1] A[1][2]

28 A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2] A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2] A RREGLOS DE 2 D IMENSIONES

29 I NICIALIZACIÓN A RREGLOS M ULTIDIMENSIONALES A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2] int matrizA [2] [3] = { {3,5,7}, {8,6,4} }; Fila 0 Fila 1 3 3 5 5 7 7 8 8 6 6 4 4 int matrizA [2] [3] = {{3,5,7}, {8,6,4} }; int matrizA [2] [3] = { 3,5,7,8,6,4 };

30 B[0][0][2] B[0][1][2] B[0][2][2] B[1][2][2] B[1][0][1 ] B[1][1][1 ] B[0][0][1] B[0][1][1] B[1][0][1 ] B[1][1][1] B[1][2][1] B[0][2][1] A RREGLOS DE 3 D IMENSIONES Declaración tipo nombre [fila] [columna] [Planos]; Int matrizB[2] [3] [3]; B[0][0][0] Nombre Columnas = 3 Filas = 2 B[0][1][0] B[0][2][0] B[1][0][0] B[1][1][0] B[1][2][0] Planos = 3

31 int matrizA [2] [3] [3]={ {{1,3,5}, {7,9,11}}, {{2,4,6}, {8,10,12}}, {{3,7,11}, {15,19,23}} }; Fila 0 Fila 1 1 1 3 3 5 5 7 7 9 9 11 Bloque 0 Bloque 1 Bloque 2 2 2 4 4 6 6 8 8 10 12 3 3 7 7 11 15 19 23 F0 F1 C0 C1 C2 C0 C1 C2 C0 C1 C2 Bloque 0 Bloque 1 Bloque 2 A RREGLOS DE 3 D IMENSIONES

32 U SO DEL H EAP PROBLEMAS DE MEMORIA Cuando se declara un arreglo, se separa un espacio en memoria fijo para almacenarlo. El arreglo se localiza en el stack (limitado). Heap. Tiene más memoria. Es posible crear estructuras que se comportan de manera dinamica

33 Arreglos en el heap –Arreglo de apuntadores. Diferencia entre apuntador a un arreglo y arreglo de apuntadores 1: CAT FamilyOne[500]; 2: CAT * FamilyTwo[500]; 3: CAT * FamilyThree = new CAT[500]; (3) es una variante de (1), muy distinta de (2). U SO DEL H EAP PROBLEMAS DE MEMORIA

34 E JEMPLO Oveja rebanoUno[100]; //Arreglo de 100 ovejas en la pila Oveja * rebanoDos[100]; //Arreglo de 100 punteros a ovejas Oveja * rebanoTres = new Oveja[100]; //Puntero a arreglo de 100 ovejas en el //heap, rebanoTres apunta al primer //objeto tipo oveja ubicado en el heap Informática II 2011/2 34

35 Uso de apuntadores con nombres de arreglos –Los arreglos son apuntadores constantes. CAT Family[50]; –Es un apuntador constante a &Family[0]; –Es legal usar nombres de arreglos como apuntadores constantes y viceverza. Family[4]; Family + 4; U SO DEL H EAP PROBLEMAS DE MEMORIA Arreglos en el Free Store delete [] Family;

36 D ECLARANDO ARREGLOS EN EL HEAP CAT *Family = new CAT[500]; Por ejemplo, usted puede escribir: CAT *Family = new CAT[500]; CAT *pCat = Family; // pCat apunta a Family[0] pCat->SetAge(10); // Establecer Family[0] a 10 pCat++; // avanzar a Family[1] pCat->SetAge(20);// Establecer Family[1] a 20 Informática II 2009/2 36

37 L IBERANDO MEMORIA DEL HEAP Para liberar toda la memoria reservada por un arreglo en el heap, será necesario usar el comando delete [ ] sobre el puntero que apunta a la primera dirección del arreglo. delete [ ] punteroRebano; /* Notese que se utiliza los operadores [ ], en caso de no utilizarlos, solo se liberará el primer elemento del arreglo, generando así fugas de memoria*/ Informática II 2009/2 37

38 O TORGANDO TAMAÑO DE LOS ARREGLOS EN TIEMPO DE EJECUCIÓN Cuando se utilizan arreglos que se encuentren ubicados en el heap, será posible asignar su tamaño en tiempo de ejecución, otorgándole gran posibilidad de intercambio a los programas. Gato pGato = new Gato [vble]; /* ¡Importante!, recuerde liberar la memoria cuando ya no se vaya a usar */ Informática II 2009/2 38

39 C ONTENIDO Informática II 2011/2 39 Repaso 1 Arreglos 2 Clase String 3 4 Listas Enlazadas

40 A RREGLOS CHAR Y STRINGS En C es común utilizar arreglos char cuyo último carácter es nulo (\0), este tipo de arreglo se denominan strings tipo C. Aunque su funcionamiento es válido, hay que tener cuidado con algunas características de éstos arreglos. Informática II 2009/2 40

41 A LGUNAS FUNCIONES PARA MANEJAR STRINGS C++ hereda múltiples funciones para manejar strings desde el lenguaje C, alguna de éstas son: strcpy( ) strcmp( ) strlen( ) strcat( ) Utilice a man para conocer su funcionamiento Informática II 2009/2 41

42 C LASE STRING Aunque muchas de las funciones heredadas de C pueden trabajar con los strings, éstas no implementan una solución orientada a objetos. En las bibliotecas estándares de C++, es posible encontrar una clase para manipular este tipo de datos. Se denomina la clase String. Investigue al respecto. Informática II 2009/2 42

43 C LASE STRING Informática II 2011/2 43 La clase string está definida en la cabecera string (#include ) La cual no contiene la definición de la clase string que contiene solo las funciones para trabajar con strings terminados en NULL - por ejemplo para trabajar con char cadena[45]) Si se incluye el módulo no hace falta incluir, porque la segunda está incluida en la primera. Incluir las dos no provoca error y mejora la legibilidad.

44 E JEMPLO CLASE STRING Informática II 2011/2 44 #include using namespace std; carro audi; int main() { string s1; s1 = "http://"; string s2 = "microe.udea.edu.co"; string s3(/~diegoserna "); string s4(1, char(32)); string s5(2, '\n'); string s6 (s3, 2, 10); string s7 (informatica 2"); string msg = s1+s2+s3+s5+s6+s4+s7; return 0; } http://microe.udea.edu.co/~diegoserna diegoserna informatica 2

45 C LASE STRING Operadores Funciones miembro Funciones externas Informática II 2011/2 45 http://www.cplusplus.com /reference/string/string/

46 C ONTENIDO Informática II 2011/2 46 Repaso 1 Arreglos 2 Clase String 3 4 Listas Enlazadas

47 L ISTAS ENLAZADAS Aunque los arreglos son excelentes contenedores y pueden albergar cualquier tipo de datos, tienen el inconveniente de ser de tamaño fijo. Este problema puede arreglarse reasignando su tamaño dinámicamente en tiempo de ejecución; sin embargo, cuando haya que mover, liberar o reasignar memoria muchas veces, puede requerir muchos recursos del pc. Informática II 2009/2 47

48 L ISTAS ENLAZADAS Las listas enlazadas son estructuras de datos que contienen pequeños contenedores diseñados para enlazarse unos a otros. La idea de esta estructura, es que cada uno de los objetos conoce la ubicación del siguiente objeto en la cadena. Informática II 2009/2 48

49 L ISTAS ENLAZADAS Cada contenedor de la lista se denomina nodo. Al primer nodo de la lista se le denomina la cabeza de la lista, al último la cola. Existen tres tipos fundamentales de listas: – Enlazados de manera sencilla – Doblemente enlazadas – Arboles Informática II 2009/2 49

50 L ISTAS ENLAZADAS DE MANERA SENCILLA Cada nodo apunta al siguiente en la lista, nunca en el sentido contrario. Si se desea conocer el valor de un nodo particular, es necesario recorrer toda la lista nodo por nodo desde su inicio. Informática II 2009/2 50

51 L ISTAS DOBLEMENTE ENLAZADAS Son aquellas que permiten moverse tanto hacia el siguiente nodo como al anterior, pues en cada uno de ellos guarda dicha información. Informática II 2009/2 51

52 L ISTAS EN ÁRBOL Permiten que cada nodo apunte a dos o más nodos. Informática II 2009/2 52

53 R ESUMEN 1 Una arreglo es una colección de tamaño fijo de objetos que son todos del mismo tipo. 2 Las matrices no hacen una comprobación de límites. Un error común es escribir para compensar n de una matriz de n miembros. 3 Los arreglos pueden ser unidimensional o multidimensional. En cualquier caso, todos los miembros del arreglo se pueden inicializar, en cualquier tipo predefinido, tales como int, o los objetos de una clase que tiene un constructor predeterminado. Informática II 2009/2 53

54 R ESUMEN 1 Arreglos y su contenido puede estar en el heap o en la pila. Si elimina un arreglo en el heap, recuerde utilizar los corchetes en la llamada a eliminar. 2 Los nombres de los arreglos son punteros constantes que apuntan a los primeros elementos del arreglo. Apuntadores y arreglos usan punteros aritméticos para encontrar el siguiente elemento de una matriz. 3 Usted puede crear listas enlazadas para gestionar colecciones cuyo tamaño no se conoce en tiempo de compilación. De las listas enlazadas, puede crear cualquier número de más estructuras complejas de datos. 4 Las Strings son arreglos de caracteres( char). C + + proporciona características especiales para la gestión de arreglos tipo char, incluyendo la habilidad para inicializar con cadenas entre comillas. Informática II 2009/2 54

55 Informática II 2011/2 55

56 Informática II 2011/2 56

57 B IBLIOGRAFÍA Aprenda C++ Avanzado como si estuviera en primero. Tecnun. C con clase http://c.conclase.net/curso/?cap=036#inici o http://c.conclase.net/curso/?cap=036#inici o Sams Teach yourselft C++ in 21 days http://newdata.box.sk/bx/c/htm/ch12.htm http://newdata.box.sk/bx/c/htm/ch12.htm Informática II 2011/2 57


Descargar ppt "Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2."

Presentaciones similares


Anuncios Google