Tema 5. Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2010/2011

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Tema 5. Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2010/2011"

Transcripción

1 Tema 5 Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2010/2011

2 Contenido Introducción Clases y objetos Herencia Herencia múltiple Genericidad Colecciones Definición de estrategias. Punteros a función. Corrección y robustez en C++ Asertos Mecanismo de excepciones Curso 2010/2011 Programación Orientada a Objetos 2

3 Introducción Creado por Bjarne Stroustrup en los 80. Diseñado como una extensión de C que incluye características orientadas a objetos. Es un lenguaje híbrido. Ha sido inspiración de lenguajes de programación posteriores como Java y C#. A finales de los 90 fue estandarizado: ISO C++ Las librerías del lenguaje son escasas. La librería más notable es STL (Standard Template Library). Actualmente, sigue siendo un lenguaje de programación importante en algunos dominios. Curso 2010/2011 Programación Orientada a Objetos 3

4 Clases y Objetos en C++ Este apartado trata: Definición de clases. Visibilidad y clases amigas. Espacios de nombres. Tipos del lenguaje. Constructores y destructores. Semántica de los objetos. Semántica de los operadores de asignación e igualdad. Instancia actual. Métodos y mensajes. Paso de parámetros. Función main. Curso 2010/2011 Programación Orientada a Objetos 4

5 Clases Los elementos que definen una clase son: Atributos, Métodos y Constructores. A diferencia de Java: Se separa: Definición de una clase (fichero cabecera.h) Implementación (fichero código fuente.cpp). No es obligatorio que los ficheros fuente correspondan con las clases. Un fichero puede implementar varias clases. Para poder utilizar o implementar una clase hay que importar su cabecera: #include Cuenta.h Curso 2010/2011 Programación Orientada a Objetos 5

6 Clase Cuenta - Especificación Cuenta.h Definición de la clase cuenta Banco.cpp Cuenta.cpp #include Cuenta.h utiliza Cuenta #include Cuenta.h implementa Cuenta Curso 2010/2011 Programación Orientada a Objetos 6

7 Cuenta.h (1/2) #include Persona.h class Cuenta { public: void reintegro(double cantidad); void ingreso(double cantidad); double getsaldo() const; Persona* gettitular() const; double* getultimasoperaciones(int n) const; static int getnumeroctas(); Curso 2010/2011 Programación Orientada a Objetos 7

8 Cuenta.h (2/2) private: const static int MAX_OPERACIONES = 20; const static double SALDO_MINIMO = 100; Persona* const titular; double saldo; int codigo; static int ultimocodigo; double* ultimasoperaciones; bool puedosacar(double cantidad); }; Curso 2010/2011 Programación Orientada a Objetos 8

9 Cuenta.cpp int Cuenta::ultimoCodigo = 0; void Cuenta::reintegro(double cantidad){ if (puedosacar(cantidad)) { saldo = saldo - cantidad; } } void Cuenta::ingreso(double cantidad){ saldo = saldo + cantidad; } bool Cuenta::puedoSacar(double cantidad){ return (saldo >= cantidad); } Curso 2010/2011 Programación Orientada a Objetos 9

10 Clases Los miembros de una clase pueden ser de instancia (por defecto) o de clase, utilizando el modificador static ( = Java). Las constantes se declaran const static. Método de consulta que no va a modificar el estado se marca utilizando también el modificador const. Ejemplo: double getsaldo() const; En la implementación, los nombres de los miembros son calificados con la clase: Ejemplo: Cuenta::ingreso Curso 2010/2011 Programación Orientada a Objetos 10

11 Modificador const en los atributos El modificador const se utiliza para proteger los atributos, el estado de los objetos o ambos. Persona* const titular; const protege el atributo. titular es un atributo de sólo lectura (= final de Java) const Persona* titular; const protege el objeto apuntado por el atributo. El objeto Persona no puede cambiar de estado. const Persona* const titular; Se protege tanto el atributo como el objeto. Curso 2010/2011 Programación Orientada a Objetos 11

12 Modificador const en los atributos Persona* const titular; codigo titular saldo ultimasoperaciones Pepito Curso 2010/2011 Programación Orientada a Objetos 12

13 Modificador const en los atributos const Persona* titular; codigo titular saldo ultimasoperaciones Pepito Curso 2010/2011 Programación Orientada a Objetos 13

14 Modificador const en los atributos const Persona* const titular; codigo titular saldo ultimasoperaciones Pepito Curso 2010/2011 Programación Orientada a Objetos 14

15 Visibilidad de las declaraciones El nivel de visibilidad se especifica para un grupo de miembros (declaraciones): public: visible para todo el código. private: visible sólo para la clase. Clases amigas: En C++ no se existe el concepto de paquete. En la declaración de una clase podemos indicar el nombre de otras clases con acceso total a la clase. El privilegio de amistad de una clase no es transitivo ni hereditario. Curso 2010/2011 Programación Orientada a Objetos 15

16 Clases amigas class NodoArbol { friend class Arbol; private: int valor; NodoArbol decha; NodoArbol izda; }; class Arbol{ private: NodoArbol *raiz;... raiz->valor = 50;... }; Curso 2010/2011 Programación Orientada a Objetos 16

17 Estructuras Unidad modular heredada de C. En C++ equivale al concepto de clase salvo: Cambia la palabra class por struct Por defecto todos los miembros son públicos excepto que se diga lo contrario. struct Cuenta{ void ingreso (double cantidad); void reintrego (double cantidad); private: }; int codigo; Persona* const titular; double saldo; Curso 2010/2011 Programación Orientada a Objetos 17

18 Espacios de nombres Un espacio de nombres (namespace) es un mecanismo para agrupar un conjunto de elementos (clases, enumerados, funciones, etc.) relacionados. Evita la colisión de los nombres de identificadores. El orden de declaración de elementos es relevante. Puede estar definido en varios ficheros. Es un concepto diferente a los paquetes de Java: No hay relación entre la estructura lógica y física. No proporcionan privilegio de visibilidad. Curso 2010/2011 Programación Orientada a Objetos 18

19 Espacios de nombres Para utilizar un elemento definido en un espacio de nombres: Se utiliza el nombre calificado del elemento: gestioncuentas::cuenta Se declara el uso del espacio de nombres: using namespace gestioncuentas; No existen elementos privados en un espacio de nombres. Curso 2010/2011 Programación Orientada a Objetos 19

20 Espacios de nombres En Cuenta.h En Banco.h namespace gestioncuentas{ class Cuenta { }; } namespace gestioncuentas{ class Banco { }; } Curso 2010/2011 Programación Orientada a Objetos 20

21 Tipos del lenguaje Tipos de datos primitivos: byte, short, int, long,float, double,char, bool, etc. Enumerados: enum Estado {OPERATIVA, INMOVILIZADA, NUM_ROJOS}; Objetos. Punteros: Cuenta* es el tipo puntero a Cuenta Una variable de tipo Cuenta* puede contener la dirección de un objeto de tipo Cuenta. Un puntero a un objeto es un concepto similar a una referencia Java. Curso 2010/2011 Programación Orientada a Objetos 21

22 Arrays En la declaración de un array se indica su tamaño ( = C): int array[10]; Si el tipo es una clase, es necesario que la clase tenga un constructor sin parámetros: Posicion posiciones[4]; La declaración y uso de un array al estilo Java sería: Cuenta** cuentas = new Cuenta*[10]; Importante: los punteros del array no están inicializados. No se controla el acceso incorrecto al array. Curso 2010/2011 Programación Orientada a Objetos 22

23 Enumerados Es un tipo que puede almacenar un conjunto de valores. El enumerado define un conjunto de constantes de tipo entero. Por defecto los valores se asignan de forma creciente desde 0. El tipo de cada uno de los elementos es el del enumerado. Curso 2010/2011 Programación Orientada a Objetos 23

24 Enumerados Definición namespace banco{ enum EstadoCuenta{ OPERATIVA, INMOVILIZADA, NUM_ROJOS //OPERATIVA == 0, INMOVILIZADA == 1, NUM_ROJOS == 2 }; } class Cuenta { private: EstadoCuenta estado; }; Curso 2010/2011 Programación Orientada a Objetos 24

25 Enumerados Uso En Cuenta.cpp #include "Cuenta.h" using namespace banco; void Cuenta::reintegro(double cantidad){ } if (estado!=inmovilizada && puedosacar(cantidad)){ } saldo = saldo - cantidad; Para referenciar un valor del enumerado no tiene que ir precedido por el nombre del enumerado. Curso 2010/2011 Programación Orientada a Objetos 25

26 Constructores No se puede asignar un valor inicial a los atributos en el momento de la declaración a menos que sean const y static (constantes). Por tanto, no podemos asegurar que los atributos tengan un valor inicial. Es necesario definir constructores. Curso 2010/2011 Programación Orientada a Objetos 26

27 Constructores Método especial con el mismo nombre que la clase y sin valor de retorno ( = Java). Está permitida la sobrecarga (= Java). Si no existe ningún constructor en la clase, el compilador proporciona el constructor por defecto (= Java). Los atributos const se tienen que inicializar en línea. class Cuenta { public: Cuenta (Persona *titular); Cuenta (Persona *titular, double saldoinicial); }; Curso 2010/2011 Programación Orientada a Objetos 27

28 Constructores - Clase Cuenta Cuenta::Cuenta (Persona *persona, double saldoinicial) :titular(persona) { codigo = ++ultimocodigo; saldo = saldoinicial; ultimasoperaciones = new double[cuenta::max_operaciones]; numoperaciones = 0; estado = OPERATIVA; } Cuenta::Cuenta (Persona *persona) :titular(persona) { } Curso 2010/2011 Programación Orientada a Objetos 28

29 Constructores A diferencia de Java, no se utiliza la palabra clave this para la reutilización de constructores. Soluciones: Utilizar un método privado que sea invocado desde los constructores. Utilizar argumentos por defecto para los constructores. Curso 2010/2011 Programación Orientada a Objetos 29

30 Reutilización de constructores Cuenta::Cuenta (Persona *persona): titular(persona) { inicializa(cuenta::saldo_minimo); } Cuenta::Cuenta (Persona *persona, double saldoinicial) :titular(persona) { inicializa(saldoinicial); } void Cuenta::inicializa(double saldoinicial) { codigo = ++ultimocodigo; saldo = saldoinicial; ultimasoperaciones = new double[cuenta::max_operaciones]; estado = OPERATIVA; } Curso 2010/2011 Programación Orientada a Objetos 30

31 Reutilización de constructores En cualquier función, método o constructor podemos declarar argumentos con valores por defecto. Los argumentos por defecto deben aparecer juntos al final de la lista de argumentos. Los valores por defecto de los argumentos se indican en la declaración de la función (fichero.h) Ejemplo: Cuenta Definimos un único constructor. Para el argumento saldoinicial establecemos un valor por defecto. Curso 2010/2011 Programación Orientada a Objetos 31

32 Reutilización de constructores Fichero cabecera: class Cuenta { public: Cuenta (Persona *titular, double saldoinicial = SALDO_MINIMO); }; Las siguientes creaciones son equivalentes: Cuenta(titular); Toma como valor del saldo el valor por defecto (100) Cuenta (titular, 200); El parámetro establece el valor del saldo a 200 Curso 2010/2011 Programación Orientada a Objetos 32

33 Destructores A diferencia de Java, no existe un mecanismo automático de liberación de memoria dinámica. Hay que definir destructores de objetos. Un destructor es un método sin argumentos con el mismo nombre de la clase, precedido por ~. Se invoca automáticamente cada vez que se libera la memoria del objeto. Libera memoria y recursos adquiridos por el objeto: El uso habitual es liberar la memoria adquirida en el constructor. Curso 2010/2011 Programación Orientada a Objetos 33

34 Destructor Clase Cuenta Cuenta.h: class Cuenta { public: Cuenta (Persona *titular, double saldoinicial= SALDO_MINIMO); ~Cuenta(); }; Cuenta.cpp: Cuenta::~Cuenta(){ delete[] ultimasoperaciones; } Curso 2010/2011 Programación Orientada a Objetos 34

35 Semántica de los objetos Los objetos pueden declararse de dos modos: Por referencia: se declara un puntero a un objeto. Los objetos se crean con el operador new (= Java). Cuenta* cuenta; Por valor: la declaración del objeto reserva la memoria y lo inicializa (llama a un constructor). Cuenta cuenta(persona); Curso 2010/2011 Programación Orientada a Objetos 35

36 Semántica de los objetos Semántica referencia: Cuenta* cuenta; cuenta = new Cuenta(persona, 1000); El valor null de Java está definido como una constante en C++: NULL. El objeto se destruye con el operador delete: delete cuenta; Semántica valor: Cuenta cuenta(persona, 1000); En la declaración de la variable también se construye el objeto. Los objetos por valor NO se liberan con el operador delete. Curso 2010/2011 Programación Orientada a Objetos 36

37 Objetos embebidos La semántica valor permite definir objetos embebidos dentro de otros objetos. codigo titular saldo autorizado ultimasoperaciones María Pepito Curso 2010/2011 Programación Orientada a Objetos 37

38 Objetos embebidos La declaración del atributo autorizado es un objeto embebido. class Cuenta { public: private: Persona autorizado; Persona* const titular; double saldo; int codigo; EstadoCuenta estado; }; Curso 2010/2011 Programación Orientada a Objetos 38

39 Objetos embebidos La declaración de objetos embebidos sólo es posible si se cumple una de las siguiente condiciones: La clase del objeto embebido tiene un constructor sin argumentos. Se realiza una inicialización en línea en el constructor. Curso 2010/2011 Programación Orientada a Objetos 39

40 Objetos embebidos El objeto se inicializa en línea: Cuenta::Cuenta (Persona* persona, { } string nombreaut, string dniaut, double saldoinicial):autorizado(nombreaut, dniaut), codigo = ++ultimocodigo; titular(persona) La inicialización en línea es obligatoria si la clase del objeto embebido no tiene constructor sin argumentos. Curso 2010/2011 Programación Orientada a Objetos 40

41 Operador de asignación (=) Cuenta* cta1; Cuenta* cta2; Cuenta cta3; Cuenta cta4; Semántica: cta1 = cta2; copia de punteros (= Java) cta3 = cta4; copia campo a campo de los valores de cta4 en cta3 (copia superficial) cta1 = &cta3; copia de punteros Curso 2010/2011 Programación Orientada a Objetos 41

42 Asignación con semántica valor codigo titular saldo codigo titular saldo cuenta cuenta2 Pepito Juanito cuenta1 = cuenta2 Curso 2010/2011 Programación Orientada a Objetos 42

43 Asignación con semántica valor codigo titular saldo cuenta1.codigo = cuenta2.codigo Pepito codigo titular saldo cuenta cuenta2 cuenta1.titular = cuenta2.titular Juanito cuenta1 = cuenta2 Curso 2010/2011 Programación Orientada a Objetos 43

44 Operador de asignación y atributos const Problema: Cuenta cuenta1(persona1); Cuenta cuenta2(persona2); cuenta1 = cuenta2; En la clase Cuenta el atributo titular se ha declarado de sólo lectura (const). Al hacer una asignación entre objetos cuenta con semántica valor se hace una copia superficial de los atributos. Se intentaría hacer una copia de los titulares. Esto es, cambiar el valor del atributo titular de cuenta1 por el valor del atributo titular de cuenta2. La asignación da un error en tiempo de compilación. Curso 2010/2011 Programación Orientada a Objetos 44

45 Asignación con semántica valor y atributo const cuenta1 = cuenta2 codigo titular saldo codigo titular saldo cuenta cuenta2 Pepito ERROR!! cuenta1.titular = cuenta2.titular cuenta1.titular está protegido. Juanito Curso 2010/2011 Programación Orientada a Objetos 45

46 Operador de igualdad (==) Cuenta* cta1; Cuenta* cta2; Cuenta cta3; Cuenta cta4; Semántica: cta1 == cta2; igualdad de punteros, identidad (= Java) cta3 == cta4; Por defecto no está definido Curso 2010/2011 Programación Orientada a Objetos 46

47 Instancia actual Al igual que en Java, se define la palabra reservada this que es un puntero a la instancia actual. void Cuenta::ingreso(double cantidad) { this->saldo = this->saldo + cantidad; } Curso 2010/2011 Programación Orientada a Objetos 47

48 Métodos y mensajes Al igual que en Java, los métodos definidos en una clase son los mensajes aplicables sobre los objetos de la clase. Está permitida la sobrecarga de métodos declarados dentro de la misma clase. La aplicación de un mensaje varía según si el objeto es manejado por valor o referencia:. (notación punto) el receptor es un objeto por valor -> (notación flecha) el receptor es un puntero a objeto Si no se indica el objeto receptor, la llamada se realiza sobre la instancia actual. Curso 2010/2011 Programación Orientada a Objetos 48

49 Mensajes Cuenta objcta; Cuenta* ptrocta; Notación punto para objetos objcta.reintegro(1000); (*ptrcta).reintegro(1000); Notación flecha para punteros: ptrocta->reintegro(1000); (&objcta)->reintegro(1000); Curso 2010/2011 Programación Orientada a Objetos 49

50 Paso de parámetros void Cuenta::reintegro(double cantidad) { } double v = ; cuenta.reintegro(6000.0); cuenta.reintegro(v); Parámetro formal Parámetro real Paso por valor el parámetro formal es una copia del parámetro real ( = Java ). Paso por referencia el parámetro formal referencia al parámetro real. Además, hay que tener en cuenta que los objetos pueden tener semántica valor o semántica referencia. Curso 2010/2011 Programación Orientada a Objetos 50

51 Paso por valor con semántica referencia void Banco::transferencia1(Cuenta* emisor, Cuenta* receptor, double cantidad){ } emisor->reintegro(cantidad); receptor->ingreso(cantidad); emisor = new Cuenta(emisor->getTitular()); banco.transferencia(cuenta1, cuenta2, ); Paso por valor del puntero ( = Java). El estado de cuenta1 y cuenta2 cambia. El nuevo puntero de emisor no afecta al parámetro real (cuenta1) que se pasa como parámetro (es una copia). Curso 2010/2011 Programación Orientada a Objetos 51

52 Paso por valor con semántica valor void Banco::transferencia2(Cuenta emisor, Cuenta receptor, double cantidad){ } emisor.reintegro(cantidad); receptor.ingreso(cantidad); banco.transferencia(cuenta1, cuenta2, ); El estado de los parámetros reales cuenta1 y cuenta2 no cambia. emisor y receptor son una copia de los objetos con semántica valor que se pasan como parámetro. Curso 2010/2011 Programación Orientada a Objetos 52

53 Paso por referencia con semántica referencia void Banco::transferencia3(Cuenta* emisor, Cuenta*& receptor, double cantidad){ } emisor->reintegro(cantidad); receptor->ingreso(cantidad); receptor = new Cuenta(receptor->getTitular()); banco.transferencia(cuenta1, cuenta2, ); Paso por referencia del puntero. El cambio del puntero en el parámetro formal (receptor) afecta al parámetro real (cuenta2). Curso 2010/2011 Programación Orientada a Objetos 53

54 Paso por referencia con semántica valor void Banco::transferencia4(Cuenta* emisor, Cuenta& receptor, double cantidad){ } emisor->reintegro(cantidad); receptor.ingreso(cantidad); Cuenta otracuenta; receptor = otracuenta; banco.transferencia(cuenta1, cuenta2, ); Paso por referencia del objeto con semántica valor cuenta2. El cambio en receptor (estado y parámetro) afecta a cuenta2. Curso 2010/2011 Programación Orientada a Objetos 54

55 Parámetros const Pasar un objeto grande por referencia es más eficiente que pasarlo por valor, pero se corre el riesgo de modificar el objeto. Solución: utilizar la palabra reservada const para indicar que no se puede modificar el estado del objeto. const se puede utilizar en otras situaciones diferentes. Existen 8 combinaciones de paso de parámetros por valor o por referencia de un objeto con semántica valor o referencia en el que el modificador const protege el objeto o el parámetro. No todas las combinaciones son válidas. Curso 2010/2011 Programación Orientada a Objetos 55

56 Parámetros const en paso por valor con semántica referencia void transferencia11(cuenta* emisor, const Cuenta* receptor, double cantidad); Se protege el estado del objeto cuenta apuntado por receptor. void transferencia12(cuenta* emisor, Cuenta* const receptor, double cantidad); Equivale a los parámetros final de Java. Se protege el parámetro formal. No sería válida la sentencia receptor = NULL; en el cuerpo del método. Curso 2010/2011 Programación Orientada a Objetos 56

57 Parámetros const en paso por valor con semántica valor void transferencia21(cuenta* emisor, const Cuenta receptor, double cantidad); void transferencia22(cuenta* emisor, Cuenta const receptor, double cantidad); Ambas declaraciones son equivalentes puesto que con semántica valor el estado del objeto es equivalente al valor del parámetro. No se puede modificar ni el parámetro ni el estado. Curso 2010/2011 Programación Orientada a Objetos 57

58 Parámetros const en paso por referencia con semántica referencia void transferencia31(cuenta* emisor, const Cuenta*& receptor, double cantidad); Se protege el estado del objeto cuenta apuntado por receptor. void transferencia32(cuenta* emisor, No compila!! Cuenta*& const receptor, double cantidad); No tiene sentido proteger un parámetro que se ha declarado modificable al ser paso por referencia. Curso 2010/2011 Programación Orientada a Objetos 58

59 Parámetros const en paso por referencia con semántica valor void transferencia41(cuenta* emisor, const Cuenta& receptor, double cantidad); Se protege el estado del objeto cuenta receptor. Desde el punto de vista del paso de parámetros, tiene poco sentido pasar un objeto con semántica valor por referencia y utilizar const para evitar la modificación. No obstante, se utiliza por motivos de eficiencia. void transferencia42(cuenta* emisor, No compila!! Cuenta& const receptor, double cantidad); No tiene sentido proteger un parámetro que se ha declarado modificable al ser paso por referencia. Curso 2010/2011 Programación Orientada a Objetos 59

60 Función main Sólo puede haber un punto de entrada en el espacio raíz. Sólo exige declarar una función con nombre main, y valor de retorno int. Opcionalmente puede tener un parámetro con los argumentos del programa. Ejemplos: int main(char* args[]) int main() Curso 2010/2011 Programación Orientada a Objetos 60

61 Herencia en C++ Este apartado trata: Diferencias entre herencia C++ y Java. Tipos de herencia: pública y privada. Herencia y constructores. Redefinición y métodos virtuales. Polimorfismo y ligadura (dinámica y estática). Conversión de tipos. Compatibilidad de tipos. Redefinición de la copia e igualdad de objetos. Operadores. Clases abstractas. Curso 2010/2011 Programación Orientada a Objetos 61

62 Herencia La herencia en C++ es diferente a Java en varios aspectos: Herencia múltiple: una clase puede heredar de varias clases. Herencia privada: heredar de una clase sólo el código, pero no el tipo. Ligadura de métodos: los métodos pueden ser invocados por ligadura dinámica y estática. No existe el tipo Object raíz de la jerarquía de clases. Curso 2010/2011 Programación Orientada a Objetos 62

63 Clase Deposito class Deposito { private: Persona* titular; double capital; int plazodias; double tipointeres; public: Deposito( ); double liquidar(); double getintereses(); double getcapital(); int getplazodias(); double gettipointeres(); Persona* gettitular(); }; Curso 2010/2011 Programación Orientada a Objetos 63

64 Clase Deposito Estructurado class DepositoEstructurado : public Deposito { private: double tipointeresvariable; double capitalvariable; public: DepositoEstructurado(Persona titular,, double capitalvariable); double getinteresesvariable(); void settipointeresvariable(double interesvariable); double gettipointeresvariable(); double getcapitalvariable(); }; Curso 2010/2011 Programación Orientada a Objetos 64

65 Tipos de herencia Herencia pública (= Java): class B: public A La clase hereda los atributos y métodos de la clase padre. La visibilidad de las declaraciones heredadas puede aumentar y disminuir al declararlas en el fichero cabecera. Herencia privada: class B: private A Las declaraciones visibles para la clase hija cambian su visibilidad a privada. Se puede aumentar la visibilidad en el fichero cabecera. No se hereda el tipo: los objetos de la clase no pueden ser asignados a variables polimórficas cuyo tipo estático sea la clase padre. Curso 2010/2011 Programación Orientada a Objetos 65

66 Niveles de visibilidad Al igual que en Java, los niveles de visibilidad son incrementales public public todo el código protected protected clase + subclases private private clase Curso 2010/2011 Programación Orientada a Objetos 66

67 Herencia y constructores Los constructores no se heredan ( = Java ) El constructor de la clase hija tiene que invocar al de la clase padre. DepositoEstructurado::DepositoEstructurado(Persona titular, double capital, int plazodias, } double tipointeres, double tipointeresvariable, double capitalvariable): Deposito(titular, capital, plazodias, tipointeres) { this.tipointeresvariable = tipointeresvariable; this.capitalvariable = capitalvariable; Curso 2010/2011 Programación Orientada a Objetos 67

68 Redefinición de métodos Cualquier método que sea visible puede redefinirse en una subclase. Método virtual: método que al redefinirse en las subclases puede resolverse por ligadura dinámica (modificador virtual). Para redefinir un método (virtual o normal): Hay que declararlo en la subclase (fichero cabecera) con la misma signatura e implementarlo en el fichero de implementación. Para refinar un método en el que es necesario llamar a la versión del padre: NombreClase::NombreMetodo Ejemplo: Deposito::getCapital() Curso 2010/2011 Programación Orientada a Objetos 68

69 Redefinición de métodos class Deposito { private: Persona* titular; double capital; int plazodias; double tipointeres; public: Deposito( ); double liquidar(); virtual double getintereses(); virtual double getcapital(); int getplazodias(); double gettipointeres(); Persona* gettitular(); }; Curso 2010/2011 Programación Orientada a Objetos 69

70 Redefinición de métodos Métodos redefinidos en DepositoEstructurado: //Override double DepositoEstructurado::getIntereses() { return Deposito::getIntereses() + getinteresesvariable(); } //Override double DepositoEstructurado::getCapital() { return Deposito::getCapital() + getcapitalvariable(); } Llaman a las versiones de la clase Deposito. Curso 2010/2011 Programación Orientada a Objetos 70

71 Polimorfismo y ligadura El polimorfismo de asignación está permitido para entidades (variables) con semántica por valor y referencia. Para objetos por valor, se pierde información en la asignación. Ligadura dinámica: Sólo es posible para métodos virtuales. La entidad polimórfica debe ser de tipo referencia. Ligadura estática: Se aplica la versión del método asociada al tipo estático de la variable. Curso 2010/2011 Programación Orientada a Objetos 71

72 Polimorfismo y ligadura con semántica valor Deposito deposito( ); DepositoEstructurado de( ); //Asignación polimórfica entre objetos valor deposito = de; deposito.getcapital(); deposito tiene semántica valor se aplica ligadura estática Se ejecuta la versión de getcapital disponible en el tipo estático Deposito::getCapital Curso 2010/2011 Programación Orientada a Objetos 72

73 Polimorfismo y ligadura con semántica referencia Deposito* ptrdeposito = new Deposito( ); DepositoEstructurado* ptrde = new DepositoEstructurado( ); ptrdeposito = ptrde; ptrdeposito->getcapital(); // Ligadura dinámica ptrdeposito->liquidar(); // Ligadura estática ptrdeposito tiene semántica referencia se aplica ligadura estática o dinámica getcapital() método virtual ligadura dinámica Se ejecuta DepositoEstruturado::getCapital liquidar() no es virtual ligadura estática Se ejecuta Deposito::liquidar Es equivalente al método final de Java? Curso 2010/2011 Programación Orientada a Objetos 73

74 Conversión de tipos Operador dynamic_cast<tipo*>(ptro) Convierte el ptro en el puntero a Tipo ptro debe ser una entidad polimórfica (su clase debe tener algún método virtual) Al igual que en Java, el tipo de la conversión debe ser compatible. Si la conversión falla, devuelve el puntero NULL Curso 2010/2011 Programación Orientada a Objetos 74

75 Conversión de tipos Ejemplo: Establecer interés variable a depósitos estructurados. Deposito** depositos; depositos = new Deposito*[MAX_DEPOSITOS]; DepositoEstructurado* depest; for (int i =0; i < MAX_DEPOSITOS; i++){ depest = dynamic_cast<depositoestructurado*>(depositos[i]); if (depest!= NULL) depest->settipointeresvariable(0.05); } Curso 2010/2011 Programación Orientada a Objetos 75

76 Compatibilidad de tipos Ejemplo: Calcula el número de depósitos garantizados. int numgarantizados = 0; for (int i =0; i < MAX_DEPOSITOS; i++){ if (dynamic_cast<depositogarantizado*>(depositos[i])) ++numgarantizados; } Equivalente al instanceof de Java. Curso 2010/2011 Programación Orientada a Objetos 76

77 Copia e igualdad de objetos No existe una clase raíz como la clase Object de Java. No existen métodos como clone o equals. Los operadores de asignación y copia entre objetos con semántica referencia se comportan igual que en Java. No se debe cambiar la semántica. El operador de asignación entre objetos con semántica valor realiza una copia superficial. Cómo se puede definir una copia diferente? La igualdad entre objetos con semántica valor no está definida. Cómo se puede definir la igualdad entre objetos? SOLUCIÓN: Redefinir los operadores = e == Curso 2010/2011 Programación Orientada a Objetos 77

78 Operadores Gran parte de los operadores del lenguaje (=, ==,!=, <, <=, etc.) pueden ser definidos para su aplicación sobre objetos. Ejemplo: utilizar + para sumar matrices. Se definen utilizando como nombre de método operator seguido del operador. Ejemplos: operator= operator== operator<< Un operador puede definirse dentro o fuera de una clase. En algunos casos (por ejemplo, <<) deben ser externos. Curso 2010/2011 Programación Orientada a Objetos 78

79 Operador = en Cuenta Cuenta& Cuenta::operator=(const Cuenta& otracuenta){ if (this!= &otracuenta){ // son el mismo objeto? codigo = ++ultimocodigo; titular = otracuenta.titular; saldo = otracuenta.saldo; delete [] ultimasoperaciones; ultimasoperaciones = new double[cuenta::max_operaciones]; } return (*this); } Curso 2010/2011 Programación Orientada a Objetos 79

80 Operador == en Cuenta bool Cuenta::operator==(const Cuenta& otracuenta){ } return (codigo == otracuenta.codigo); bool Cuenta::operator!=(const Cuenta& otracta){ } return!(*this == otracta); Implementar!= a partir de == para evitar inconsistencias. Curso 2010/2011 Programación Orientada a Objetos 80

81 Operador externo << en Cuenta ostream& banco::operator<<(ostream& salida, const Cuenta& cuenta){ salida <<"Cuenta [codigo = "<<cuenta.getcodigo() <<", titular = "<<(cuenta.gettitular())->getnombre() <<", estado = "<<cuenta.getestado() <<", saldo = "<<cuenta.getsaldo() <<"]"<<endl; return salida; } ostream& banco::operator<<(ostream& salida, const Cuenta* cta){ salida<<(*cta); return salida; } Curso 2010/2011 Programación Orientada a Objetos 81

82 Operador externo << para el Enumerado ostream& banco::operator <<(ostream& salida, const EstadoCuenta& estado){ switch(estado){ case OPERATIVA: salida<<"operativa"; return salida; case INMOVILIZADA: salida<<"inmovilizada"; return salida; case NUM_ROJOS: salida<<"numeros ROJOS"; return salida; } return salida; } Curso 2010/2011 Programación Orientada a Objetos 82

83 Declaración de operadores namespace banco{ class Cuenta { public: bool operator==(const Cuenta& otracta); bool operator!=(const Cuenta& otracta); Cuenta& operator=(const Cuenta& otracta); }; //Externos ostream& operator<<(ostream& salida, const EstadoCuenta& estado); ostream& operator<<(ostream& salida, const Cuenta& cuenta); ostream& operator<<(ostream& salida, const Cuenta* cuenta); } Curso 2010/2011 Programación Orientada a Objetos 83

84 Clases abstractas En C++ una clase es abstracta si tiene algún método virtual puro : sin implementación. No existe una palabra clave para definir una clase abstracta. class ProductoFinanciero{ private: Persona* titular; public: ProductoFinanciero(Persona* titular); virtual double getbeneficio()=0; double getimpuestos(); Persona* gettitular(); }; Curso 2010/2011 Programación Orientada a Objetos 84

85 Interfaces C++ no define el concepto de interfaz de Java. No es necesario, ya que el lenguaje ofrece herencia múltiple. Si una clase quiere ser compatible con varias clases, basta con que herede públicamente de esas clases. El equivalente a las interfaces de Java sería una clase totalmente abstracta sólo con métodos virtuales puros. Curso 2010/2011 Programación Orientada a Objetos 85

86 Herencia múltiple En C++ es posible que una clase tenga más de una clase padre. Problemas: Colisión de nombres: la clase hija hereda dos métodos con la misma signatura. Herencia repetida: una clase se hereda dos veces, duplicando los atributos. Curso 2010/2011 Programación Orientada a Objetos 86

87 Herencia múltiple Caso de estudio Curso 2010/2011 Programación Orientada a Objetos 87

88 Herencia múltiple problemas La clase CuentaRemunerada hereda dos veces de la clase ProductoFinanciero. Por defecto, se duplican todos los atributos heredados. titular atributos Deposito titular atributos Cuenta at. CtaRemunerada Curso 2010/2011 Programación Orientada a Objetos 88

89 Herencia múltiple problemas El método gettitular() se hereda dos veces: colisión de nombres. Al aplicarlo sobre un objeto CuentaRemunerada existe ambigüedad. Se resuelve la ambigüedad calificando la versión que queremos aplicar: CuentaRemunerada* cr = new CuentaRemunerada( ); cr->cuenta::gettitular(); Curso 2010/2011 Programación Orientada a Objetos 89

90 Herencia repetida ambigüedad La asignación polimórfica a una referencia de tipo ProductoFinanciero es ambigua: ProductoFinanciero* pf; CuentaRemunerada* cr = new CuentaRemunerada( ); pf = cr; // Error Habría que indicar la ruta de herencia: ProductoFinanciero* pf; CuentaRemunerada* cr = new CuentaRemunerada( ); pf = (Cuenta*)cr; Curso 2010/2011 Programación Orientada a Objetos 90

91 Herencia repetida ambigüedad La aplicación del métodogetbeneficio() es ambigua si se aplica sobre una variable de tipo CuentaRemunerada: ProductoFinanciero* pf; CuentaRemunerada* cr = new CuentaRemunerada( ); pf = (Cuenta*)cr; pf->gettitular(); pf->getbeneficio(); // Versión clase Cuenta cr->getbeneficio(); // Error Curso 2010/2011 Programación Orientada a Objetos 91

92 Herencia virtual Parte de los problemas de ambigüedad de la herencia repetida pueden resolverse con herencia virtual. Evita que la clase ProductoFinanciero se herede dos veces en la clase CuentaRemunerada. Las clases Cuenta y Deposito aplican herencia virtual de ProductoFinanciero: La herencia virtual indica que si una subclase hereda de ProductoFinanciero por otra rama, los atributos y métodos de esa clase no deben repetirse. Curso 2010/2011 Programación Orientada a Objetos 92

93 Herencia virtual class ProductoFinanciero{ }; class Deposito: virtual public ProductoFinanciero { }; class Cuenta: virtual public ProductoFinanciero { }; class CuentaRemunerada: public Cuenta, public Deposito{ }; Curso 2010/2011 Programación Orientada a Objetos 93

94 Herencia virtual Constructores El constructor de la clase CuentaRemunerada tiene que llamar al constructor de ProductoFinanciero aunque no sea una clase de la que hereda directamente. CuentaRemunerada::CuentaRemunerada(Persona* p, double s, int plazodias,double tipointeres) : ProductoFinanciero(p), { } Cuenta(p,s), Deposito(p, s, plazodias, tipointeres) Curso 2010/2011 Programación Orientada a Objetos 94

95 Herencia múltiple Colisión de nombres El método getbeneficio() es definido por Cuenta y Deposito: colisión de implementaciones. Se evita al redefinir el método eligiendo una de las versiones: class CuentaRemunerada: public Cuenta, public Deposito{ public: CuentaRemunerada( ); double getbeneficio(); // Redefine el método }; double CuentaRemunerada::getBeneficio(){ return Deposito::getBeneficio(); // Elige Depósito } Curso 2010/2011 Programación Orientada a Objetos 95

96 Herencia múltiple Método dominante Si un método de la clase ProductoFinanciero se define o redefine sólo en una de las clases hijas, no existe ambigüedad. Se dice que la versión redefinida domina sobre la versión original. En el caso de una asignación polimórfica se ejecutará la versión dominante. Curso 2010/2011 Programación Orientada a Objetos 96

97 Genericidad en C++ La clases genéricas en C++ se conocen como templates. Ejemplo: Contenedor template <class T> class Contenedor{ private: T contenido; public: T getcontenido(); void setcontenido (T elem); }; Curso 2010/2011 Programación Orientada a Objetos 97

98 Genericidad Implementación La implementación de la clase genérica debe realizarse en el fichero de cabecera: template<class T> T Contenedor<T>::getContenido(){ } return contenido; template<class T> void Contenedor<T>::setContenido(T elem){ } contenido = elem; Curso 2010/2011 Programación Orientada a Objetos 98

99 Genericidad Uso Se indica el tipo de la clase genérica en su declaración. Puede ser aplicada a tipos primitivos. Persona* titular = new Persona("juan", " "); Cuenta* cuenta = new Cuenta(titular); Contenedor<Cuenta*> contenedor; contenedor.setcontenido(cuenta); Cuenta* cta = contenedor.getcontenido(); Contenedor<int> centero; centero.setcontenido(10); Curso 2010/2011 Programación Orientada a Objetos 99

100 Genericidad Críticas C++ no implementa un auténtico sistema de genericidad. Cuando se usa una clase genérica, se realiza un reemplazo del texto del parámetro en la declaración de la clase. Por tanto, se genera código para cada uno de los tipos a los que se instancie la clase genérica. Curso 2010/2011 Programación Orientada a Objetos 100

101 Genericidad restringida No se puede restringir la genericidad. Está permitido aplicar cualquier método y operador sobre las entidades del tipo genérico (tipo T en el ejemplo). Es problemático determinar la sintaxis de los mensajes, ya que se puede instanciar a tipos por valor o referencia. Si la operación no está disponible sobre el tipo genérico, el error será detectado en tiempo de compilación. Curso 2010/2011 Programación Orientada a Objetos 101

102 Colecciones en C++ Todas las entidades de la Librería Estándar C++ se han incluido en un único espacio de nombres denominado std. La librería estándar de plantillas, o STL (Standard Template Library), implementa un conjunto de estructuras de datos y algoritmos que conforman una parte sustancial de la Librería Estándar C++. Las estructuras de datos genéricas se denominan contenedores. Los contenedores son clases genéricas (template) pensadas para contener cualquier tipo de objeto. No existe un contenedor común raíz de la jerarquía. Curso 2010/2011 Programación Orientada a Objetos 102

103 Tipos de colecciones Existen dos tipos de contenedores: Secuencias: Almacenan los elementos en orden secuencial. Adecuadas para accesos directos y secuenciales. vector, list, deque (cola de doble terminación), stack Asociaciones: Almacenan pares de valores <clave, valor>. Podría verse como una array en el que el índice no tiene por qué ser un entero. Adecuados para accesos aleatorios mediante claves. map, set Curso 2010/2011 Programación Orientada a Objetos 103

104 Cuenta.h #include <list> using namespace std; class Cuenta { public: list<double>* getoperaciones() const; private: list<double>* operaciones; void anotaroperacion(double cantidad); }; Curso 2010/2011 Programación Orientada a Objetos 104

105 Cuenta.cpp Cuenta::Cuenta (Persona* persona, double saldoinicial){ operaciones = new list<double>(); } list<double>* Cuenta::getOperaciones() const{ return new list<double>(*operaciones); } void Cuenta::anotarOperacion(double cantidad){ operaciones->push_back(cantidad); } Curso 2010/2011 Programación Orientada a Objetos 105

106 Prueba de listas int main () { Cuenta* cuenta = new Cuenta(titular); cuenta->ingreso(100); cuenta->reintegro(300); cuenta->ingreso(1000); list<double>* movimientos; movimientos = cuenta->getoperaciones(); list<double>::const_iterator it; it = movimientos->begin(); for (; it!= movimientos->end() ;++it) cout << (*it) << endl; } exit(0); Curso 2010/2011 Programación Orientada a Objetos 106

107 Prueba de listas La implementación de las listas no ofrece métodos para accesos aleatorios porque serían ineficientes. Sólo dispone de métodos de acceso al principio y al final Se puede utilizar de forma efectiva como una pila Para recorrer las listas se utilizan iteradores. Curso 2010/2011 Programación Orientada a Objetos 107

108 Prueba con vectores int main () { Cuenta* cuenta = new Cuenta(titular); cuenta->ingreso(100); cuenta->ingreso(300); cuenta->reintegro(300); cuenta->ingreso(1000); vector<double>* movimientos; movimientos = cuenta->getoperaciones(); for (int i = 0; i < movimientos->size(); i++) cout << (*movimientos)[i] <<endl; } exit(0); Curso 2010/2011 Programación Orientada a Objetos 108

109 Prueba con vectores Los vectores se utilizan como arrays de tamaño fijo. Aunque tiene operaciones para aumentar el tamaño del vector se desaconseja su uso por ser ineficientes. Acceso fácil y eficiente a los elementos. size() no devuelve el número de elementos sino el tamaño del vector. Curso 2010/2011 Programación Orientada a Objetos 109

110 Estrategias Patrón estrategia: parametrizar una rutina con un algoritmo. C++ permite definir punteros a funciones. Un puntero a función es una variable que guarda la dirección de comienzo de una función. X (*fptr) (A); fptr es un puntero a función que recibe A como argumento y devuelve X Curso 2010/2011 Programación Orientada a Objetos 110

111 Estrategias Ejemplo: En la clase Banco, método de búsqueda de productos financieros. namespace banco{ class Banco { private: ProductoFinanciero** productos; public: Banco(); ProductoFinanciero* buscar( bool (*condicion) (ProductoFinanciero*)); }; //Condiciones de búsqueda bool depositoalto (ProductoFinanciero* producto); } Curso 2010/2011 Programación Orientada a Objetos 111

112 Estrategias El parámetro del método buscar() es una función que recibe como parámetro un puntero a un ProductoFinanciero y devuelve un valor booleano. La función depositoalto podría ser establecida como parámetro del método buscar() : cumple la definición del puntero a función. Curso 2010/2011 Programación Orientada a Objetos 112

113 Estrategias ProductoFinanciero* Banco::buscar( bool (*condicion)(productofinanciero*)){ bool encontrado = false; for (int i =0; i < MAX_PRODUCTOS; i++) if (condicion(productos[i])){ encontrado = true; return productos[i]; } if (!encontrado) return NULL; } Curso 2010/2011 Programación Orientada a Objetos 113

114 Estrategias // Comprueba si el producto es un depósito // y su saldo es mayor que bool banco::depositoalto(productofinanciero* producto){ } Deposito* deposito = dynamic_cast<deposito*>(producto); if (deposito!= NULL) return (deposito->getcapital() > 10000); else return false; Banco banco; ProductoFinanciero* producto = banco.buscar(depositoalto); Curso 2010/2011 Programación Orientada a Objetos 114

115 Estrategias Limitaciones Los punteros a funciones están limitados a: Funciones globales (funciones de C). Métodos de clase. No pueden apuntar a métodos de instancia Sin embargo, en la mayoría de casos el mecanismo de los punteros a función es suficiente. Si fuera necesario, se podría simular la solución de Java basada en interfaces. Curso 2010/2011 Programación Orientada a Objetos 115

116 Corrección y Robustez Este apartado trata: Asertos. Excepciones. Excepciones predefinidas. Definición de excepciones. Declaración de excepciones en métodos. Tratamiento de excepciones. Curso 2010/2011 Programación Orientada a Objetos 116

117 Asertos C++ permite el uso de asertos llamando a la macro assert() definida en <assert.h> assert() evalúa una expresión y llama a abort() si el resultado es cero (false). void Cuenta::ingreso(double cantidad){ assert(cantidad > 0); assert(estado == OPERATIVA); saldo = saldo + cantidad; } Curso 2010/2011 Programación Orientada a Objetos 117

118 Asertos Antes de abortar, assert escribe en la salida de error el nombre del archivo fuente y la línea donde se produjo el error. Si se define la macro NDEBUG, se desactiva la comprobación de todos los asertos. Curso 2010/2011 Programación Orientada a Objetos 118

119 Asertos Limitaciones Los asertos de C++ tienen los mismos problemas que en Java. No se recomienda evaluar las precondiciones con asertos, ya que se pueden desactivar. La verificación de código se realiza con pruebas unitarias: ejemplo, herramienta CPPUnit. Curso 2010/2011 Programación Orientada a Objetos 119

120 Excepciones Mecanismo para notificar que se ha producido una situación excepcional. A diferencia de Java, una excepción no tiene por qué ser un objeto de una clase: Se puede lanzar cualquier dato (un entero, una cadena de texto, ) No existen distintas categorías de excepciones. Curso 2010/2011 Programación Orientada a Objetos 120

121 Lanzamiento de excepciones Se utiliza la palabra reservada throw Aunque es posible notificar como error cualquier dato, se recomienda utilizar objetos. void Cuenta::ingreso(double cantidad) { if (cantidad < 0) throw invalid_argument( Cantidad negativa"); if (estado!= OPERATIVA) throw logic_error("estado incorrecto"); saldo = saldo + cantidad; } Curso 2010/2011 Programación Orientada a Objetos 121

122 Excepciones biblioteca estándar Existe un conjunto de excepciones predefinidas en el espacio de nombres std (<stdexcept.h>) Todas ellas heredan de la clase exception. No es obligatorio que las excepciones del programador hereden de alguna excepción predefinida. Curso 2010/2011 Programación Orientada a Objetos 122

123 Excepciones biblioteca estándar Curso 2010/2011 Programación Orientada a Objetos 123

124 Uso excepciones estándares Para el control de precondiciones se lanzan excepciones compatibles con logic_error void Cuenta::ingreso(double cantidad) { if (cantidad < 0) throw invalid_argument( Cantidad negativa"); if (estado!= OPERATIVA) throw logic_error("estado incorrecto"); saldo = saldo + cantidad; } Curso 2010/2011 Programación Orientada a Objetos 124

125 Excepciones de usuario Para notificar el fallo de una postcondición se recomienda crear una clase que herede de runtime_error: class RedNoDisponible: public runtime_error{ public: RedNoDisponible(const char* msg); }; RedNoDisponible::RedNoDisponible(const char* msg): runtime_error(msg) {} Las excepciones que heredan de exception disponen del método what() que retorna el mensaje de error. Curso 2010/2011 Programación Orientada a Objetos 125

126 Declaración de excepciones Se utiliza también la palabra reservada throw. Se puede especificar el conjunto de excepciones que puede lanzar un método void f(int a) throw (E1, E2); f puede lanzar excepciones de tipo E1 y E2, pero no otras Si no se dice nada, significa que podría lanzar cualquier excepción int f(); Se puede indicar que un método no lanzará ninguna excepción int f() throw(); Curso 2010/2011 Programación Orientada a Objetos 126

127 Declaración de excepciones A diferencia de Java, el compilador ignora la declaración de excepciones. Si en tiempo de ejecución se intenta lanzar una excepción no declarada, se detecta la violación y termina la ejecución. En cambio, el compilador controla la redefinición de un método para que no pueda lanzar más excepciones que las especificadas en el método de la clase padre. Curso 2010/2011 Programación Orientada a Objetos 127

128 Declaración de excepciones void Cuenta::ingreso(double cantidad) throw (invalid_argument, logic_error){ if (cantidad<0) throw invalid_argument("cantidad negativa"); if (estado!= OPERATIVA) throw logic_error("estado incorrecto"); saldo = saldo + cantidad; } Declaramos que el método ingreso() sólo puede lanzar los dos tipos de excepciones. Si en el cuerpo del método se produjese alguna otra excepción sería incompatible con la declaración. Curso 2010/2011 Programación Orientada a Objetos 128

129 Tratamiento de excepciones Al igual que en Java, las excepciones pueden ser tratadas en bloques try-catch. A diferencia de Java, el compilador no obliga a dar tratamiento a las excepciones. Las excepciones son pasadas al manejador (catch) por referencia. Cuando ocurre una excepción se evalúan los tipos definidos en los manejadores y se ejecuta el primero cuyo tipo sea compatible ( = Java). Se puede definir un manejador para cualquier tipo de excepción: catch( ) Es posible relanzar una misma excepción que se está manejando: throw; Curso 2010/2011 Programación Orientada a Objetos 129

130 Tratamiento de excepciones void Navegador::visualiza(string url) { Conexion* conexion; int intentos = 0; while (intentos < 20) { try { conexion = new Conexion(url); break; } catch (RedNoDisponible& e) { intentos++; if (intentos == 20) throw; //relanza } Si al crear la conexión ocurre la excepción RecursoNoEncontrado (no manejada) pasará al cliente. Curso 2010/2011 Programación Orientada a Objetos 130

131 Seminario de C++ Este tema se completa con el Seminario de C++ que incluye: La instalación del compilador C++ de GNU en Windows. Instalación del entorno de desarrollo Eclipse C++. Creación y ejecución de un proyecto. Curso 2010/2011 Programación Orientada a Objetos 131

Tema 6: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2013/2014

Tema 6: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2013/2014 Tema 6: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2013/2014 Contenido (1/3) Introducción. Definición de clases. Visibilidad y clases amigas. Espacios de nombres. Tipos

Más detalles

Tema 2: Clase y objetos en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 2: Clase y objetos en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 2: Clase y objetos en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Introducción Módulos en C++: Clases Estructuras (struct) Espacios de nombres (namespace) Semántica

Más detalles

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 4: Corrección y Robustez en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Asertos en C++ Mecanismo de excepciones: Declaración de excepciones Lanzar excepciones

Más detalles

Tema 5: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle

Tema 5: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle Tema 5: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle Contenido Introducción Clases y Objetos en C++: Módulos: Clases, estructuras y espacios

Más detalles

Tema 2: Clase y objetos en C# Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 2: Clase y objetos en C# Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 2: Clase y objetos en C# Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Introducción. Clases. Propiedades. Visibilidad. Espacios de nombres. Ensamblados. Tipos del lenguaje.

Más detalles

Tema 2: Clases y Objetos en Java. Programación Orientada a Objetos Curso 2010/2011

Tema 2: Clases y Objetos en Java. Programación Orientada a Objetos Curso 2010/2011 Tema 2: Clases y Objetos en Java Programación Orientada a Objetos Curso 2010/2011 Contenido Clases. Objetos. Tipos del lenguaje. Relación de clientela. Semántica referencia. Métodos y mensajes. Instancia

Más detalles

Tema 3 Herencia en Java Parte 1. Programación Orientada a Objetos Curso 2015/2016

Tema 3 Herencia en Java Parte 1. Programación Orientada a Objetos Curso 2015/2016 Tema 3 Herencia en Java Parte 1 Programación Orientada a Objetos Contenido Introducción. Definición y tipos. Constructores. Redefinición. Polimorfismo. Herencia y sistema de tipos. Ligadura dinámica. Casting

Más detalles

Tema 2: Clases y Objetos. Programación Orientada a Objetos Curso 2015/2016

Tema 2: Clases y Objetos. Programación Orientada a Objetos Curso 2015/2016 Tema 2: Clases y Objetos Programación Orientada a Objetos Curso 2015/2016 Contenido Clases. Objetos. Tipos del lenguaje. Relación de clientela. Semántica referencia. Métodos y mensajes. Instancia actual.

Más detalles

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016 Tema 3 Herencia en Java Parte 2 Programación Orientada a Objetos Contenido Restringir la herencia. Visibilidad protegida. Clases abstractas. Interfaces. Clase Object. Autoboxing. Copia de objetos. Igualdad

Más detalles

Tema 3: Herencia en C# Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 3: Herencia en C# Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 3: Herencia en C# Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Herencia. Polimorfismo y ligadura. Clase object. Casting. Compatibilidad de tipos. Clases abstractas.

Más detalles

Tema 2: Clases y Objetos. Programación Orientada a Objetos Curso 2017/2018

Tema 2: Clases y Objetos. Programación Orientada a Objetos Curso 2017/2018 Tema 2: Clases y Objetos Programación Orientada a Objetos Curso 2017/2018 Contenido Clases. Objetos. Tipos del lenguaje. Relación de clientela. Semántica referencia. Métodos y mensajes. Instancia actual.

Más detalles

Tema 3 Herencia. Primera parte. Herencia en Java Programación Orientada a Objetos Curso 2010/2011

Tema 3 Herencia. Primera parte. Herencia en Java Programación Orientada a Objetos Curso 2010/2011 Tema 3 Herencia Primera parte. Herencia en Java Programación Orientada a Objetos Contenido Introducción. Definición y tipos. Constructores. Redefinición. Restringir la herencia. Visibilidad protegida.

Más detalles

Examen Teórico. Convocatoria de Febrero de 2015

Examen Teórico. Convocatoria de Febrero de 2015 Examen Teórico Convocatoria de Febrero de 2015 Nombre: DNI: Grupo: 1. Contesta de forma razonada a las siguientes cuestiones relacionadas con los ficheros.jar: a) Para qué se utilizan los ficheros con

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 3

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 3 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 3 Contenidos: 1. Funciones y clases genéricas 2. Excepciones 3. Asertos 4. El puntero this 5. Redefinición

Más detalles

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Tipos de herencia Herencia y niveles de visibilidad Herencia y creación Redefinición de métodos Conversión

Más detalles

Examen Teórico Convocatoria de Junio de 2012

Examen Teórico Convocatoria de Junio de 2012 Examen Teórico Convocatoria de Junio de 2012 Nombre: DNI: Titulación: 1. Sobre el control de errores en Java: a) El siguiente método contiene un error de compilación debido al uso de excepciones. Explica

Más detalles

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016 Tema 3 Herencia en Java Parte 2 Programación Orientada a Objetos Contenido Restringir la herencia. Visibilidad protegida. Clases abstractas. Clase Object. Autoboxing. Igualdad de objetos. Copia de objetos.

Más detalles

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos Academia de computación de IE, ICA e ISISA Unidad didáctica Programación Orientada a Objetos Elaboración y diseño de cien reactivos de opción múltiple para la unidad didáctica programación orientada a

Más detalles

Programación Orientada a Objetos en C++

Programación Orientada a Objetos en C++ Unidad I Programación Orientada a Objetos en C++ Programación Orientada a Objetos en C++ Programación I - 0416202 Contenido Esta lección abarca los siguientes temas: Estructura y declaración de una clase

Más detalles

Tema 5 Corrección y Robustez Excepciones en Java

Tema 5 Corrección y Robustez Excepciones en Java Tema 5 Corrección y Robustez Excepciones en Java Parte II: Excepciones en Java Programación Orientada a Objetos Curso 2013/2014 Contenido Introducción Excepciones comprobadas Caso de estudio Tratamiento

Más detalles

Clases y Objetos en C++

Clases y Objetos en C++ Informática II Clases y Objetos en C++ Introducción Las variables de los tipos fundamentales de datos no son suficientes para modelar adecuadamente objetos del mundo real. alto, ancho y longitud para representar

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Contenidos: 1. Definición de clases 2. Implementación de los métodos 3. Constructores y destructores 4. Objetos

Más detalles

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia Programación orientada a objetos Resumen de Temas Unidad 5: Herencia 5.1 Introducción a la Herencia La herencia es el mecanismo fundamental de relación entre clases en la orientación a objetos. Relaciona

Más detalles

El lenguaje C++ A partir del lenguaje C Entorno de programación Visual C++

El lenguaje C++ A partir del lenguaje C Entorno de programación Visual C++ El lenguaje C++ A partir del lenguaje C Entorno de programación Visual C++ Nuevas palabras reservadas asm inline public virtual catch new template class operator this delete private throw friend protected

Más detalles

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011 Tema 6 Patrones de Diseño Programación Orientada a Objetos Curso 2010/2011 Contenido Introducción a los patrones de diseño. Patrón del Método plantilla. Patrón Composición. Patrón Estrategia. Clases anónimas

Más detalles

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS UNIVERSIDAD DE MÁLAGA Dpto. Lenguajes y CC. Computación E.T.S.I. Telecomunicación INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tema 4 Programación II Programación II 0 Tema 4: INTRODUCCIÓN A LA PROGRAMACIÓN

Más detalles

Introducción a C++ Índice

Introducción a C++ Índice Introducción a C++ 1. 2. 3. 4. 5. 6. Índice 1. Diferencias entre C y C++. 2. Diferencias entre C++ y Java. 3. Ejemplos. 4. Funciones. 5. Memoria dinámica 6. Librería de funciones. 1 1. Diferencias entre

Más detalles

Contenido. Prefacio Orígenes de la programación orientada a objetos... 1

Contenido. Prefacio Orígenes de la programación orientada a objetos... 1 Prefacio... xv 1. Orígenes de la programación orientada a objetos... 1 1.1 La crisis del software... 1 1.2 Evolución del software... 3 1.3 Introducción a la programación orientada a procedimientos... 4

Más detalles

Introducción a la Programación orientada a objetos con C++

Introducción a la Programación orientada a objetos con C++ Introducción a la Programación orientada a objetos con C++ Informática Industrial Ing. en automática y electrónica Industrial Isidro Calvo Informática Industrial 2006/07 2 Objetivos principales Exponer

Más detalles

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +. APUNTES DE JAVA Agenda Bienvenida Conociendo Java La Maquina Virtual Descargar e instalar el compilador El entorno de trabajo El paradigma de la programación orientada a objetos Qué es Java? Un lenguaje

Más detalles

Programación Orientada a Objetos Curso 2010/2011

Programación Orientada a Objetos Curso 2010/2011 Programación Orientada a Objetos Curso 2010/2011 Ejercicios sobre C++, C# y comparativa LPOO Ejercicios C++ 1. Dado el siguiente código C++: void met() throw (runtime_error) { throw runtime_error( operación

Más detalles

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; } PROGRAMACIÓN EN JAVA { una línea para definir, crear o ejecutar ; } JFC Y API SPECIFICATIONS OBJECT INTERFACE ABSTRACT IMPLEMENTS EXTENDS NEW EXTENDS (Hasta que una clase derivada deje de ser ABSTRACT)

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1 Contenidos: 1. Características generales de C++ 2. Entrada/salida estándar 3. Variables y tipos de datos

Más detalles

Manejo de Clases y Objetos. Manejo de Clases y Objetos

Manejo de Clases y Objetos. Manejo de Clases y Objetos Cod. 1728.61 PLATAFORMA.NET Y SERVICIOS WEB nestor@lsi lsi.uniovi.es Dpto. de Informática - Laboratorio de Tecnologías de Orientación a Objetos http://www www.ootlab.uniovi.es CONCEPTOS BÁSICOS Objeto:

Más detalles

Programación orientada a objetos I

Programación orientada a objetos I Introducción Programación orientada a objetos I Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es Qué es la POO? Un paradigma de programación Un paradigma es una forma de afrontar

Más detalles

Tema 4 Corrección y Robustez. Programación Orientada a Objetos Curso 2010/2011

Tema 4 Corrección y Robustez. Programación Orientada a Objetos Curso 2010/2011 Tema 4 Corrección y Robustez Programación Orientada a Objetos Curso 2010/2011 Contenido Especificación formal. Asertos. Pruebas unitarias. Excepciones. Diseño por contrato. Curso 2010/2011 Programación

Más detalles

Tema 2: Programación basada en Objetos

Tema 2: Programación basada en Objetos Tema 2: Programación basada en Objetos Programación Orientada a Objetos Marcos López Sanz Máster en Informática Gráfica, Juegos y Realidad Virtual Índice Objetivos Introducción Vista Pública Clases Objetos

Más detalles

Herencia. Implementación en Java

Herencia. Implementación en Java Herencia Implementación en Java Herencia Concepto de Herencia Es el mecanismo que permite definir nuevas clases partiendo de otras ya existentes. Las clases que derivan de otras heredan automáticamente

Más detalles

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente. HERENCIA (2ª parte) Lenguajes de Programación - Orientación a Objetos: Herencia 2ª parte 1 Object En Java todas las clases derivan de otra, aunque no se diga explícitamente. Object: Es el nombre de la

Más detalles

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos Construyendo clases nuevas La forma más simple de una clase en Java es: Class Nombre_de_la_Clase { } /* constructores */ /* métodos

Más detalles

Temas. Taller III 2007 Gentile,Vazquez

Temas. Taller III 2007 Gentile,Vazquez Temas Arreglos de Objetos Punteros de Objetos Arreglos de Punteros de Objetos Constructor de Copia Herencia Constructores y Destructores en Herencia Accesibilidad en Herencia 1 Arreglo de objetos Televisor

Más detalles

Tipos Recursivos de Datos

Tipos Recursivos de Datos 1/1 Tipos Recursivos de Datos Josefina Sierra Santibáñez 27 de noviembre de 2016 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones),

Más detalles

PROGRAMACION ORIENTADA A OBJETOS EN C++

PROGRAMACION ORIENTADA A OBJETOS EN C++ PROGRAMACION ORIENTADA A OBJETOS EN C++ 1- INTRODUCCIÓN El lenguaje C++ representa el resultado de los esfuerzos realizados para proporcionar las ventajas de la programación Orientada a Objetos a un lenguaje

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión VIII Composición... 4 Herencia... 8 Herencia e Inicialización... 11 Constructor de Superclase...

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo rcoppo@uns.edu.ar Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación: Examen de Java Nombre: DNI: Titulación: 1. Cómo podemos compilar desde la línea de comandos la clase Java A que utiliza una librería empaquetada bd.jar? 2. Indica si es correcto el siguiente código. Justifica

Más detalles

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores. Unidad IV Métodos. 4.1 Definición de un método. El polimorfismo, en programación orientada a objetos, se refiere a la posibilidad de acceder a un variado rango de funciones distintas a través del mismo

Más detalles

APUNTES PROII 2º PARCIAL.

APUNTES PROII 2º PARCIAL. APUNTES PROII 2º PARCIAL. MEMORIA DINÁMICA. Hay que distinguir entre: Estática: memoria que se reserva en tiempo de compilación. Dinámica: memoria que se reserva en tiempo de ejecución. 5 pasos: 1. Declaración

Más detalles

Construcciones del Lenguaje Java

Construcciones del Lenguaje Java Construcciones del Lenguaje Java Autor: Juan Alberto López Cavallotti Versión de Java: 5 / 6 Comentarios Comentario de Línea Comentario Multilínea //Esto es un comentario. /* Esto comenta varias lineas.

Más detalles

3. LA HERENCIA. Necesidad de la herencia

3. LA HERENCIA. Necesidad de la herencia página 1 3. LA HERENCIA Necesidad de la herencia La mente humana clasifica los conceptos de acuerdo a dos dimensiones: pertenencia y variedad. Se puede decir que el Ford Fiesta es un tipo de coche (variedad

Más detalles

Programación orientada a objetos II

Programación orientada a objetos II Repaso de conceptos Programación orientada a objetos II Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es! Clase! Objeto! Atributos! Métodos! Cambio de enfoque! Constructor! Creación

Más detalles

PROGRAMACIÓN EN JAVA

PROGRAMACIÓN EN JAVA 1. INTRODUCCIÓN A LA PROGRAMACIÓN 1.1. Datos, algoritmos y programas 1.1.1. Definición de algoritmo 1.1.2. Datos 1.1.3. Características de un programa 1.2. Paradigmas de programación 1.2.1. Programación

Más detalles

Tema 1. Herencia y Polimorfismo

Tema 1. Herencia y Polimorfismo ÍNDICE EDA. Unidad didáctica I: Conceptos de Java para Estructuras de Datos Tema 1. Herencia y Polimorfismo 1. Relaciones entre clases: Reutilización del software. 2. La Herencia como soporte Java del

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación: Examen de Java Nombre: DNI: Titulación: 1. Sea una aplicación Java donde todas las clases están compiladas y empaquetas en un solo fichero JAR (programa.jar). Qué sería necesario para conseguir ejecutar

Más detalles

Instituto Tecnológico de Celaya

Instituto Tecnológico de Celaya ELEMENTOS BÁSICOS DE C++: DECLARACIÓN DE VARIABLES A través de operaciones aritméticas (suma, resta, etc.) y lógicas (por ejemplo, comparaciones) los programas manipulan datos tales como números y caracteres.

Más detalles

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo. Programación II. Guía No. 10 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Funciones Virtuales y Polimorfismo. Objetivos Comprender que es ligadura e identificar sus tipos.

Más detalles

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo. Programación II. Guía 10 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Funciones Virtuales y Polimorfismo. Objetivos Específicos Comprender que es ligadura e identificar

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión IX Composición... 4 Herencia... 8 Herencia e Inicialización... 12 Constructor de Superclase...

Más detalles

INTRODUCCIÓN A LA POO EN C++

INTRODUCCIÓN A LA POO EN C++ INTRODUCCIÓN A LA POO EN C++ ÍNDICE DEL TEMA 1.- Introducción 2.- Diferencias C/C++ 3.- Programación orientada a objetos 4.- Aspectos avanzados C++ 1 1. Introducción Lenguaje C Lenguaje de propósito general

Más detalles

Plantillas (Templates) Agustín J. González ELO-329

Plantillas (Templates) Agustín J. González ELO-329 Plantillas (Templates) Agustín J. González ELO-329 Definición Una plantilla (template) es un patrón para crear funciones o clases usando tipos de datos como parámetros. Hay dos tipos de templates: Funciones

Más detalles

Introducción al lenguaje C

Introducción al lenguaje C Introducción al lenguaje C Programación 2 Instituto de Computación, Facultad de Ingeniería, Universidad de la República, Uruguay 2 de marzo de 2016 Programación 2 Introducción al lenguaje C 2 de marzo

Más detalles

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Unidad V. Ya veremos qué poner en algunas_palabras y algo_más, por ahora sigamos un poco más. Implementación Orientada a Objetos. Unidad V 5.1 Estructura de una clase. Una clase consiste en: algunas_palabras class nombre_de_la_clase [algo_más] { [lista_de_atributos] [lista_de_métodos] Lo que está

Más detalles

Clases, Objetos y Métodos (II)

Clases, Objetos y Métodos (II) Clases, Objetos y Métodos (II) Pablo San Segundo (C-206) pablo.sansegundo@upm.es Índice Introducción al concepto de clase Elementos de una clase Implementación: declaración y definición Permisos y encapsulamiento

Más detalles

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1 Prologo Agradecimientos Nota de los autores Índice general I III V VII 1 Problemas, algoritmos y programas 1 1.1 Programas y la actividad de la programación.................... 4 1.2 Lenguajes y modelos

Más detalles

12. Tipos de atributos

12. Tipos de atributos Programación orientada a objetos con Java 135 12. Tipos de atributos Objetivos: a) Profundizar en el concepto de atributo de una clase e indicar los tipos de atributos en Java b) Interpretar el código

Más detalles

ALGORITMOS Y ESTRUCTURAS DE DATOS

ALGORITMOS Y ESTRUCTURAS DE DATOS http://webs.um.es/frgarcia/teaching.htm ALGORITMOS Y ESTRUCTURAS DE DATOS PRÁCTICA. TEMAS 2 Y 3 SEMINARIO DE C++ SESIÓN 3 Francisco García Sánchez frgarcia@um.es Despacho 2.31 INDICE DE CONTENIDOS Introducción

Más detalles

Tipos de Datos Recursivos

Tipos de Datos Recursivos 1/1 Tipos de Datos Recursivos Josefina Sierra Santibáñez 15 de mayo de 2018 2/1 Introducción La recursividad no sólo se puede aplicar a la definición de procedimientos (i.e. funciones o acciones), sino

Más detalles

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++ Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++ OBJETIVO En este documento se presentan las construcciones básicas de orientación a objetos del lenguaje de programación C++, y recomendaciones

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra l.guerra@upm.es Curso INEM. Programación en Java Marzo 2011 Índice Previo Repaso y encapsulación Empaquetado Relaciones entre clases Herencia

Más detalles

Corrección y Robustez (2ª parte)

Corrección y Robustez (2ª parte) Programación Orientada a Objetos TEMA 4 Corrección y Robustez (2ª parte) Facultad de Informática Universidad de Murcia Contenido 1. Introducción 2. Comparativa de asertos 3. Comparativa de mecanismo de

Más detalles

2. Tratamiento de objetos con JAVA

2. Tratamiento de objetos con JAVA 2. Tratamiento de objetos con JAVA David Contreras Bárcena (ETSI) - Comillas 71 2.1 Ciclo de Vida de los Objetos Los objetos tienen un tiempo de vida y consumen recursos durante el mismo. Cuando un objeto

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM. Programación en Java Diciembre 2010 Índice 1 Introducción 2 Comportamiento y estado 3 POO en Java 4 Relaciones 5 Herencia

Más detalles

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Práctica 2 Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Más detalles

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA

IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA IMPLEMENTACIÓN DE CONCEPTOS P.O.O. EN JAVA Implementación de conceptos P.O.O. en Java Temario 2. Conceptos de Programación Orientada a Objetos 1. Conceptos de P.O.O. 2. Implementación de conceptos P.O.O

Más detalles

Programación Orientada o Objetos

Programación Orientada o Objetos Programación Orientada o Objetos Programación digital II Escuela de Sistemas Facultad de Ingeniería Profesor: Gilberto Diaz Programación Orientada a Objetos En 1970 Dennis Ritchie y Brian Kernigan crearon

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005 24 Noviembre 2005 disponibles de acceso public private protected de tipo static abstract final modificadores más avanzados que no vamos a ver... Clase Sintaxis modificadores class nombreclase{} Tipos primitivos

Más detalles

Guía del Curso IFCD052PO PROGRAMACIÓN EN JAVA

Guía del Curso IFCD052PO PROGRAMACIÓN EN JAVA Guía del Curso IFCD052PO PROGRAMACIÓN EN JAVA Modalidad de realización del curso: Titulación: Online Diploma acreditativo con las horas del curso OBJETIVOS CONTENIDOS UNIDAD DIDÁCTICA 1. INTRODUCCIÓN A

Más detalles

Examen Teórico. Convocatoria de Febrero de 2018

Examen Teórico. Convocatoria de Febrero de 2018 Examen Teórico Convocatoria de Febrero de 2018 Nombre: DNI: Grupo: 1. Dado un proyecto Java en Eclipse que tiene como clase principal proyecto.programa y requiere de la librería matemática de Apache commons-math.jar,

Más detalles

Examen Teórico. Convocatoria de Febrero de 2016

Examen Teórico. Convocatoria de Febrero de 2016 Examen Teórico Convocatoria de Febrero de 2016 Nombre: DNI: Grupo: 1. Responde a las siguientes cuestiones: a) Un programador Java empaqueta el código de un proyecto en el fichero videojuego.jar cuya clase

Más detalles

16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz

16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz 168 A. García-Beltrán y J.M. Arranz 16. Herencia Objetivos: a) Definir el concepto de herencia entre clases b) Interpretar el código fuente de una aplicación Java donde aparecen clases relacionadas mediante

Más detalles

Reutilización con Delegación y Herencia

Reutilización con Delegación y Herencia Reutilización con Delegación y Herencia Carlos Fontela cfontela@fi.uba.ar Temario Delegación Herencia UML: clases, paquetes, secuencias Cuándo usar herencia y cuándo delegación Redefinición Clases abstractas

Más detalles

Tema: Plantillas en C++.

Tema: Plantillas en C++. Programación II. Guía 11 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Plantillas en C++. Objetivos Específicos Conocer los tipos de plantillas Utilizar las plantillas de

Más detalles

Parte I: Programación en un lenguaje orientado a objetos

Parte I: Programación en un lenguaje orientado a objetos Parte I: Programación en un lenguaje orientado a objetos 1. Introducción a los lenguajes de programación 2. Datos y expresiones 3. Estructuras algorítmicas 4. Datos compuestos 5. Modularidad 6. Tratamiento

Más detalles

Estructura de Datos Unidad 1: Repaso del Lenguaje Java

Estructura de Datos Unidad 1: Repaso del Lenguaje Java Estructura de Datos Unidad 1: Repaso del Lenguaje Java Introducción Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystems a principios de 1991, con el que se van a

Más detalles

3.4 Clases y Objetos 05/04/2004. Conceptos Generales. Modificadores de la Clase. Estructura de una Clase. Variables Miembros

3.4 Clases y Objetos 05/04/2004. Conceptos Generales. Modificadores de la Clase. Estructura de una Clase. Variables Miembros Conceptos Generales 3.4 Clases y Objetos Clases, miembros, constructores, control de acceso Las clases contienen los métodos que definen la computación Los campos (fields) o variables miembros definen

Más detalles

Introducción a Java. Introducción a Java. Programación I

Introducción a Java. Introducción a Java. Programación I Introducción a Java Introducción a Java Programación I Como Funciona Tipos de Datos TIPO TAMAÑO RANGO byte 8 bits Valores numéricos de 128 a 127 short 16 bits Valores numéricos de 32.768 a 32.767 int 32

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...

Más detalles

OOP y C++ Indice. 0.1 Análisis orientado a objetos(1/4) Análisis orientado a objetos(2/4) 0.- OOP 1.- INTRODUCCIÓN.

OOP y C++ Indice. 0.1 Análisis orientado a objetos(1/4) Análisis orientado a objetos(2/4) 0.- OOP 1.- INTRODUCCIÓN. OOP y C++ Un lenguaje para Programadores Carlos PLATERO Indice 0.- OOP 1.-. Objetivos, palabras clave, reglas prácticas, consejos 2.- CLASES Y OBJETOS. Extensión del concepto de estructura en C 3.- HERENCIA.

Más detalles

Herencia y polimorfismo

Herencia y polimorfismo Herencia y polimorfismo Programación Orientada a Objeto Ing. Civil en Telecomunicaciones Herencia Hemos visto cómo crear nuestras propias clases Clase InfoAlumno para calcular las notas Supongamos ahora

Más detalles

Lenguaje de Programación Orientado a Objetos

Lenguaje de Programación Orientado a Objetos Lenguaje de Programación Orientado a Objetos 3.1 Tipos de datos primitivos 3.2 Declaración de clases y subclases 3.3 Declaración de herencia e interfaces 3.4 Relaciones entre clases 3.5 Clases y métodos

Más detalles

Herencia y Polimorfismo en C++

Herencia y Polimorfismo en C++ Herencia y Polimorfismo en C++ Informática II Fundamentos de Programación 1 Herencia Concepto de "herencia" herencia": Una clase -clase derivada- puede definirse a partir de otra clase ya existente (clase

Más detalles

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes Introducción Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Qué es la POO?! Un paradigma de programación! Un paradigma es una forma de afrontar

Más detalles

UAA-DSE Programación 2 / C++ Eduardo Serna-Pérez

UAA-DSE Programación 2 / C++ Eduardo Serna-Pérez 6 Herencia y Polimorfismo La Herencia y el Polimorfismo son dos de los principales mecanismos de programación que caracterizan a la programación orientada a objetos. La herencia sustenta su mecanismo en

Más detalles

Programación Tema 4: Métodos. Programación DIT-UPM

Programación Tema 4: Métodos. Programación DIT-UPM Programación Tema 4: Métodos 1 Contenidos! 1. El concepto de método! 2. Definición: cabecera! 3. Definición: cuerpo! 4. Uso de métodos! 5. Métodos útiles 2 Métodos! Un método es un bloque de código con

Más detalles