:
Programacion orientada a objetos
Profesor:
Armando Ricardo Huapaya Sotero
Turno:
Noche
Cliclo:
5
Seccion:05
Alumnos:
-Perez Campusmana Marcos Miguel
-Requena Calla Carlos
-Fernandez de Cordova Casaretto Franco Javier
Indice
Introduccion
1. Diseño de diagramas de clase
2. UML
3. Clases y Objetos
4. Atributos y métodos
5. Encapsulacion
6. Modificadores de acceso
7. Constructores
8. Jerarquias de Clases
9. Herencia
Bibliografia
Introduccion
¿QUÉ ES JAVA? CONCEPTO DE PROGRAMACIÓN ORIENTADA A OBJETOS
Java es un lenguaje de programación orientado a objetos que se popularizó a partir del
lanzamiento de su primera versión comercial de amplia difusión, la JDK 1.0 en 1996. Actualmente
es uno de los lenguajes más usados para la programación en todo el mundo.
Los antecedentes de Java habría que buscarlos en los lenguajes de programación C y C++. El
lenguaje C fue desarrollado en la década de los 70 y constituye un lenguaje muy robusto usado
como núcleo del sistema operativo Unix. C no admite la orientación a objetos y está considerado
un lenguaje “poco amigable” desde el punto de vista de que su sintaxis, elementos de
programación que emplea (manejo directo de memoria) y otras cuestiones hacen que sea un
lenguaje difícil de aprender. C++ fue una evolución de C desarrollada en los años 80. Introdujo el
diseño orientado a objetos, pero manteniendo la compatibilidad con C. Esto suponía que C++
permitiera tanto el uso de la programación estructurada “tradicional” como la programación
orientada a objetos. Además C++ mantuvo ciertas características de C como el manejo directo
de la memoria, el uso de variables globales, sentencia goto, etc. que hicieron que la evolución
fuera “parcial”.
Como paso final en esta evolución tenemos Java, un lenguaje que evoluciona a partir de C y C+
+, pero que elimina diversos aspectos de estos lenguajes y se constituye en un lenguaje
definitivamente orientado a objetos. El romper con distintos aspectos de C++ cuyo manejo
inadecuado por parte de muchos programadores daba lugar a problemas en las aplicaciones ha
sido un factor decisivo para convertir a Java en un lenguaje popular y de amplio uso.
Nosotros vamos a quedarnos con el lado práctico de lo que hemos comentado respondiendo esta
pregunta: ¿Es necesario saber C ó C++ para programar en Java? No, no es necesario.
Aunque puede suponer una ventaja para aquellas personas que tengan conocimientos previos en
estos lenguajes, no recomendamos de forma explícita su estudio en profundidad como paso
previo al aprendizaje de Java.
De modo orientativo, veamos un esquema sobre la evolución de los lenguajes.
Aplicaciones “cliente”: son las que se ejecutan en un solo ordenador (por ejemplo el portátil de tu casa) sin necesidad de conectarse a otra máquina. Podemos hablar también de “aplicaciones web”. Al contrario. etc. Tener en cuenta que algunos lenguajes que nacieron en los años 60 han perdido vigencia y ya no se usan. Aplicaciones “cliente/servidor”: son programas que necesitan conectarse a otra máquina (por ejemplo un servidor de datos) para pedirle algún servicio de forma más o menos continua. y por otro introduce ciertas novedades que lo convierten en un lenguaje moderno. como es el caso de Cobol. También los datos relativos a fechas son orientativos.) que actúa como su cliente páginas de respuesta en HTML. No hay que suponer que lo único válido sea la programación orientada a objetos por ser lo más moderno. como podría ser el uso de una base de datos. mientras que otros se han ido modernizando y continúan usándose más o menos ampliamente. Estas aplicaciones reciben “solicitudes” desde un ordenador y envían al navegador (Internet Explorer. Pueden servir por ejemplo para el teletrabajo: trabajar desde casa pero conectados a un ordenador de una empresa. la misma programación orientada a objetos se basa en conceptos muy antiguos de programación. Safari. 2. 3. muchísima programación de la que se hace hoy en día se basa en lenguajes o código no orientado a objetos. Además.Este esquema es meramente orientativo: es imposible reflejar la diversidad de lenguajes y su evolución en un gráfico tan simplificado. Lo que consideramos interesante con este esquema es que se vea que Java es una evolución que por un lado incorpora cosas que se venían usando desde hace mucho tiempo en programación. Pueden servirte por ejemplo para realizar cálculos o gestionar datos. que son programas Java que se ejecutan en un servidor de páginas web. Java es un lenguaje útil para casi todo tipo de problemas. Firefox. . Podemos citar como funcionalidades de Java varias: 1.
Éstos son sólo algunos ejemplos de todo el potencial que hay detrás de Java como lenguaje para aprender y obtener muchos beneficios con su uso.). una Cuenta Corriente. las cuales pueden ser asociativas. Relaciones: Herencia. Obviamente por determinados términos empleados (cliente. Nosotros en este curso vamos a estudiar únicamente los aspectos más básicos de Java. A través de ella podemos modelar el entorno en estudio (una Casa. cliente/servidor. HTML…). Elementos (Diagrama UML): Clase Es la unidad básica que encapsula toda la información de un Objeto (un objeto es una instancia de una clase). una clase es representada por un rectángulo que posee tres divisiones: . te darás cuenta de que el lenguaje Java tiene mucha potencialidad. de uso y de contenimiento. de herencia. un Auto. etc. Diseño de diagrama de clases Un diagrama de clases sirve para visualizar las relaciones entre las clases que involucran el sistema. En UML. Un diagrama de clases está compuesto por los siguientes elementos: Clase: atributos. Composición. métodos y visibilidad. Asociación y Uso. base de datos. pero también de que su conocimiento a fondo requeriría mucho tiempo. Agregación.
o Inferior: Contiene los métodos u operaciones. los cuales son la forma como interactúa el objeto con su entorno (dependiendo de la visibilidad: private. protected o public). protected o public).En donde: o Superior: Contiene el nombre de la Clase o Intermedio: Contiene los atributos (o variables de instancia) que caracterizan a la Clase (pueden ser private. Ejemplo: Una Cuenta Corriente que posee como característica: o Balance Puede realizar las operaciones de: o Depositar o Girar o y Balance El diseño asociado es: Atributos y Métodos: .
): Indica que el atributo sólo será accesible desde dentro de la clase (sólo sus métodos lo pueden accesar). éstos pueden tener las características: public (+. Métodos: Los métodos u operaciones de una clase son la forma en como ésta interactúa con su entorno. es decir. los que definen el grado de comunicación y visibilidad de ellos con el entorno. pero si podrá ser accesado por métodos de la clase además de las subclases que se deriven (ver herencia). es accesible desde todos lados. protected (#. protected (#. ): Indica que el atributo será visible tanto dentro como fuera de la clase. estos son: o public (+. pero si podrá ser accesado por métodos de la clase además de métodos de las subclases que se deriven (ver herencia) . es accesible desde todos lados. private (-. ): Indica que el método será visible tanto dentro como fuera de la clase. private (-. ): Indica que el método no será accesible desde fuera de la clase. ): Indica que el método sólo será accesible desde dentro de la clase (sólo otros métodos de la clase lo pueden accesar). ): Indica que el atributo no será accesible desde fuera de la clase. es decir.o Atributos: Los atributos o características de una Clase pueden ser de tres tipos.
. poseerá las características y atributos visibles de la Super Clase (public y protected). Antes es necesario explicar el concepto de cardinalidad de relaciones: En UML.Relaciones entre Clases: Ahora ya definido el concepto de Clase. es necesario explicar cómo se pueden interrelacionar dos o más clases (cada uno con características y objetivos diferentes).* (1. ejemplo: . por ende la Subclase además de poseer sus propios métodos y atributos. Herencia (Especialización/Generalización): Indica que una subclase hereda los métodos y atributos especificados por una Super Clase.n) o número fijo: m (m denota el número).n) o 0 o muchos: 0.. se anotan en cada extremo de la relación y éstas pueden ser: o uno o muchos: 1.* (0. la cardinalidad de las relaciones indica el grado y nivel de dependencia...
Cuando se requiere componer objetos que son instancias de clases definidas por el desarrollador de la aplicación. Auto y Camión. Auto posee las Características de Vehículo (Precio. Cabe destacar que fuera de este entorno. . en cambio Camión también hereda las características de Vehiculo (Precio. en donde el tiempo de vida del objeto incluido es independiente del que lo incluye. n bastan los tipos de datos básicos que proveen los lenguajes: enteros.En la figura se especifica que Auto y Camión heredan de Vehículo. Agregación: Para modelar objetos complejos. en donde el tiempo de vida del objeto incluido esta condicionado por el tiempo de vida del que lo incluye. Un Ejemplo es el siguiente: En donde se destaca que: Un Almacén posee Clientes y Cuentas (los rombos van en el objeto que posee las referencias). en cambio atributos como Descapotable no son visibles por ser privados. reales y secuencias de caracteres. lo único "visible" es el método Características aplicable a instancias de Vehículo. tenemos dos posibilidades: Por Valor: Es un tipo de relación estática. VelMax. Este tipo de relación es comúnmente llamada Agregación (el objeto base utiliza al incluido para su funcionamiento). Por Referencia: Es un tipo de relación dinámica. es "parte/todo"). es decir. es decir. etc) pero posee como particularidad propia Acoplado. etc) además posee algo particular que es Descapotable. Tara y Carga. Este tipo de relación es comúnmente llamada Composición (el Objeto base se construye a partir del objeto incluido. pues tiene definición pública. VelMax.
Cabe destacar que no es una relación fuerte. Asociación: La relación entre clases conocida como Asociación. Se denota por una flecha punteada. La flecha en este tipo de relación indica la navegabilidad del objeto referenciado. en la que una clase es instanciada (su instanciación es dependiente de otro objeto/clase). El uso más particular de este tipo de relación es para denotar la dependencia que tiene una clase de otra. en cambio una orden de compra solo puede tener asociado un cliente. Ejemplo: Un cliente puede tener asociadas muchas Órdenes de Compra. Cuando se destruye el Objeto Almacén también son destruidos los objetos Cuenta asociados. La composición (por Valor) se destaca por un rombo relleno. Dependencia o Instanciación (uso): Representa un tipo de relación muy particular. como por ejemplo una aplicación grafica que instancia una ventana (la creación del Objeto Ventana está condicionado a la instanciación proveniente desde el objeto Aplicación): . Cuando no existe este tipo de particularidad la flecha se elimina. el tiempo de vida de un objeto no depende del otro. permite asociar objetos que colaboran entre sí. La agregación (por Referencia) se destaca por un rombo transparente. es decir. en cambio no son afectados los objetos Cliente asociados.
es decir. o Clase parame trizada: Una clase parame trizada se denota con un subcuadro en el extremo superior de la clase. El ejemplo más típico es el caso de un Diccionario en donde una llave o palabra tiene . que implementan los métodos abstractos definidos. La única forma de utilizarla es definiendo subclases. sin implementación). Esto indica que la clase definida no puede ser instanciada pues posee métodos abstractos (aún no han sido definidos. en donde se especifican los parámetros que deben ser pasados a la clase para que esta pueda ser instanciada. Casos Particulares: Clase Abstracta: Una clase abstracta se denota con el nombre de la clase y de los métodos con letra "itálica".Cabe destacar que el objeto creado (en este caso la Ventana gráfica) no se almacena dentro del objeto que lo crea (en este caso la Aplicación).
pero en este caso las llaves y elementos pueden ser genéricos. Se accede a este estado a través de los métodos públicos. item: Contenido a almacenar en el diccionario asociado a "key". las variables del objeto se localizan en el centro o núcleo del objeto. Típicamente. Ejemplo: Supongamos que tenemos un el caso del Diccionario implementado mediante un árbol binario. Para este caso particular hemos definido un Diccionario para almacenar String y Personas. de modo tal de mantener al objeto en un estado consistente. En el ejemplo no se especificaron los atributos del Diccionario. es decir su interfaz publica. cuyo tipo también puede ser genérico. pues ellos dependerán exclusivamente de la implementación que se le quiera dar. en donde cada nodo posee: key: Variable por la cual se realiza la búsqueda. de un objeto. el encapsulamiento es utilizado para esconder detalles de la . La genericidad puede venir dada de un Template (como en el caso de C++) o bien de alguna estructura predefinida (especialización a través de clases).asociado un significado. en estos métodos. las cuales pueden funcionar como llaves o como ítem. Al empaquetamiento de las variables de un objeto con la protección de sus métodos se le llama encapsulamiento. Como se puede observar de los diagramas. Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa. solo se mostrarán las relaciones para la implementación del Diccionario: Encapsulaciones Definición: El encapsulamiento habla del modo de ocultar como ha sido implementado el estado. los atributos. puede ser genérica. Una buena práctica es hacer las validaciones correspondientes a los posibles estados del objeto.
Son métodos públicos del objeto. -El setter: El método para acceder a los atributos en forma de escritura se los denomina “setters”. Son los métodos que establecen el valor de los atributos. De la misma forma podemos respetar el encapsulamiento si se tiene. Tambien se los genera de forma automática en los entornos de desarrollo Modificadores de acceso MODIFICADORES DE ACCESO JAVA: PUBLIC. PRIVATE. el único modo de modificar la velocidad es a través de los método acelerar() y frenar(). con esto el podría principio deocultación considerarse como de la demasiado .puesta en práctica no importantes de otros objetos. los detalles de la puesta en práctica pueden cambiar en cualquier tiempo sin afectar otras partes del programa. Entonces. en la clase Auto. Sin restrictivo. permite generarlos de forma automática. de acuerdo embargo. y solo se la puede modificar por los métodos acelerar() y frenar(). El NetBeans. PROTECTED. un atributo velocidad. es decir que esta encapsulada la velocidad. que sea privado. Hasta ahora habíamos dicho que una subclase no tiene acceso a los campos de una superclase información. Son los métodos que retornan el valor de los atributos. como la mayoría de los entornos de desarrollo. También se lo llama “information hiding”. -El getter: El método para acceder a los atributos en forma de solo lectura se los denomina “getters”. Métodos de acceso Los métodos de acceso son el medio de acceder a los atributos privados del objeto. no se puede cambiar la velocidad de ninguna otra forma.
private o protected). Declara un campo de una clase como protected y en un test crea un objeto de la subclase y trata de acceder a ese campo con una invocación directa del tipo interino43. El acceso protegido suele aplicarse a métodos o constructores. El modificador de acceso protected puede aplicarse a todos los miembros de una clase. En la siguiente tabla puedes comparar los efectos de usar uno u otro tipo de declaración en cuanto a visibilidad de los campos o métodos: MODIFICADOR CLASE PACKAGE SUBCLASE TODOS public Sí Sí Sí Sí . para evitar debilitar el encapsulamiento. sino algo intermedio que se denomina como “acceso protegido”. estos serán visibles/utilizables por las subclases y otras clases del mismo package. Java entre ellos. cuando en realidad la relación de una superclase con una subclase es más estrecha que con una clase externa. tanto a campos como a métodos o constructores. pero no podemos acceder o invocar a campos o métodos privados de una superclase. Desde un objeto de una subclase podremos acceder o invocar un campo o método declarado como protected. En el caso de métodos o constructores protegidos. con la salvedad de que protected suele usarse cuando se trabaja con herencia. La sintaxis para emplear esta palabra clave es análoga a la que usamos con las palabras public y private. expresado con la palabra clave protected. pero preferiblemente no a campos. En ocasiones puntuales sí resulta de interés declarar campos con acceso protegido.IdProfesor = “54-DY-87”. Java admite una variante más en cuanto a modificadores de acceso: la omisión del mismo (no declarar ninguno de los modificadores public. se usa un nivel de acceso intermedio que no es ni public ni private. que significa que las subclases sí pueden tener acceso al campo o método.Decimos que podría considerarse demasiado restrictivo porque limita el acceso a una subclase como si se tratara de una clase cualquiera. es decir. Por ello en diferentes lenguajes.
Los constructores no se heredan. Se ejecuta de forma automática.protected Sí Sí Sí No No especificado Sí Sí No No private Sí No No No Constructor Un constructor es un método especial de una clase que se llama automáticamente siempre que se declara un objeto de esa clase. En una clase puede haber varios constructores con el mismo nombre y con distinta cantidad o tipos de argumentos. Un constructor debería declararse publico. Es decir permite sobrecarga. para que pueda ser invocado desde cualquier parte donde se desee crear un objeto de su clase. Un constructor no puede devolver ningún valor incluyendo el void. Se inicializa los atributos de estos objetos con los valores predeterminados por el sistema. Es el primer método que se ejecuta. Funcionamiento del constructor Java Cuando se crea un objeto en java se realiza las siguientes operaciones de forma automática: Se asigna memoria para el objeto. . Se llama al constructor de la clase que puede ser uno entre varios. La principal misión del constructor es reservar memoria e inicial izar las variables miembros de la clase. Características del constructor Java Debe tener el mismo nombre que la clase a la que pertenece.
Constructor Java copia Es un constructor que recibe por parámetro un objeto del mismo tipo de la clase. Este tipo de constructor se lo llama como constructor no-args.Constructor Java por defecto Si para una clase no se define ningún método constructor se crea uno automáticamente por defecto. Los atributos del objeto son iniciados con los valores predeterminados por el sistema. Constructor Java sobrecargado: . asignando atributo por atributo al nuevo objeto generado. La llamada al constructor por default. Ejemplos Constructor Java por default: Acá vemos una clase con el constructor por defecto es decir sin declarar el constructor.El constructor por defecto es un constructor sin parámetros que no hace nada. ya que no recibe parámetros.
Constructor Java Copia . La llamada al constructor por sobre carga. el constructor Persona(String nombre).Se puede apreciar el constructor Persona() y su sobre carga.
La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene los atributos y métodos de la clase primaria. Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. . donde una clase nueva se crea a partir de una clase existente.Este constructor recibe por parámetro un objeto del tipo Persona y asigna los valores de la persona pasada por parámetros a la nueva instancia de la persona. que luego se aplican a los atributos y métodos heredados. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas clases tiende a proteger los datos miembro usando la encapsulación). Como resultado. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase. Herencia La herencia es específica de la programación orientada a objetos.
La programación orientada a objetos permite heredar a las clases de uso común del Estado y el comportamiento de otras clases. las bicicletas de carrera tienen gota manillar. Carrera y Tandem. En el lenguaje de programación Java. arte actual) . la cadencia actual de pedal.¿QUÉ ES LA HERENCIA? Diferentes tipos de objetos suelen tener una cierta cantidad en común unos con otros. Bicicleta ahora se convierte en la superclase de la Montañera.Sin embargo. algunas bicicletas de montaña tienen una anillo de cadena. por ejemplo. todos comparten las características de las bicicletas (velocidad actual. Bicicletas de montaña bicicletas de carretera y bicicletas tándem. cada uno define también las características adicionales que los hacen diferentes: las bicicletas tándem tiene dos asientos y dos juegos de manillares. cada clase se le permite tener una superclase directa. En este ejemplo. dándoles una menor relación de desmultiplicación. y cada superclase tiene el potencial para un número ilimitado de las subclases: Bicicleta Montañera Carrera Una jerarquía de clases de bicicleta Tandem .
pero permite propio código para centrarse exclusivamente en las características que lo hacen único. manteniendo las otras dos clases con las partes no comunes y heredando de esta nueva clase con la palabra reservada extends. el uso de palabras clave extends. int numDepart. String nombre. int salario. Supongamos. int numEmpleado. por ejemplo. Al principio de su declaración de clase. usted debe tener cuidado de documentar adecuadamente el estado y el comportamiento que casa superclase define. int salario.La sintaxis para la creación de una subclase es simple. int numDepart. que tenemos la clase Jefe y la clase Secretaria definidas como sigue: class Jefe { class Secretaria { int numEmpleado. ya que ese código no aparecerá en el archivo fuente de cada subclase. seguido por el nombre de la clase a heredar: Class bicicleta_de_montaña extends bicicleta { //Los nuevos campos y métodos de definición de una bicicleta de montaña irían aquí } Esto da a la montañera todos los mismos campos y métodos de bicicleta. } } Las partes comunes se pueden agrupar en una misma clase. Relación “es-un” Para saber si la relación de herencia es correcta. se plantea la pregunta “¿la subclase es-una superclase? La respuesta debe ser “si” ¿el Jefe es-un Empleado? Sí . Sin embargo. String nombre.
Ventajas Se ahorra código Permite reutilizar código extendiendo su funcionalidad Desventajas Se ahorra código Se introduce una fuerte dependencia en la clase hija respecto a la clase padre Puede dificultar la reutilización Un cambio en la clase padre puede tener efectos imprevistos en las clases hijas Un objeto de una clase hija puede tener un comportamiento inconsistente con lo esperado de un objeto de la clase padre Se establece una jerarquía o clasificación. EJEMPLO import javax. Se puede acceder a los miembros de la superclase usando la palabra reservada super.*.swing. Los miembros públicos de la superclase son visibles y siguen siendo públicos en la subclase. . En java. Si una clase se declara como final no se puede heredar de ella.JOptionPane. import javax. todas las clases heredan implícitamente de la clase Object. public class Mamifero{ private int patas. Si cambia el criterio de clasificación puede acarrear muchas modificaciones Se indica usando la palabra reservada extends class Punto3D extends Punto2D Visibilidad: Los miembros privados de la superclase no son visibles desde la subclase.
" Tiene " + patas + " patas\n". } } public class CrearPerro { public static void main(String[] args) { Perro perrito = new Perro("Pantaleon").INFORMATION_MESSAGE). "Mamifero".nombre = nombre. } public Mamifero(String nombre.private String nombre. int patas){ this. /*Está en la clase mamífero*/ } } Herencia y creación . } } public class Perro extends Mamifero { public Perro(String nombre){ super(nombre.patas = patas. public void imprimirPatas(){ JOptionPane. } } public class Gato extends Mamifero { public Gato(String nombre){ super(nombre. 4). perrito. 4).showMessageDialog(null. this.imprimirPatas(). JOptionPane.
El constructor de la clase hija refina el comportamiento del padre. La llamada al constructor del padre puede ser: Implícita: Si se omite. o … Dependiendo de si el constructor al que invocamos tiene o no argumentos ACCESO PROTEGIDO (OCULTACIÓN DE INFORMACIÓN) Una subclase hereda todos los atributos definidos en la superclase. éste tiene que declararse como protected Es discutible la visibilidad protegida para los atributos Es útil la visibilidad protegida para los métodos Protected: características visibles a las subclases y al resto de clases del paquete.b). o super(a. Si no existe el constructor por defecto en la clase padre dará un error en tiempo de compilación. Para permitir que en un método de la subclase se pueda acceder a una característica (atributo/método) de la superclase. se llamará implícitamente al constructor por defecto. Explícita: super(). equivale a poner como primera sentencia super(). La primera sentencia del constructor de la clase hija SIEMPRE es una llamada al constructor de la clase padre. En Java los constructores no se heredan. . pero no puede acceder a los campos privados.
Se puede cambiar el nivel de visibilidad.Se puede utilizar en el cuerpo de otros métodos: Deposito>>getCapital: devuelve el capital fijo DepositoEstructurado>>getCapital: devuelve el capital fijo + capital variable En los métodos de DepositoEstructurado habrá que determinar cuál de las dos versiones del método getCapital es la que necesitamos. sólo relaja: Podemos pasar de menos a más. pero no al contrario.De más restrictivo a menos: private Visible sólo en la clase donde se define Sin modificador (por defecto) Visible a las clases del paquete protected Visible a las subclases y al resto de clases del paquete public Visible a todas las clases REFINAMIENTO: Se añade nueva funcionalidad al comportamiento heredado super La palabra reservada super se utiliza para invocar a un método de la clase padre. No se tiene que utilizar para invocar a métodos heredados. si se . Se debe utilizar para el refinamiento de métodos.
Asimismo. ¿El modificador final va contra el principio abierto-cerrado? TIPOS DE HERENCIA . el modificador final es aplicable a una clase indicando que no se puede heredar de ella. El tipo de retorno (regla covariante) Siempre que el tipo de retorno del método redefinido sea compatible con el tipo de retorno del método original Un tipo B es compatible con un tipo A si la clase B es subclase de A Ejemplo: Jerarquía de Empleado Empleado >> public Empleado getColega(){…} Jefe >> public Jefe getColega() {…} RESTRINGIR LA HERENCIA En Java se puede aplicar el modificador final a un método para indicar que no puede ser redefinido.
Por ejemplo. considerando la figura anterior de herencia se tiene que: Una referencia a un objeto de la clase referencia a un objeto de la clase A. Un objeto solamente tiene una forma (la que se le asigna cuando se construye ese objeto) pero la referencia a objeto es polimórfica porque puede referirse a objetos de diferentes clases (es decir. la referencia toma múltiples formas). Para que esto sea posible debe haber una relación de herencia entre esas clases. Una referencia a un objeto de la clase referencia a un objeto de la clase A. Una referencia a un objeto de la clase referencia a un objeto de la clase D. Una referencia a un objeto de la clase referencia a un objeto de la clase A B también puede ser una C también puede ser una D también puede ser una E también puede ser una E también puede ser una Formas de polimorfismo: Polimorfismo Polimorfismo Polimorfismo Polimorfismo Polimorfismo Abstracción de asignación (variables polimorfas) puro (función polimorfa) ad hoc (sobrecarga) de inclusión (redefinición) paramétrico (genericidad) .POLIMORFISMO Otro concepto de la POO es el polimorfismo. Una referencia a un objeto de la clase referencia a un objeto de la clase A.
pueden agregar variables y métodos además de los que ya heredan de sus clases padres. y pueden implementar parcialmente. El paso de parámetros es válido sólo si el tipo del parámetro real es compatible con el tipo del parámetro formal. se puede pensar en una jerarquía de clase como la definición de conceptos demasiado abstractos en lo alto de la jerarquía y esas ideas se convierten en algo más concreto conforme se desciende por la cadena de la superclase. también. Las clases hijas pueden. . De igual manera. Otros programadores concluirán esos detalles con subclases especializadas. Los programadores pueden implementar superclases llamadas clases abstractas que definen conductas "genéricas". Las superclases abstractas definen. no hay limitación a un sólo nivel de herencia por lo que se tiene un árbol de herencia en el que se puede heredar varios niveles hacia abajo y mientras más niveles descienda una clase. Sin embargo. la conducta pero gran parte de la clase no está definida ni implementada. A través del uso de herencia. sobreescribir los métodos que heredan por implementaciones especializadas para esos métodos. más especializada será su conducta. La herencia presenta los siguientes beneficios: Las subclases proveen conductas especializadas sobre la base de elementos comunes provistos por la superclase. los programadores pueden reutilizar el código de la superclase muchas veces. DepositoEstructurado es compatible con Deposito Una asignación polimórfica es válida sólo si el tipo estático de la parte izquierda es compatible con el tipo de la parte derecha. las clases hijas no están limitadas al estado y conducta provistos por sus superclases.Volviendo a la figura anterior de la relación de herencia entre clases. COMPATIBILIDAD DE TIPOS Un tipo B es compatible con un tipo A sólo si la clase B es descendiente de la clase A.
JERARQUÍA DE CLASES .
La herencia organiza las clases en una estructura jerárquica formando jerarquías de clases No es tan sólo un mecanismo para compartir código Consistente con el sistema de tipos del lenguaje Si una clase B hereda de otra clase A entonces: B incorpora la estructura (atributos) y comportamiento (métodos) de la clase A B puede incluir adaptaciones: B puede añadir nuevos atributos B puede añadir nuevos métodos B puede redefinir métodos Las adaptaciones son dependientes del lenguaje .
si cambiamos en una superclase automáticamente se ve reflejado en las subclases y en las subclases de las subclases y así sucesivamente en esta jerarquía. Esto hace que es código sea más claro.VENTAJAS DE USAR JERARQUÍA DE CLASES Se puede reutilizar todas las funcionalidades comunes a múltiples clases lo incluimos en superclases. DISEÑO DE JERARQUÍA DE HERENCIA Generalización (Factorización) Se detectan clases con un comportamiento común Ejemplo: Libro y Revista son Publicaciones Especialización (Abstracción) Se detecta que una clase es un caso especial de otra Ejemplo: Rectángulo es un tipo de Polígono No hay receta mágica para crear buenas jerarquías Problemas con la evolución de la jerarquía . La cual se puede acceder a todos los métodos y atributos Se puede realizar cambios en el código. reciben la información de la herencia.
pdf https://sites.fi-b.php? option=com_content&view=article&id=368:ique-es-java-concepto-deprogramacion-orientada-a-objetos-vs-programacion-estructuradacu00603b&catid=68:curso-aprender-programacion-java-desdecero&Itemid=188 http://jarroba.com/index.slideshare.net/archivos/2009/03/30/modificadores-en-java/ http://profesores.blogspot.html http://labojava.es/~abelp/ApuntesJava/GestionExcepciones.blogspot.caminos.pe/2012/07/normal-0-21-falsefalse-false_103.pdf .html http://codejavu.pe/2013/12/javaplayer-constructores-enjava-que-es.pe/2012/05/introduccionoopencapsulamiento.unam.ua.net/equipo2/poo-herencia-abstraccion-y-polimorfismo? next_slideshow=1 http://www2.html http://aprenderaprogramar.html http://aprenderaprogramar.php? option=com_content&view=article&id=665:public-private-y-protectedjavatipos-de-modificadores-de-acceso-visibilidad-en-clases-subclasescu00693b&catid=68:curso-aprender-programacion-java-desdecero&Itemid=188 http://mundogeek.mx/~ygalicia/POO.es/Departamentos/matematicas/Fdistancia/PIE/java/tem asj/tjava1.com/index.arrakis.fi-b.cs.com/site/programacionbasicajava/herencia http://www.pdf http://es.pe/2013/05/herencia-en-java.Bibliografía http://java-white-box.blogspot.html http://puntocomnoesunlenguaje.com/herencia-en-la-programacion-orientada-a-objetos-ejemplo-enjava/ http://rua.htm http://profesores.mx/carlos/java/java_basico3_3.mx/carlos/java/indice.unam.google.buap.html http://www.upm.es/dspace/bitstream/10045/15995/1/POO-3-Herencia-10-11.blogspot.
com/watch?v=3WNu1vuc-aw .com.google. https://books.pe/books? id=TRUdyfwdaSoC&pg=PA187&lpg=PA187&dq=JERARQUIA+DE+CLASE+EN+J AVA&source=bl&ots=DpFFoc4cwK&sig=-uaiQFHQAsIf0yxJXCaB266K7U&hl=es&sa=X&ved=0CD0Q6AEwBmoVChMIqe_3v2CyAIVDJUNCh3yZAip#v=onepage&q=JERARQUIA%20DE%20CLASE%20EN %20JAVA&f=false https://www.youtube.