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

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

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

Transcripción

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

2 Contenido (1/3) Introducción. 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. Operadores. Redefinición. Instancia actual. Métodos y mensajes. Paso de parámetros. Función main. Curso 2013/2014 Programación Orientada a Objetos 2

3 Contenido (2/3) Herencia en C++ 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. Clases abstractas. Herencia múltiple. Curso 2013/2014 Programación Orientada a Objetos 3

4 Contenido (3/3) Genericidad en C++ Templates Corrección y Robustez en C++ Excepciones Asertos Curso 2013/2014 Programación Orientada a Objetos 4

5 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 2013/2014 Programación Orientada a Objetos 5

6 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 2013/2014 Programación Orientada a Objetos 6

7 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 2013/2014 Programación Orientada a Objetos 7

8 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 2013/2014 Programación Orientada a Objetos 8

9 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 2013/2014 Programación Orientada a Objetos 9

10 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 2013/2014 Programación Orientada a Objetos 10

11 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 2013/2014 Programación Orientada a Objetos 11

12 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 2013/2014 Programación Orientada a Objetos 12

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

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

15 Modificador const en los atributos const Persona* const titular; codigo titular saldo ultimasoperaciones Pepito Curso 2013/2014 Programación Orientada a Objetos 15

16 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 2013/2014 Programación Orientada a Objetos 16

17 Clases amigas class NodoArbol { friend class Arbol; private: int valor; NodoArbol decha; NodoArbol izda; }; class Arbol{ private: NodoArbol *raiz;... raiz->valor = 50;... }; Curso 2013/2014 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 con el sistema de ficheros. No proporcionan privilegio de visibilidad. Curso 2013/2014 Programación Orientada a Objetos 18

19 Espacios de nombres Para utilizar un elemento definido en un espacio de nombres (opciones): 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 2013/2014 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 2013/2014 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 2013/2014 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 2013/2014 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 2013/2014 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 2013/2014 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 2013/2014 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 2013/2014 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 2013/2014 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; Inicialización en línea Cuenta::Cuenta (Persona *persona) :titular(persona) { } Curso 2013/2014 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 2013/2014 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); } Invoca método privado void Cuenta::inicializa(double saldoinicial) { codigo = ++ultimocodigo; saldo = saldoinicial; ultimasoperaciones = new double[cuenta::max_operaciones]; estado = OPERATIVA; } Curso 2013/2014 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 2013/2014 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 válidas utilizando el constructor anterior: 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 2013/2014 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 2013/2014 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 2013/2014 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 2013/2014 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 2013/2014 Programación Orientada a Objetos 36

37 Arrays y semántica de objetos Array Semántica valor Semántica valor Semántica referencia Semántica referencia Contenido del array Semántica valor Semántica referencia Semántica valor Semántica referencia Declaración/Creación del array Posicion tabla[3]; Posicion* tabla[3]; Posicion* tabla; tabla = new Posicion[3]; Posicion** tabla; tabla = new Posicion*[3]; Curso 2013/2014 Programación Orientada a Objetos 37

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

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

40 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 2013/2014 Programación Orientada a Objetos 40

41 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 2013/2014 Programación Orientada a Objetos 41

42 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) Curso 2013/2014 Programación Orientada a Objetos 42

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

44 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 2013/2014 Programación Orientada a Objetos 44

45 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, por defecto, 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 2013/2014 Programación Orientada a Objetos 45

46 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 2013/2014 Programación Orientada a Objetos 46

47 Constructor de copia Si está definido, se utiliza en la inicialización de un objeto con semántica valor: Cuenta cuenta2 = cuenta1; También se aplica en el paso de parámetros (se estudia más adelante). Ejemplo: Cuenta::Cuenta(const Cuenta& orig): titular(orig.titular){ } this->saldo = orig.saldo; Curso 2013/2014 Programación Orientada a Objetos 47

48 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 2013/2014 Programación Orientada a Objetos 48

49 Redefinir copia e igualdad de objetos 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 = y == Para objetos con semántica valor Curso 2013/2014 Programación Orientada a Objetos 49

50 Operadores Gran parte de los operadores del lenguaje (=, ==,!=, <, <=, etc.) pueden ser redefinidos 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 2013/2014 Programación Orientada a Objetos 50

51 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 2013/2014 Programación Orientada a Objetos 51

52 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 2013/2014 Programación Orientada a Objetos 52

53 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 2013/2014 Programación Orientada a Objetos 53

54 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 2013/2014 Programación Orientada a Objetos 54

55 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 2013/2014 Programación Orientada a Objetos 55

56 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 2013/2014 Programación Orientada a Objetos 56

57 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 2013/2014 Programación Orientada a Objetos 57

58 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 2013/2014 Programación Orientada a Objetos 58

59 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 2013/2014 Programación Orientada a Objetos 59

60 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 2013/2014 Programación Orientada a Objetos 60

61 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. En el paso de parámetros se utiliza el constructor de copia si está definido. Si no, se realiza copia superficial. Curso 2013/2014 Programación Orientada a Objetos 61

62 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 2013/2014 Programación Orientada a Objetos 62

63 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 2013/2014 Programación Orientada a Objetos 63

64 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. Curso 2013/2014 Programación Orientada a Objetos 64

65 Parámetros const void transferencia(cuenta* emisor, const Cuenta& receptor, double cantidad); Se protege el estado del objeto cuenta receptor. Opción recomendable cuando se quiere pasar un objeto con semántica valor y se quiere proteger la variable pasada por referencia. Curso 2013/2014 Programación Orientada a Objetos 65

66 Paso de parámetros - recomendaciones Paso de un objeto con semántica referencia (puntero): Cuenta* receptor: interesa cuando queremos que el método modifique el estado del objeto. const Cuenta* receptor: cuando el método SÓLO consulta el estado del objeto. Paso de un objeto con semántica valor: Cuenta receptor: queremos proporcionar una copia del objeto al método. const Cuenta& receptor: alternativa eficiente, que evita la copia y protege el estado. En general, se utiliza el paso por referencia (&) cuando queremos que el método modifique la variable empleada en la llamada. Curso 2013/2014 Programación Orientada a Objetos 66

67 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 los argumentos del programa. Ejemplos: int main(int argc, char** argv) int main() Curso 2013/2014 Programación Orientada a Objetos 67

68 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 2013/2014 Programación Orientada a Objetos 68

69 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 2013/2014 Programación Orientada a Objetos 69

70 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 2013/2014 Programación Orientada a Objetos 70

71 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 2013/2014 Programación Orientada a Objetos 71

72 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 2013/2014 Programación Orientada a Objetos 72

73 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 2013/2014 Programación Orientada a Objetos 73

74 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. No existe palabra clave super para llamar a la versión del padre, hay que especificar el nombre de la clase NombreClase::NombreMetodo Ejemplo: Deposito::getCapital() Curso 2013/2014 Programación Orientada a Objetos 74

75 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 2013/2014 Programación Orientada a Objetos 75

76 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 2013/2014 Programación Orientada a Objetos 76

77 Polimorfismo y ligadura El polimorfismo está permitido para entidades (variables) con semántica valor y referencia. Para objetos con semántica valor, puede haber pérdida de informació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 2013/2014 Programación Orientada a Objetos 77

78 Polimorfismo y ligadura con semántica valor Deposito deposito( ); DepositoEstructurado de( ); // Asignación polimórfica entre objetos valor // Se pierde información! 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 2013/2014 Programación Orientada a Objetos 78

79 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 Curso 2013/2014 Programación Orientada a Objetos 79

80 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 2013/2014 Programación Orientada a Objetos 80

81 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 2013/2014 Programación Orientada a Objetos 81

82 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 2013/2014 Programación Orientada a Objetos 82

83 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 2013/2014 Programación Orientada a Objetos 83

84 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 2013/2014 Programación Orientada a Objetos 84

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

86 Herencia múltiple Caso de estudio Curso 2013/2014 Programación Orientada a Objetos 86

87 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 Problemas herencia repetida at. CtaRemunerada Curso 2013/2014 Programación Orientada a Objetos 87

88 Herencia repetida problemas Problema: el método gettitular() se hereda dos veces (colisión de nombres). Al aplicarlo sobre un objeto CuentaRemunerada existe ambigüedad. Solución: se resuelve la ambigüedad calificando la versión que queremos aplicar: CuentaRemunerada* cr = new CuentaRemunerada( ); cr->cuenta::gettitular(); Curso 2013/2014 Programación Orientada a Objetos 88

89 Herencia repetida ambigüedad Problema: la asignación polimórfica a una referencia de tipo ProductoFinanciero es ambigua ProductoFinanciero* pf; CuentaRemunerada* cr = new CuentaRemunerada( ); pf = cr; // Error Solución: habría que indicar la ruta de herencia ProductoFinanciero* pf; CuentaRemunerada* cr = new CuentaRemunerada( ); pf = (Cuenta*)cr; Curso 2013/2014 Programación Orientada a Objetos 89

90 Herencia virtual La herencia virtual es una solución a los problemas la herencia repetida: Es útil en las jerarquías tipo rombo, como el caso de estudio. Una clase que aplica herencia virtual de su clase padre evita la repetición de atributos y código en las clases descendientes. La herencia virtual no es transparente para las clases descendientes: Deben llamar explícitamente al constructor de la clase sobre la que se ha aplicado herencia virtual. Curso 2013/2014 Programación Orientada a Objetos 90

91 Herencia virtual class ProductoFinanciero{ }; class Deposito: virtual public ProductoFinanciero { }; class Cuenta: virtual public ProductoFinanciero { }; class CuentaRemunerada: public Cuenta, public Deposito{ }; Curso 2013/2014 Programación Orientada a Objetos 91

92 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 2013/2014 Programación Orientada a Objetos 92

93 Herencia múltiple Colisión de nombres Problema: la aplicación del métodogetbeneficio() es ambigua si se aplica sobre una variable de tipo CuentaRemunerada Se heredan dos implementaciones (Cuenta y Deposito) CuentaRemunerada* cr = new CuentaRemunerada( ); cr->getbeneficio(); // Error Curso 2013/2014 Programación Orientada a Objetos 93

94 Herencia múltiple Colisión de nombres Solución: se evita al redefinir el método eligiendo una de las versiones ( fusiona implementaciones ) class CuentaRemunerada: public Cuenta, public Deposito{ public: CuentaRemunerada( ); double getbeneficio(); // Redefine el método }; double CuentaRemunerada::getBeneficio(){ return Deposito::getBeneficio(); // Elige Depósito } Curso 2013/2014 Programación Orientada a Objetos 94

95 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 2013/2014 Programación Orientada a Objetos 95

96 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 2013/2014 Programación Orientada a Objetos 96

97 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 2013/2014 Programación Orientada a Objetos 97

98 Genericidad Uso Se indica el tipo de la clase genérica en la declaración y construcció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 2013/2014 Programación Orientada a Objetos 98

99 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 2013/2014 Programación Orientada a Objetos 99

100 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 2013/2014 Programación Orientada a Objetos 100

101 Corrección y robustez en C++ Al igual que Java, C++ ofrece excepciones y asertos para garantizar la corrección y robustez del código. C++ es diferente a Java en varios aspectos: Cualquier dato puede ser utilizado para notificar una excepción. No hay distinción entre excepciones comprobadas y no comprobadas. El compilador no controla ninguna excepción. Curso 2013/2014 Programación Orientada a Objetos 101

102 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 2013/2014 Programación Orientada a Objetos 102

103 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 2013/2014 Programación Orientada a Objetos 103

104 Excepciones biblioteca estándar Curso 2013/2014 Programación Orientada a Objetos 104

105 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 2013/2014 Programación Orientada a Objetos 105

106 Excepciones de usuario Para notificar una situación de error 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 2013/2014 Programación Orientada a Objetos 106

107 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 compatibles con los tipos 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 2013/2014 Programación Orientada a Objetos 107

108 Declaración de excepciones El compilador no controla el tratamiento de excepciones en tiempo de compilación. 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 (= Java). Curso 2013/2014 Programación Orientada a Objetos 108

109 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 2013/2014 Programación Orientada a Objetos 109

110 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 2013/2014 Programación Orientada a Objetos 110

111 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 2013/2014 Programación Orientada a Objetos 111

112 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 2013/2014 Programación Orientada a Objetos 112

113 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. Curso 2013/2014 Programación Orientada a Objetos 113

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

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

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. 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

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

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

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

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

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

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

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

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

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

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

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores Programación Orientada a Objetos Resumen de Temas Unidad 3: Constructores y destructores 3.1 Conceptos de métodos constructor y destructor Java inicializa siempre con valores por defecto las variables

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

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

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

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

Tema 6: Clases. Índice

Tema 6: Clases. Índice Tema 6: Clases Antonio J. Sierra Índice 1. Fundamentos. 2. Declaración de objetos. 3. Asignación de objetos a variables referencia. 4. Métodos. 5. Constructores. 6. this. 7. Recogida de basura. 8. Modelado

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

Objetos y memoria dinámica

Objetos y memoria dinámica Objetos memoria dinámica 1. Punteros a objetos 2. Vectores dinámicos de objetos 3. Uso de objetos dinámicos 4. Atributos dinámicos 5. Creación de objetos con atributos dinámicos 6. Destrucción de objetos

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

Programación orientada a objetos

Programación orientada a objetos Repaso Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual smuelas@fi.upm.es! Herencia! Superclase/subclase! super! Modificador protected! Redefinicion de métodos!

Más detalles

Tema 13: Apuntadores en C

Tema 13: Apuntadores en C Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción

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

Derechos de Acceso: COMPOSICION

Derechos de Acceso: COMPOSICION CLASES Una clase es un tipo definido por el usuario que describe los atributos y los métodos de los objetos que se crearan a partir de la misma. class nombre_clase cuerpo de la clase Derechos de Acceso:

Más detalles

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java Avanzado Facultad de Ingeniería. Escuela de computación. 2 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 5 3 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo de sus prácticas

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

18. Interfaces Declaración de una interfaz

18. Interfaces Declaración de una interfaz Programación orientada a objetos con Java 191 18. Interfaces Objetivos: a) Definir el concepto de interfaz b) Interpretar el código fuente de una aplicación Java donde aparecen interfaces c) Construir

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

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

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

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS Estructura de la Información en Programación I.T.I.G., Matemáticas. Curso 2009/2010 Nombre:... Fecha: / 11 / 2009 HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS Esta hoja de ejercicios

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

Clases Abstractas e Interfaces

Clases Abstractas e Interfaces Clases Abstractas e Interfaces Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Objetivos Aprender a crear y utilizar clases y métodos abstractos

Más detalles

Definición y Conversión de datos. Agustín J. González ELO-329

Definición y Conversión de datos. Agustín J. González ELO-329 Definición y Conversión de datos Agustín J. González ELO-329 1 Calificador Const El calificador const previene que un objeto sea modificado con posterioridad a su definición. El objeto calificado como

Más detalles

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO 1.- Resumen de Prog1 Comentarios es C++ Declaraciones de variables.

Más detalles

class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) }

class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) } Programación Basada en Objetos Lectura 2 Clases en Java Definición class identificador{ //Bloque de propiedades (datos miembro, atributos, propiedades) //Bloque de métodos (comportamientos) class Tiempo{

Más detalles

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 ) FUNCIONES Las funciones son el medio básico de que se vale C para construir programas. Un Programa es, básicamente, una colección de funciones entre las que se incluye una especial llamada main(), la función

Más detalles

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos Lección 2: Creando una Aplicación en Java 1. Estructura del archivo de una clase 2. Usando una clase 3. Definiendo clases fundamentos Objetivos Conocer: La forma en la cual está se está estructurado el

Más detalles

Tema 4 Genericidad en Java. Programación Orientada a Objetos Curso 2013/2014

Tema 4 Genericidad en Java. Programación Orientada a Objetos Curso 2013/2014 Tema 4 Genericidad en Java Programación Orientada a Objetos Curso 2013/2014 Contenido Antecedentes. Genericidad en Java 5 y posterior. Características avanzadas: Genericidad restringida. Tipo puro. Limitaciones

Más detalles

Punteros y Memoria Dinámica II

Punteros y Memoria Dinámica II Repaso Punteros y Memoria Dinámica II Curso INEM. Programación en C++ Santiago Muelas Pascual smuelas@fi.upm.es! Memoria! Qué necesita el compilador para acceder a una variable?! Punteros! Operadores &

Más detalles

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc. Tutorial de C# Delegados y Eventos Por: Óscar López, M.Sc. olopez@uniandino.com.co DELEGADOS Delegados Son unos objetos que implícitamente extienden de System.Delegate y definen un tipo referencia soportado

Más detalles

Tema 6. Gestión dinámica de memoria

Tema 6. Gestión dinámica de memoria Tema 6. Gestión dinámica de memoria http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz@icc.uji.es Estructuras de datos y de la

Más detalles

2.2 Nombres, Ligado y Ámbito

2.2 Nombres, Ligado y Ámbito 2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el

Más detalles

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4 Trabajo Práctico Nº 4 Ejercicios Teóricos 1. Indique si las siguientes afirmaciones son verdaderas o falsas a. La programación orientada a objetos hace uso de clases y envío de mensajes entre objetos..

Más detalles

Funciones Definición de función

Funciones Definición de función Funciones Definición de función Una función es un bloque de código que realiza una tarea específica. Una función es una porción de programa, identificable mediante un nombre, que realiza determinadas tareas

Más detalles

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 DELEGADOS. Ing. Bruno López Takeyas, M.C.

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 DELEGADOS. Ing. Bruno López Takeyas, M.C. CAPÍTULO 8 DELEGADOS 2 http://www.itnuevolaredo.edu.mx/takeyas 1 Preguntas detonadoras Qué es un delegado? Para qué sirve? En qué circunstancias se recomienda implementar delegados? Qué es un método anónimo?

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

Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación.

Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación. Clase 3: 22/08/2016 Programación orientada a Objetos (POO) La POO está compuesta por una serie de elementos que se detallan a continuación. Clase Una clase es un modelo que se utiliza para crear objetos

Más detalles

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A. SISTEMAS INFORMÁTICOS I Junio 2003 INGENIERÍA EN INFORMÁTICA - Código Carrera 55 - Código Asignatura 077 Tipo de Examen: A NO SE PERMITE EL USO DE NINGÚN MATERIAL Tiempo: 2 horas Apellidos: Nombre: DNI:

Más detalles

PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas

PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas Instituto Tecnológico de Nuevo Laredo 1 Qué es UML? UML = Unified Modeling Language Un lenguaje de propósito general

Más detalles

INTRODUCCIÓN A LA PROGRAMACIÓN

INTRODUCCIÓN A LA PROGRAMACIÓN INTRODUCCIÓN A LA PROGRAMACIÓN ANEXO 2 El paradigma orientado a objetos INTRODUCCIÓN 1) Programación orientada a objetos (P.O.O.) Un proyecto de software es complejo. Las GUI 1, acceso transparente a datos

Más detalles

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos 1 Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente,

Más detalles

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11 Índice INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11 1.1 PROGRAMA Y LENGUAJESDE PROGRAMACIÓN...12 1.1.1 EL LENGUAJE JAVA...13 1.1.2 EL JDK...15 1.1.3 LOS PROGRAMAS EN JAVA...16

Más detalles

Guía práctica de estudio 04: Clases y objetos

Guía práctica de estudio 04: Clases y objetos Guía práctica de estudio 04: Clases y objetos Elaborado por: M.C. M. Angélica Nakayama C. Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena Guía práctica de estudio 04: Clases y

Más detalles

Tema: Clases y Objetos en C#. Parte II.

Tema: Clases y Objetos en C#. Parte II. Programación II. Guía No. 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Clases y Objetos en C#. Parte II. Objetivos Implementar clases, objetos, propiedades, métodos y

Más detalles

Conceptos Básicos. I. López

Conceptos Básicos. I. López Conceptos Básicos I. López Correspondencia de terminología UML y C++ UML C++ Clase Clase (declaración en.h) Atributos Miembros de datos (declaración en.h) Operaciones Miembros de función (declaración en.h)

Más detalles

Impresión por pantalla. 3. Indicar la salida por pantalla (2 puntos-20 minutos)

Impresión por pantalla. 3. Indicar la salida por pantalla (2 puntos-20 minutos) 3. Indicar la salida por pantalla (2 puntos-20 minutos) #include class EUITIelemento; class EUITIpila int num; EUITIelemento *pila[10]; EUITIpila():num(0); bool push(euitielemento *in) if(num>=10)return

Más detalles

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

4. POLIMORFISMO. Figura 6: Funciones virtuales

4. POLIMORFISMO. Figura 6: Funciones virtuales página 1 4. POLIMORFISMO Polimorfismo, por definición, es la capacidad de adoptar formas distintas. En el ámbito de la Programación Orientada a Objetos se entiende por polimorfismo la capacidad de llamar

Más detalles

Francisco Javier Peña Escobar Universidad del Valle

Francisco Javier Peña Escobar Universidad del Valle Francisco Javier Peña Escobar Universidad del Valle franpena@univalle.edu.co Universidad del Valle - 2009 Relaciones entre clases Relaciones entre clases. Herencia. Constructores y destructores. Lista

Más detalles

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los

Más detalles

Conceptos Básicos. Programación Orientada a Objetos 2

Conceptos Básicos. Programación Orientada a Objetos 2 Programación Orientada a Objetos Conceptos Básicos de Objetos Ing. Julio Ernesto Carreño Vargas MsC. Conceptos Básicos Las aproximaciones ADOO y POO, proveen a los objetos como el principal medio para

Más detalles

Prueba N o 1. Programación II

Prueba N o 1. Programación II UNIVERSIDAD ANDRÉS BELLO 1 Prueba N o 1 Programación II Profesores: José Luis Allende y Carlos Beyzaga. Fecha: 10 de Septiembre de 2013 Nombre: Nota: Instrucciones: Coloque su nombre a todas las hojas.

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

Modulo 11. Clases y Objetos en Java

Modulo 11. Clases y Objetos en Java El siguiente texto es una traducción no oficial del documento publicado por el grupo JEDI, Introduction to Programming 1, no pretende en ningún momento reemplazar los contenidos generados por este grupo.

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN ORIENTADA A OBJETOS PROGRAMACIÓN ORIENTADA A OBJETOS GRADO EN INGENIERÍA INFORMÁTICA SEGUNDO CURSO DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO ESCUELA POLITÉCNICA SUPERIOR UNIVERSIDAD DE CÓRDOBA CURSO ACADÉMICO: 2011

Más detalles

POO en lenguajes compilados de tipos estáticos (Java y C#)

POO en lenguajes compilados de tipos estáticos (Java y C#) POO en lenguajes compilados de tipos estáticos (Java y C#) Carlos Fontela cfontela@fi.uba.ar Temario Modelo de referencias, creación y destrucción de objetos (introducción) Paquetes y grupos de clases

Más detalles

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos Objetivos El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos Introducción En esta práctica se abarcará el concepto de la encapsulación, así

Más detalles

Pauta Lectura 1 CC51H: Programación Orientada a Objetos

Pauta Lectura 1 CC51H: Programación Orientada a Objetos Pauta Lectura 1 CC51H: Programación Orientada a Objetos Profesora: Nancy Hitschfeld Kahler. Ayudante: Diego Díaz Espinoza May 2, 2010 1. Pregunta uno (ver código fuente adjunto) La principal diferencia

Más detalles

Memoria en C++ Punteros - Referencias Clases Y ahora, a trabajar! Memoria Dinámica en C++

Memoria en C++ Punteros - Referencias Clases Y ahora, a trabajar! Memoria Dinámica en C++ Qué es una variable? Variables Memoria Matemática: una etiqueta que representa a un valor en una expresión: f (y) = y 2 + 2y Programación: Nombre simbólico dado a un valor residente en la memoria. Propiedades

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 I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

Tema 6: Memoria dinámica

Tema 6: Memoria dinámica : Programación 2 Curso 2013-2014 Índice 1 2 3 El tamaño es fijo y se conoce al implementar el programa Declaración de variables int i=0; char c; float vf[3]={1.0, 2.0, 3.0}; i c vf[0] vf[1] vf[2] 0 1.0

Más detalles

ANEXO XVII DE LA RESOLUCION N

ANEXO XVII DE LA RESOLUCION N Hoja 1 de 7 UNIVERSIDAD NACIONAL DE CÓRDOBA Facultad de Ciencias Exactas Físicas y Naturales República Argentina Programa de: Código: Informática Carrera: Materia común Res. Nº Plan: Puntos:3.5 Escuela:

Más detalles

Procesadores de lenguaje Tema 5 Comprobación de tipos

Procesadores de lenguaje Tema 5 Comprobación de tipos Procesadores de lenguaje Tema 5 Comprobación de tipos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Sistemas de tipos. Expresiones de tipo. Equivalencia de tipos. Sobrecarga,

Más detalles

Ejercicio 1. Ejercicio 2

Ejercicio 1. Ejercicio 2 Todos los ejercicios incluyen una parte opcional de mayor dificultad, indicada con una serie de asteriscos en función del grado de dificultad. Ejercicio 1 Este ejercicio servirá para practicar la declaración

Más detalles

Tema 3b: Estructura General de un programa en Java

Tema 3b: Estructura General de un programa en Java Tema 3b: Estructura General de un programa en Java 0 Modificadores de acceso Son keywords en Java que dan información al compilador sobre el ámbito en el que una clase, un método y/o una variable pueden

Más detalles

Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II)

Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II) Guías técnicas Grupo Danysoft: Creación de Componentes en Delphi (parte II) Por Pablo Reyes Grupo Danysoft mayo de 2001 - (902) 123146 www.danysoft.com Segunda parte Este artículo es el segundo de una

Más detalles

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto

Más detalles

Programación Orientada a Objetos (POO)

Programación Orientada a Objetos (POO) Programación Orientada a Objetos (POO) Introducción La programación orientada a objetos es una técnica de programación en la cual expresamos el código en términos relacionados a como vemos las cosas en

Más detalles

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

Tema 6: Programación Orientada a Objetos en C# Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle Tema 6: 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, Espacios

Más detalles

Definición. Mónica E. García García Feb 07

Definición. Mónica E. García García Feb 07 Tema 11: Herencia 0 Definición Cuando inicialmente se modelan dos cosas y se tienen datos duplicados y además pudiera darse que el número de métodos también es similar así como la implementación, se requiere

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

Descripción y Contenido del Curso. Programación C++ Capacity Academy. Descripción y Contenido del Curso Programación C++ Capacity Academy Educación en Tecnología de la Información Online, Efectiva y Garantizada Qué aprenderá si toma este Curso? En este curso aprenderás todo

Más detalles

Clases en C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Algoritmos y Programación II. Enero de 2005

Clases en C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Algoritmos y Programación II. Enero de 2005 Clases en C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Algoritmos y Programación II Enero de 200 1. Definición de Clases Cada clase contiene: datos (datos miembro o campos),

Más detalles

Tema: Herencia en C#.

Tema: Herencia en C#. Programación II. Guía No. 8 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Herencia en C#. Objetivos Crear clases a través de la herencia de clases existentes. Describir

Más detalles

3.3 Conceptos Básicos del Lenguaje Java

3.3 Conceptos Básicos del Lenguaje Java 3.3 Conceptos Básicos del Lenguaje Java Conjunto de Caracteres Java utiliza Unicode, un conjunto de caracteres de 16 bits Java permite leer ASCII de 7-bit o Latin-1, conviertiéndolo a Unicode Son pocos

Más detalles

4.1 - OBJETOS Y CLASES

4.1 - OBJETOS Y CLASES 4.- Elementos relacionados con la Orientación a Objeto 4.1 - OBJETOS Y CLASES Intoducción Alan Kay (Smalltalk) Todo es un objeto. Un programa es un grupo de objetos diciendose unos a otros qué deben hacer

Más detalles

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE 1 Estructura de Datos 1. Logica de Programación 2. Uso de Algoritmos usando Lenguaje Java 3. Ingreso de datos 4. Sentencias de Control 1.

Más detalles

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Estructura de la Información en Programación I.T.I.G., Matemáticas. Curso 2008/2009 Nombre:... Fecha: / 01 / 2009 HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Esta hoja de ejercicios nos servirá

Más detalles

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador HERENCIA Y TIPOS. Las clases con propiedades y funciones comunes se agrupan en una superclase. Las clases que se derivan de una superclase son las subclases. Las clases se organizan como jerarquía de clases.

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

Más detalles

Seminario C++ Introducción a la programación orientada a objetos. Parte IV v Cristina Cachero Pedro J. Ponce de León

Seminario C++ Introducción a la programación orientada a objetos. Parte IV v Cristina Cachero Pedro J. Ponce de León Seminario C++ Introducción a la programación orientada a objetos Parte IV v. 20070918 Cristina Cachero Pedro J. Ponce de León Departamento de Lenguajes y Sistemas Informáticos Universidad de Alicante Indice

Más detalles

TEMA 2 Introducción a C# ANÁLISIS Y DESARROLLO DE APLICACIONES INFORMÁTICAS Curso 2010/2011

TEMA 2 Introducción a C# ANÁLISIS Y DESARROLLO DE APLICACIONES INFORMÁTICAS Curso 2010/2011 TEMA 2 Introducción a C# ANÁLISIS Y DESARROLLO DE APLICACIONES INFORMÁTICAS Curso Origen Nuevo lenguaje de propósito general de Microsoft para la plataforma.net Es el único que ha sido diseñado específicamente.net

Más detalles