You are on page 1of 32

Curso:

Programacion orientada a objetos

Profesor:

Armando Ricardo Huapaya Sotero

Turno:

Noche

Cliclo:

Seccion:05
Alumnos:
-Perez Campusmana Marcos Miguel
-Requena Calla Carlos
-Fernandez de Cordova Casaretto Franco Javier

Indice
Introduccion
1. Diseo de diagramas de clase
2. UML
3. Clases y Objetos
4. Atributos y mtodos
5. Encapsulacion
6. Modificadores de acceso
7. Constructores
8. Jerarquias de Clases
9. Herencia

Bibliografia

Introduccion
QU ES JAVA? CONCEPTO DE PROGRAMACIN ORIENTADA A OBJETOS
Java es un lenguaje de programacin orientado a objetos que se populariz a partir del
lanzamiento de su primera versin comercial de amplia difusin, la JDK 1.0 en 1996. Actualmente
es uno de los lenguajes ms usados para la programacin en todo el mundo.

Los antecedentes de Java habra que buscarlos en los lenguajes de programacin C y C++. El
lenguaje C fue desarrollado en la dcada de los 70 y constituye un lenguaje muy robusto usado
como ncleo del sistema operativo Unix. C no admite la orientacin a objetos y est considerado
un lenguaje poco amigable desde el punto de vista de que su sintaxis, elementos de
programacin que emplea (manejo directo de memoria) y otras cuestiones hacen que sea un
lenguaje difcil de aprender. C++ fue una evolucin de C desarrollada en los aos 80. Introdujo el
diseo orientado a objetos, pero manteniendo la compatibilidad con C. Esto supona que C++
permitiera tanto el uso de la programacin estructurada tradicional como la programacin
orientada a objetos. Adems C++ mantuvo ciertas caractersticas de C como el manejo directo
de la memoria, el uso de variables globales, sentencia goto, etc. que hicieron que la evolucin
fuera parcial.
Como paso final en esta evolucin 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 prctico 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 explcita su estudio en profundidad como paso
previo al aprendizaje de Java.
De modo orientativo, veamos un esquema sobre la evolucin de los lenguajes.

Este esquema es meramente orientativo: es imposible reflejar la diversidad de lenguajes y su


evolucin en un grfico tan simplificado. Tambin los datos relativos a fechas son orientativos.
No hay que suponer que lo nico vlido sea la programacin orientada a objetos por ser lo ms
moderno. Al contrario, muchsima programacin de la que se hace hoy en da se basa en
lenguajes o cdigo no orientado a objetos. Adems, la misma programacin orientada a objetos
se basa en conceptos muy antiguos de programacin.
Tener en cuenta que algunos lenguajes que nacieron en los aos 60 han perdido vigencia y ya no
se usan, mientras que otros se han ido modernizando y continan usndose ms o menos
ampliamente, como es el caso de Cobol. Lo que consideramos interesante con este esquema es
que se vea que Java es una evolucin que por un lado incorpora cosas que se venan usando
desde hace mucho tiempo en programacin, y por otro introduce ciertas novedades que lo
convierten en un lenguaje moderno.
Java es un lenguaje til para casi todo tipo de problemas. Podemos citar como funcionalidades de
Java varias:
1. Aplicaciones cliente: son las que se ejecutan en un solo ordenador (por ejemplo el
porttil de tu casa) sin necesidad de conectarse a otra mquina. Pueden servirte por ejemplo
para realizar clculos o gestionar datos.
2. Aplicaciones cliente/servidor: son programas que necesitan conectarse a otra mquina
(por ejemplo un servidor de datos) para pedirle algn servicio de forma ms o menos continua,
como podra ser el uso de una base de datos. Pueden servir por ejemplo para el teletrabajo:
trabajar desde casa pero conectados a un ordenador de una empresa.
3. Podemos hablar tambin de aplicaciones web, que son programas Java que se
ejecutan en un servidor de pginas web. Estas aplicaciones reciben solicitudes desde un
ordenador y envan al navegador (Internet Explorer, Firefox, Safari, etc.) que acta como su
cliente pginas de respuesta en HTML.

stos son slo algunos ejemplos de todo el potencial que hay detrs de Java como lenguaje para
aprender y obtener muchos beneficios con su uso. Obviamente por determinados trminos
empleados (cliente, cliente/servidor, base de datos, HTML), te dars cuenta de que el lenguaje
Java tiene mucha potencialidad, pero tambin de que su conocimiento a fondo requerira mucho
tiempo. Nosotros en este curso vamos a estudiar nicamente los aspectos ms bsicos de Java.

Diseo de diagrama de clases


Un diagrama de clases sirve para visualizar las relaciones entre las clases que involucran
el sistema, las cuales pueden ser asociativas, de herencia, de uso y de contenimiento.
Un diagrama de clases est compuesto por los siguientes elementos:

Clase: atributos, mtodos y visibilidad.

Relaciones: Herencia, Composicin, Agregacin, Asociacin y Uso.

Elementos (Diagrama UML):

Clase
Es la unidad bsica que encapsula toda la informacin de un Objeto (un objeto es
una instancia de una clase). A travs de ella podemos modelar el entorno en
estudio (una Casa, un Auto, una Cuenta Corriente, etc.).
En UML, una clase es representada por un rectngulo que posee tres divisiones:

En donde:
o

Superior: Contiene el nombre de la Clase

Intermedio: Contiene los atributos (o variables de instancia) que


caracterizan a la Clase (pueden ser private, protected o public).

Inferior: Contiene los mtodos u operaciones, los cuales son la forma


como interacta el objeto con su entorno (dependiendo de la visibilidad:
private, protected o public).

Ejemplo:
Una Cuenta Corriente que posee como caracterstica:
o

Balance

Puede realizar las operaciones de:


o

Depositar

Girar

y Balance

El diseo asociado es:

Atributos y Mtodos:

Atributos:
Los atributos o caractersticas de una Clase pueden ser de tres tipos, los
que definen el grado de comunicacin y visibilidad de ellos con el entorno,
estos son:

public (+,
): Indica que el atributo ser visible tanto dentro
como fuera de la clase, es decir, es accesible desde todos lados.

private (-,
): Indica que el atributo slo ser accesible desde
dentro de la clase (slo sus mtodos lo pueden accesar).

protected (#,
): Indica que el atributo no ser accesible desde
fuera de la clase, pero si podr ser accesado por mtodos de la
clase adems de las subclases que se deriven (ver herencia).

Mtodos:
Los mtodos u operaciones de una clase son la forma en como sta
interacta con su entorno, stos pueden tener las caractersticas:

public (+,
): Indica que el mtodo ser visible tanto dentro como
fuera de la clase, es decir, es accesible desde todos lados.

private (-,
): Indica que el mtodo slo ser accesible desde
dentro de la clase (slo otros mtodos de la clase lo pueden
accesar).

protected (#,
): Indica que el mtodo no ser accesible desde
fuera de la clase, pero si podr ser accesado por mtodos de la
clase adems de mtodos de las subclases que se deriven (ver
herencia)

Relaciones entre Clases:


Ahora ya definido el concepto de Clase, es necesario explicar cmo se pueden
interrelacionar dos o ms clases (cada uno con caractersticas y objetivos
diferentes).
Antes es necesario explicar el concepto de cardinalidad de relaciones: En UML, la
cardinalidad de las relaciones indica el grado y nivel de dependencia, se anotan en
cada extremo de la relacin y stas pueden ser:
o

uno o muchos: 1..* (1..n)

0 o muchos: 0..* (0..n)

nmero fijo: m (m denota el nmero).


Herencia (Especializacin/Generalizacin):
Indica que una subclase hereda los mtodos y atributos especificados por
una Super Clase, por ende la Subclase adems de poseer sus propios
mtodos y atributos, poseer las caractersticas y atributos visibles de la
Super Clase (public y protected), ejemplo:

En la figura se especifica que Auto y Camin heredan de Vehculo, es decir,


Auto posee las Caractersticas de Vehculo (Precio, VelMax, etc) adems
posee algo particular que es Descapotable, en cambio Camin tambin
hereda las caractersticas de Vehiculo (Precio, VelMax, etc) pero posee
como particularidad propia Acoplado, Tara y Carga.
Cabe destacar que fuera de este entorno, lo nico "visible" es el mtodo
Caractersticas aplicable a instancias de Vehculo, Auto y Camin, pues
tiene definicin pblica, en cambio atributos como Descapotable no son
visibles por ser privados.

Agregacin:
Para modelar objetos complejos, n bastan los tipos de datos bsicos que
proveen los lenguajes: enteros, reales y secuencias de caracteres. Cuando
se requiere componer objetos que son instancias de clases definidas por el
desarrollador de la aplicacin, tenemos dos posibilidades:

Por Valor: Es un tipo de relacin esttica, en donde el tiempo de


vida del objeto incluido esta condicionado por el tiempo de vida del
que lo incluye. Este tipo de relacin es comnmente llamada
Composicin (el Objeto base se construye a partir del objeto
incluido, es decir, es "parte/todo").

Por Referencia: Es un tipo de relacin dinmica, en donde el


tiempo de vida del objeto incluido es independiente del que lo
incluye.
Este
tipo
de
relacin
es
comnmente
llamada Agregacin (el objeto base utiliza al incluido para su
funcionamiento).

Un Ejemplo es el siguiente:

En donde se destaca que:

Un Almacn posee Clientes y Cuentas (los rombos van en el objeto


que posee las referencias).

Cuando se destruye el Objeto Almacn tambin son destruidos los


objetos Cuenta asociados, en cambio no son afectados los objetos
Cliente asociados.

La composicin (por Valor) se destaca por un rombo relleno.

La agregacin (por Referencia) se destaca por un rombo


transparente.

La flecha en este tipo de relacin indica la navegabilidad del objeto


referenciado. Cuando no existe este tipo de particularidad la flecha se
elimina.
Asociacin:
La relacin entre clases conocida como Asociacin, permite asociar objetos
que colaboran entre s. Cabe destacar que no es una relacin fuerte, es
decir, el tiempo de vida de un objeto no depende del otro.
Ejemplo:

Un cliente puede tener asociadas muchas rdenes de Compra, en cambio


una orden de compra solo puede tener asociado un cliente.

Dependencia o Instanciacin (uso):


Representa un tipo de relacin muy particular, en la que una clase es
instanciada (su instanciacin es dependiente de otro objeto/clase). Se
denota por una flecha punteada.
El uso ms particular de este tipo de relacin es para denotar la
dependencia que tiene una clase de otra, como por ejemplo una aplicacin
grafica que instancia una ventana (la creacin del Objeto Ventana est
condicionado a la instanciacin proveniente desde el objeto Aplicacin):

Cabe destacar que el objeto creado (en este caso la Ventana grfica) no se
almacena dentro del objeto que lo crea (en este caso la Aplicacin).

Casos Particulares:

Clase Abstracta:

Una clase abstracta se denota con el nombre de la clase y de los mtodos con letra
"itlica". Esto indica que la clase definida no puede ser instanciada pues posee mtodos
abstractos (an no han sido definidos, es decir, sin implementacin). La nica forma de
utilizarla es definiendo subclases, que implementan los mtodos abstractos definidos.

Clase parame trizada:

Una clase parame trizada se denota con un subcuadro en el extremo


superior de la clase, en donde se especifican los parmetros que deben ser
pasados a la clase para que esta pueda ser instanciada. El ejemplo ms
tpico es el caso de un Diccionario en donde una llave o palabra tiene

asociado un significado, pero en este caso las llaves y elementos pueden


ser genricos. La genericidad puede venir dada de un Template (como en
el caso de C++) o bien de alguna estructura predefinida (especializacin a
travs de clases).
En el ejemplo no se especificaron los atributos del Diccionario, pues ellos
dependern exclusivamente de la implementacin que se le quiera dar.

Ejemplo:
Supongamos que tenemos un el caso del Diccionario implementado mediante un rbol
binario, en donde cada nodo posee:

key: Variable por la cual se realiza la bsqueda, puede ser genrica.

item: Contenido a almacenar en el diccionario asociado a "key", cuyo tipo tambin


puede ser genrico.

Para este caso particular hemos definido un Diccionario para almacenar String y
Personas, las cuales pueden funcionar como llaves o como tem, solo se mostrarn las
relaciones para la implementacin del Diccionario:

Encapsulaciones
Definicin:
El encapsulamiento habla del modo de ocultar como ha sido
implementado el estado, los atributos, de un objeto. Se accede a este estado a
travs de los mtodos pblicos, es decir su interfaz publica. Una buena prctica
es hacer las validaciones correspondientes a los posibles estados del objeto, en
estos mtodos, de modo tal de mantener al objeto en un estado consistente.
Como se puede observar de los diagramas, las variables del objeto se localizan
en el centro o ncleo del objeto. Los mtodos rodean y esconden el ncleo del
objeto de otros objetos en el programa. Al empaquetamiento de las variables
de un objeto con la proteccin de sus mtodos se le llama encapsulamiento.
Tpicamente, el encapsulamiento es utilizado para esconder detalles de la

puesta en prctica no importantes de otros objetos. Entonces, los detalles de la


puesta en prctica pueden cambiar en cualquier tiempo sin afectar otras partes
del programa.
Tambin se lo llama information hiding. De la misma forma podemos respetar
el encapsulamiento si se tiene, en la clase Auto, un atributo velocidad, que sea
privado, el nico modo de modificar la velocidad es a travs de los mtodo
acelerar() y frenar(), es decir que esta encapsulada la velocidad, y solo se la
puede modificar por los mtodos acelerar() y frenar(), no se puede cambiar la
velocidad de ninguna otra forma.

Mtodos de acceso

Los mtodos de acceso son el medio de acceder a los atributos


privados del objeto. Son mtodos pblicos del objeto.

-El getter: El mtodo para acceder a los atributos en forma de solo


lectura se los denomina getters. Son los mtodos que retornan el valor de los
atributos. El NetBeans, como la mayora de los entornos de desarrollo, permite
generarlos de forma automtica.

-El setter: El mtodo para acceder a los atributos en forma de


escritura se los denomina setters. Son los mtodos que establecen el valor
de los atributos. Tambien se los genera de forma automtica en los entornos de
desarrollo

Modificadores de acceso
MODIFICADORES DE ACCESO JAVA: PUBLIC, PRIVATE, PROTECTED.
Hasta ahora habamos dicho que una subclase no tiene acceso a los campos de
una

superclase

informacin. Sin
restrictivo.

de

acuerdo

embargo,

con

esto

el

podra

principio

deocultacin

considerarse

como

de

la

demasiado

Decimos que podra considerarse demasiado restrictivo porque limita el


acceso a una subclase como si se tratara de una clase cualquiera, cuando en
realidad la relacin de una superclase con una subclase es ms estrecha que
con una clase externa. Por ello en diferentes lenguajes, Java entre ellos, se usa
un nivel de acceso intermedio que no es ni public ni private, sino algo
intermedio que se denomina como acceso protegido, expresado con la
palabra clave protected, que significa que las subclases s pueden tener
acceso al campo o mtodo.
El modificador de acceso protected puede aplicarse a todos los miembros de
una clase, es decir, tanto a campos como a mtodos o constructores. En el
caso de mtodos o constructores protegidos, estos sern visibles/utilizables por
las subclases y otras clases del mismo package. El acceso protegido suele
aplicarse a mtodos o constructores, pero preferiblemente no a campos, para
evitar debilitar el encapsulamiento. En ocasiones puntuales s resulta de inters
declarar campos con acceso protegido.
La sintaxis para emplear esta palabra clave es anloga a la que usamos con las
palabras public y private, con la salvedad de que protected suele usarse
cuando se trabaja con herencia. Desde un objeto de una subclase podremos
acceder o invocar un campo o mtodo declarado como protected, pero no
podemos acceder o invocar a campos o mtodos privados de una superclase.
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 invocacin directa del tipo
interino43.IdProfesor = 54-DY-87.
Java admite una variante ms en cuanto a modificadores de acceso: la omisin
del mismo (no declarar ninguno de los modificadores public, private o
protected). En la siguiente tabla puedes comparar los efectos de usar uno u
otro tipo de declaracin en cuanto a visibilidad de los campos o mtodos:

MODIFICADOR

CLASE

PACKAGE

SUBCLASE

TODOS

public

protected

No

No especificado

No

No

private

No

No

No

Constructor
Un
constructor
es
un mtodo especial
de
una
clase
que
se
llama automticamente siempre que se declara un objeto de esa clase.
La principal misin del constructor es reservar memoria e inicial izar las
variables miembros de la clase.

Funcionamiento del constructor Java

Cuando se crea un objeto en java se realiza las siguientes operaciones de


forma automtica:
Se asigna memoria para el objeto.
Se inicializa los atributos de estos objetos con los valores
predeterminados por el sistema.
Se llama al constructor de la clase que puede ser uno entre varios.

Caractersticas del constructor Java

Debe tener el mismo nombre que la clase a la que pertenece.


En una clase puede haber varios constructores con el mismo nombre y
con distinta cantidad o tipos de argumentos. Es decir permite sobrecarga.
Los constructores no se heredan.
Un constructor no puede devolver ningn valor incluyendo el void.
Un constructor debera declararse publico, para que pueda ser invocado
desde cualquier parte donde se desee crear un objeto de su clase.
Es el primer mtodo que se ejecuta.
Se ejecuta de forma automtica.

Constructor Java por defecto


Si para una clase no se define ningn mtodo constructor se crea uno
automticamente por defecto.El constructor por defecto es un constructor sin
parmetros que no hace nada. Los atributos del objeto son iniciados con los
valores predeterminados por el sistema.
Este tipo de constructor se lo llama como constructor no-args, ya que no recibe
parmetros.

Constructor Java copia


Es un constructor que recibe por parmetro un objeto del mismo tipo de la
clase, asignando atributo por atributo al nuevo objeto generado.
Ejemplos
Constructor Java por default:

Ac vemos una clase con el constructor por defecto es decir sin declarar el
constructor.

La llamada al constructor por default.


Constructor Java sobrecargado:

Se puede apreciar el constructor Persona() y su sobre carga, el constructor


Persona(String nombre).

La llamada al constructor por sobre carga.

Constructor Java Copia

Este constructor recibe por parmetro un objeto del tipo Persona y asigna los
valores de la persona pasada por parmetros a la nueva instancia de la
persona.

Herencia
La herencia es especfica de la programacin orientada a objetos, donde una
clase nueva se crea a partir de una clase existente. La herencia (a la que
habitualmente se denomina subclases) proviene del hecho de que la subclase
(la nueva clase creada) contiene los atributos y mtodos de la clase primaria.
La principal ventaja de la herencia es la capacidad para definir atributos y
mtodos nuevos para la subclase, que luego se aplican a los atributos y
mtodos heredados. Esta particularidad permite crear una estructura
jerrquica de clases cada vez ms especializada. La gran ventaja es que uno ya
no debe comenzar desde cero cuando desea especializar una clase existente.
Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base
que puede especializarse a voluntad (la compaa que vende estas clases
tiende a proteger los datos miembro usando la encapsulacin).

QU ES LA HERENCIA?
Diferentes tipos de objetos suelen tener una cierta cantidad en comn unos
con otros.
Bicicletas de montaa bicicletas de carretera y bicicletas tndem, por ejemplo,
todos comparten las caractersticas de las bicicletas (velocidad actual, la
cadencia actual de pedal, arte actual) .Sin embargo, cada uno define tambin
las caractersticas adicionales que los hacen diferentes: las bicicletas tndem
tiene dos asientos y dos juegos de manillares, las bicicletas de carrera tienen
gota manillar, algunas bicicletas de montaa tienen una anillo de cadena,
dndoles una menor relacin de desmultiplicacin.
La programacin orientada a objetos permite heredar a las clases de uso
comn del Estado y el comportamiento de otras clases. En este ejemplo,
Bicicleta ahora se convierte en la superclase de la Montaera, Carrera y
Tandem. En el lenguaje de programacin Java, cada clase se le permite tener
una superclase directa, y cada superclase tiene el potencial para un nmero
ilimitado de las subclases:

Bicicleta

Montaera

Carrera

Una jerarqua de clases de bicicleta

Tandem

La sintaxis para la creacin de una subclase es simple. Al principio de su


declaracin de clase, el uso de palabras clave extends, seguido por el nombre
de la clase a heredar:

Class bicicleta_de_montaa extends bicicleta {


//Los nuevos campos y mtodos de definicin de una bicicleta de montaa iran
aqu
}

Esto da a la montaera todos los mismos campos y mtodos de bicicleta, pero


permite propio cdigo para centrarse exclusivamente en las caractersticas que
lo hacen nico. Sin embargo, usted debe tener cuidado de documentar
adecuadamente el estado y el comportamiento que casa superclase define, ya
que ese cdigo no aparecer en el archivo fuente de cada subclase.
Supongamos, por ejemplo, que tenemos la clase Jefe y la clase Secretaria
definidas como sigue:

class Jefe {

class Secretaria {

int numEmpleado;

int numEmpleado;

String nombre;

String nombre;

int numDepart;

int numDepart;

int salario;

int salario;

Las partes comunes se pueden agrupar en una misma clase, manteniendo las
otras dos clases con las partes no comunes y heredando de esta nueva clase
con la palabra reservada extends.

Relacin es-un
Para saber si la relacin de herencia es correcta, se plantea la pregunta la
subclase es-una superclase? La respuesta debe ser si el Jefe es-un
Empleado? S

Ventajas

Se ahorra cdigo
Permite reutilizar cdigo extendiendo su funcionalidad

Desventajas

Se ahorra cdigo
Se introduce una fuerte dependencia en la clase hija respecto a la clase
padre
Puede dificultar la reutilizacin 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 jerarqua o clasificacin. Si cambia el criterio de
clasificacin 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.
Los miembros pblicos de la superclase son visibles y siguen siendo
pblicos en la subclase.
Se puede acceder a los miembros de la superclase usando la palabra
reservada super.
Si una clase se declara como final no se puede heredar de ella.
En java, todas las clases heredan implcitamente de la clase Object.

EJEMPLO
import javax.*;
import javax.swing.JOptionPane;
public class Mamifero{
private int patas;

private String nombre;


public void imprimirPatas(){
JOptionPane.showMessageDialog(null," Tiene " + patas + " patas\n",
"Mamifero", JOptionPane.INFORMATION_MESSAGE);
}
public Mamifero(String nombre, int patas){
this.nombre = nombre;
this.patas = patas;
}
}
public class Perro extends Mamifero {
public Perro(String nombre){
super(nombre, 4);
}
}
public class Gato extends Mamifero {
public Gato(String nombre){
super(nombre, 4);
}
}
public class CrearPerro {
public static void main(String[] args) {
Perro perrito = new Perro("Pantaleon");
perrito.imprimirPatas(); /*Est en la clase mamfero*/
}
}

Herencia y creacin

El constructor de la clase hija refina el comportamiento del padre. En Java los


constructores no se heredan. La primera sentencia del constructor de la clase
hija SIEMPRE es una llamada al constructor de la clase padre.
La llamada al constructor del padre puede ser:
Implcita:
Si se omite, se llamar implcitamente al constructor por defecto, equivale a
poner como primera sentencia super();
Si no existe el constructor por defecto en la clase padre dar un error en
tiempo de compilacin.
Explcita:
super(); o super(a,b); o
Dependiendo de si el constructor al que invocamos tiene o no argumentos

ACCESO PROTEGIDO (OCULTACIN DE INFORMACIN)


Una subclase hereda todos los atributos definidos en la superclase, pero no
puede acceder a los campos privados.
Para permitir que en un mtodo de la subclase se pueda acceder a una
caracterstica (atributo/mtodo) de la superclase, ste tiene que declararse
como protected
Es discutible la visibilidad protegida para los atributos
Es til la visibilidad protegida para los mtodos
Protected: caractersticas visibles a las subclases y al resto de clases del
paquete.

De ms restrictivo a menos:
private
Visible slo 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 aade nueva funcionalidad al comportamiento heredado


super
La palabra reservada super se utiliza para invocar a un mtodo de la clase
padre. Se debe utilizar para el refinamiento de mtodos. No se tiene que
utilizar para invocar a mtodos heredados.Se puede utilizar en el cuerpo de
otros mtodos:
Deposito>>getCapital: devuelve el capital fijo
DepositoEstructurado>>getCapital: devuelve el capital fijo + capital variable
En los mtodos de DepositoEstructurado habr que determinar cul de las dos
versiones del mtodo getCapital es la que necesitamos.

Se puede cambiar el nivel de visibilidad, slo


relaja:
Podemos pasar de menos a ms, pero no al contrario.

si

se

El tipo de retorno (regla covariante)


Siempre que el tipo de retorno del mtodo redefinido sea compatible con
el tipo de retorno del mtodo original

Un tipo B es compatible con un tipo A si la clase B es subclase de A


Ejemplo: Jerarqua de Empleado
Empleado >> public Empleado getColega(){}
Jefe >> public Jefe getColega() {}

RESTRINGIR LA HERENCIA
En Java se puede aplicar el modificador final a un mtodo para indicar que no
puede ser redefinido.
Asimismo, el modificador final es aplicable a una clase indicando que no se
puede heredar de ella.
El modificador final va contra el principio abierto-cerrado?

TIPOS DE HERENCIA

POLIMORFISMO
Otro concepto de la POO es el polimorfismo. Un objeto solamente tiene una
forma (la que se le asigna cuando se construye ese objeto) pero la referencia a
objeto es polimrfica porque puede referirse a objetos de diferentes clases (es
decir, la referencia toma mltiples formas). Para que esto sea posible debe
haber una relacin de herencia entre esas clases. 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.
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 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 tambin puede ser una


C tambin puede ser una
D tambin puede ser una
E tambin puede ser una
E tambin puede ser una

Formas de polimorfismo:

Polimorfismo
Polimorfismo
Polimorfismo
Polimorfismo
Polimorfismo

Abstraccin

de asignacin (variables polimorfas)


puro (funcin polimorfa)
ad hoc (sobrecarga)
de inclusin (redefinicin)
paramtrico (genericidad)

Volviendo a la figura anterior de la relacin de herencia entre clases, se puede


pensar en una jerarqua de clase como la definicin de conceptos demasiado
abstractos en lo alto de la jerarqua y esas ideas se convierten en algo ms
concreto conforme se desciende por la cadena de la superclase.
Sin embargo, las clases hijas no estn limitadas al estado y conducta provistos
por sus superclases; pueden agregar variables y mtodos adems de los que
ya heredan de sus clases padres. Las clases hijas pueden, tambin,
sobreescribir los mtodos que heredan por implementaciones especializadas
para esos mtodos. De igual manera, no hay limitacin a un slo nivel de
herencia por lo que se tiene un rbol de herencia en el que se puede heredar
varios niveles hacia abajo y mientras ms niveles descienda una clase, ms
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. A travs del uso de
herencia, los programadores pueden reutilizar el cdigo de la superclase
muchas veces.
Los programadores pueden implementar superclases llamadas clases
abstractas que definen conductas "genricas". Las superclases
abstractas definen, y pueden implementar parcialmente, la conducta
pero gran parte de la clase no est definida ni implementada. Otros
programadores concluirn esos detalles con subclases especializadas.

COMPATIBILIDAD DE TIPOS
Un tipo B es compatible con un tipo A slo si la clase B es descendiente
de la clase A.
DepositoEstructurado es compatible con Deposito
Una asignacin polimrfica es vlida slo si el tipo esttico de la parte
izquierda es compatible con el tipo de la parte derecha.
El paso de parmetros es vlido slo si el tipo del parmetro real es
compatible con el tipo del parmetro formal.

JERARQUA DE CLASES

La herencia organiza las clases en una estructura jerrquica formando


jerarquas de clases

No es tan slo un mecanismo para compartir cdigo

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 (mtodos)
de la clase A
B puede incluir adaptaciones:
B puede aadir nuevos atributos
B puede aadir nuevos mtodos
B puede redefinir mtodos
Las adaptaciones son dependientes del lenguaje

VENTAJAS DE USAR JERARQUA DE CLASES

Se puede reutilizar todas las funcionalidades comunes a mltiples clases


lo incluimos en superclases. La cual se puede acceder a todos los
mtodos y atributos
Se puede realizar cambios en el cdigo, si cambiamos en una
superclase automticamente se ve reflejado en las subclases y en las
subclases de las subclases y as sucesivamente en esta jerarqua,
reciben la informacin de la herencia.
Esto hace que es cdigo sea ms claro.

DISEO DE JERARQUA DE HERENCIA


Generalizacin (Factorizacin)
Se detectan clases con un comportamiento comn
Ejemplo: Libro y Revista son Publicaciones
Especializacin (Abstraccin)
Se detecta que una clase es un caso especial de otra
Ejemplo: Rectngulo es un tipo de Polgono
No hay receta mgica para crear buenas jerarquas
Problemas con la evolucin de la jerarqua

Bibliografa

http://java-white-box.blogspot.pe/2013/12/javaplayer-constructores-enjava-que-es.html
http://puntocomnoesunlenguaje.blogspot.pe/2012/07/normal-0-21-falsefalse-false_103.html
http://aprenderaprogramar.com/index.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.net/archivos/2009/03/30/modificadores-en-java/
http://profesores.fi-b.unam.mx/carlos/java/java_basico3_3.html
http://labojava.blogspot.pe/2012/05/introduccionoopencapsulamiento.html
http://aprenderaprogramar.com/index.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/herencia-en-la-programacion-orientada-a-objetos-ejemplo-enjava/
http://rua.ua.es/dspace/bitstream/10045/15995/1/POO-3-Herencia-10-11.pdf
http://es.slideshare.net/equipo2/poo-herencia-abstraccion-y-polimorfismo?
next_slideshow=1
http://www2.caminos.upm.es/Departamentos/matematicas/Fdistancia/PIE/java/tem
asj/tjava1.pdf
https://sites.google.com/site/programacionbasicajava/herencia
http://www.arrakis.es/~abelp/ApuntesJava/GestionExcepciones.htm
http://profesores.fi-b.unam.mx/carlos/java/indice.html
http://codejavu.blogspot.pe/2013/05/herencia-en-java.html
http://www.cs.buap.mx/~ygalicia/POO.pdf

https://books.google.com.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.com/watch?v=3WNu1vuc-aw

You might also like