Curso:
Programacion orientada a objetos
Profesor: Armando Ricardo Huapaya Sotero
Turno: Noche
Cliclo: 5
Seccion:05 Alumnos: -Perez Campusmana Marcos Migue -Re!uena Caa Caros -"ernandez de Cordo#a Casaretto "ranco $a#ier
Indice Introduccion 1. Diseño de diagramas de clase clase 2. UM UML L . Clas Clases es ! "#$et "#$etos os %. Atri Atri#uto #utos s ! m&todos m&todos '. (nc (nca)sul a)sulaci acion on *. Modi Modi+cad +cadores ores de acceso acceso ,. Cons Construc tructores tores -. era erar/ui r/uias as de Clases Clases 0. er erenc encia ia
i#liogra+a
Indice Introduccion 1. Diseño de diagramas de clase clase 2. UM UML L . Clas Clases es ! "#$et "#$etos os %. Atri Atri#uto #utos s ! m&todos m&todos '. (nc (nca)sul a)sulaci acion on *. Modi Modi+cad +cadores ores de acceso acceso ,. Cons Construc tructores tores -. era erar/ui r/uias as de Clases Clases 0. er erenc encia ia
i#liogra+a
Introduccion 34U5 (S A6A7 C"8C(PT" D( P9"9AMACI;8 "9I(8T "9I(8TADA ADA A "(T"S
Java es un lengua$e de )rogramaci
#os antecedentes antecedentes de Java $a%r&a que %uscarlos %uscarlos en los lenua!es lenua!es de pro prorama ramación ción ' ( ')). *l lenua!e ' fue desarrollado en la d+cada de los 0 ( constitu(e un lenua!e mu( ro%usto usado como n-cleo del sistema operativo ni/. ' no admite la orientación a o%!etos ( est" considerado un len lenua ua!e !e po poco co ami amia% a%le le desde desde el pun punto to de vi vista sta de que su sin sinta/ ta/is, is, elemento elementoss de proramación que emplea 2mane!o directo de memoria3 ( otras cuestiones $acen que sea un lenua!e dif&cil de aprender. ')) fue una evolución de ' desarrollada en los a4os 50. Introdu!o el dise4o orientado a o%!etos, pero manteniendo la compati%ilidad con '. *sto supon&a que ')) permitiera tanto el uso de la proramación estructurada tradicional como la proramación orientada a o%!etos. Adem"s ')) mantuvo ciertas caracter&sticas de ' como el mane!o directo de la memoria, el uso de varia%les lo%ales, sentencia oto, etc. que $icieron que la evolución fuera parcial parcial.. 'omo paso nal en esta evolución tenemos Java, un lenua!e que evoluciona a partir de ' ( ') ), pero que elimina diversos aspectos de estos lenua!es ( se constitu(e en un lenua!e denitivamente orientado a o%!etos. *l romper con distintos aspectos de ')) cu(o mane!o inadecuado por parte de muc$os proramadores da%a luar a pro%lemas en las aplicaciones $a sido un factor decisivo para convertir a Java en un lenua!e popular ( de amplio uso. 7osotros vamos a quedarnos con el lado pr"ctico de lo que $emos comentado respondiendo esta preunta8 3(s necesario sa#er C < C== )ara )rogramar en a>a7 7o, no es necesario. Aunque puede suponer una venta!a para aquellas personas que tenan conocimientos previos en estos lenua!es, no recomendamos de forma e/pl&cita su estudio en profundidad como paso previo al aprendiza!e de Java. De modo orientativo, veamos un esquema so%re la evolución de los lenua!es.
*ste esquema es meramente orientativo8 es imposi%le ree!ar la diversidad de lenua!es ( su evolución en un r"co tan simplicado. :am%i+n los datos relativos a fec$as son orientativos. 7o $a( que suponer que lo -nico v"lido sea la proramación orientada a o%!etos por ser lo m"s moderno. Al contrario, muc$&sima proramación de la que se $ace $o( en d&a se %asa en lenua!es o códio no orientado a o%!etos. Adem"s, la misma proramación orientada a o%!etos se %asa en conceptos mu( antiuos de proramación. :ener en cuenta que alunos lenua!es que nacieron en los a4os 60 $an perdido viencia ( (a no se usan, mientras que otros se $an ido modernizando ( contin-an us"ndose m"s o menos ampliamente, como es el caso de 'o%ol. #o 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 $ace muc$o tiempo en proramación, ( por otro introduce ciertas novedades que lo convierten en un lenua!e moderno. Java es un lenua!e -til para casi todo tipo de pro%lemas. ;odemos citar como funcionalidades de Java varias8 1. A)licaciones ?cliente@ 8 son las que se e!ecutan en un solo ordenador 2por e!emplo el port"til de tu casa3 sin necesidad de conectarse a otra m"quina. ;ueden servirte por e!emplo para realizar c"lculos o estionar datos. <. A)licaciones ?clienteser>idor@ 8 son proramas que necesitan conectarse a otra m"quina 2por e!emplo un servidor de datos3 para pedirle al-n servicio de forma m"s o menos continua, como podr&a ser el uso de una %ase de datos. ;ueden servir por e!emplo para el teletra%a!o8 tra%a!ar desde casa pero conectados a un ordenador de una empresa. =. Podemos Ba#lar tam#i&n de ?a)licaciones e#@ , que son proramas Java que se e!ecutan en un servidor de p"inas >e%. *stas aplicaciones reci%en solicitudes desde un ordenador ( env&an al naveador 2Internet */plorer, ?irefo/, @afari, etc.3 que act-a como su cliente p"inas de respuesta en :B#.
Cstos son sólo alunos e!emplos de todo el potencial que $a( detr"s de Java como lenua!e para aprender ( o%tener muc$os %enecios con su uso. %viamente por determinados t+rminos empleados 2cliente, clienteEservidor, %ase de datos, :B#F3, te dar"s cuenta de que el lenua!e Java tiene muc$a potencialidad, pero tam%i+n de que su conocimiento a fondo requerir&a muc$o tiempo. 7osotros en este curso vamos a estudiar -nicamente los aspectos m"s %"sicos de Java.
Dise4o de diarama 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, métodos y visibilidad.
•
Relaciones: Herencia, Composicin, !gregacin, !sociacin y Uso.
(lementos Diagrama UMLE: •
Clase
"s la unidad básica que encapsula toda la in#ormacin de un $b%eto &un ob%eto es una instancia de una clase'. ! través de ella podemos modelar el entorno en estudio &una Casa, un !uto, una Cuenta Corriente, etc.'. "n U(), una clase es representada por un rectángulo que posee tres divisiones:
"n 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, protected o public'. o
Inferior : Contiene los métodos u operaciones, los cuales son la #orma
como interact*a el ob%eto con su entorno &dependiendo de la visibilidad: private, protected o public'.
"%emplo: Una Cuenta Corriente que posee como caracter+stica: o
alance
-uede realizar las operaciones de: o
epositar
o
/irar
o
y alance
"l dise0o asociado es:
Atri#utos ! M&todos:
o
Atributos:
)os atributos o caracter+sticas de una Clase pueden ser de tres tipos, los que de#inen el grado de comunicacin y visibilidad de ellos con el entorno, estos son:
o
public &1,
': 2ndica que el atributo será visible tanto dentro como #uera de la clase, es decir, es accesible desde todos lados.
private &3,
protected &4,
': 2ndica que el atributo slo será accesible desde dentro de la clase &slo sus métodos lo pueden accesar'. ': 2ndica que el atributo no será accesible desde #uera de la clase, pero si podrá ser accesado por métodos de la clase además de las subclases que se deriven &ver herencia'.
Métodos:
)os métodos u operaciones de una clase son la #orma en como ésta interact*a con su entorno, éstos pueden tener las caracter+sticas:
public &1,
': 2ndica que el método será visible tanto dentro como #uera de la clase, es decir, es accesible desde todos lados.
private &3,
protected &4,
': 2ndica que el método slo será accesible desde dentro de la clase &slo otros métodos de la clase lo pueden accesar'. ': 2ndica que el método no será accesible desde #uera de la clase, pero si podrá ser accesado por métodos de la clase además de métodos de las subclases que se deriven &ver herencia'
9elaciones entre Clases: !hora ya de#inido el concepto de Clase, es necesario e5plicar cmo se pueden interrelacionar dos o más clases &cada uno con caracter+sticas y ob%etivos di#erentes'. !ntes es necesario e5plicar el concepto de cardinalidad de relaciones: "n U(), la cardinalidad de las relaciones indica el grado y nivel de dependencia, se anotan en cada e5tremo de la relacin y éstas pueden ser: o
uno o muchos: 6..7 &6..n'
o
0 o muchos: 8..7 &8..n'
o
número fijo: m &m denota el n*mero'. Herencia (speciali!aci"n#$enerali!aci"n% :
2ndica que una subclase hereda los métodos y atributos especi#icados por una 9uper Clase, por ende la 9ubclase además de poseer sus propios métodos y atributos, poseerá las caracter+sticas y atributos visibles de la 9uper Clase &public y protected', e%emplo:
"n la #igura se especi#ica que !uto y Camin heredan de eh+culo, es decir, !uto posee las Caracter+sticas de eh+culo &-recio, el(a5, etc' además posee algo particular que es escapotable, en cambio Camin también hereda las caracter+sticas de ehiculo &-recio, el(a5, etc' pero posee como particularidad propia !coplado, ;ara y Carga. Cabe destacar que #uera de este entorno, lo *nico
A&re&aci"n :
-ara modelar ob%etos comple%os, n bastan los tipos de datos básicos que proveen los lengua%es: enteros, reales y secuencias de caracteres. Cuando se requiere componer ob%etos que son instancias de clases de#inidas por el desarrollador de la aplicacin, tenemos dos posibilidades:
'or alor : "s un tipo de relacin estática, en donde el tiempo de
vida del ob%eto incluido esta condicionado por el tiempo de vida del que lo incluye. "ste tipo de relacin es com*nmente llamada Composici"n &el $b%eto base se construye a partir del ob%eto incluido, es decir, es
'or )eferencia : "s un tipo de relacin dinámica, en donde el
tiempo de vida del ob%eto incluido es independiente del que lo incluye. "ste tipo de relacin es com*nmente llamada A&re&aci"n &el ob%eto base utiliza al incluido para su #uncionamiento'. Un "%emplo es el siguiente:
"n donde se destaca que:
Un !lmacén posee Clientes y Cuentas &los rombos van en el ob%eto que posee las re#erencias'.
Cuando se destruye el $b%eto !lmacén también son destruidos los ob%etos Cuenta asociados, en cambio no son a#ectados los ob%etos Cliente asociados.
)a composicin &por alor' se destaca por un rombo relleno.
)a agregacin &por Re#erencia' se destaca por un rombo transparente.
)a #lecha en este tipo de relacin indica la navegabilidad del ob%eto re#erenciado. Cuando no e5iste este tipo de particularidad la #lecha se elimina. Asociaci"n :
)a relacin entre clases conocida como !sociacin, permite asociar ob%etos que colaboran entre s+. Cabe destacar que no es una relacin #uerte, es decir, el tiempo de vida de un ob%eto no depende del otro. "%emplo:
Un cliente puede tener asociadas muchas >rdenes de Compra, en cambio una orden de compra solo puede tener asociado un cliente.
*ependencia o Instanciaci"n (uso% :
Representa un tipo de relacin muy particular, en la que una clase es instanciada &su instanciacin es dependiente de otro ob%eto=clase'. 9e denota por una #lecha punteada. "l uso más particular de este tipo de relacin es para denotar la dependencia que tiene una clase de otra, como por e%emplo una aplicacin gra#ica que instancia una ventana &la creacin del $b%eto entana está condicionado a la instanciacin proveniente desde el ob%eto !plicacin':
Cabe destacar que el ob%eto creado &en este caso la entana grá#ica' no se almacena dentro del ob%eto que lo crea &en este caso la !plicacin'.
Casos Particulares:
•
Clase Abstracta:
Una clase abstracta se denota con el nombre de la clase y de los métodos con letra
o
Clase parame tri!ada :
Una clase parame trizada se denota con un subcuadro en el e5tremo superior de la clase, en donde se especi#ican los parámetros que deben ser pasados a la clase para que esta pueda ser instanciada. "l e%emplo más t+pico es el caso de un iccionario en donde una llave o palabra tiene
asociado un signi#icado, pero en este caso las llaves y elementos pueden ser genéricos. )a genericidad puede venir dada de un ;emplate &como en el caso de C11' o bien de alguna estructura prede#inida &especializacin a través de clases'. "n el e%emplo no se especi#icaron los atributos del iccionario, pues ellos dependerán e5clusivamente de la implementacin que se le quiera dar.
jemplo :
9upongamos que tenemos un el caso del iccionario implementado mediante un árbol binario, en donde cada nodo posee: •
•
?ey: ariable por la cual se realiza la b*squeda, puede ser genérica. item: Contenido a almacenar en el diccionario asociado a
-ara este caso particular hemos de#inido un iccionario para almacenar 9tring y -ersonas, las cuales pueden #uncionar como llaves o como +tem, solo se mostrarán las relaciones para la implementacin del iccionario:
*ncapsulaciones De+nici
puesta en pr"ctica no importantes de otros o%!etos. *ntonces, los detalles de la puesta en pr"ctica pueden cam%iar en cualquier tiempo sin afectar otras partes del prorama. :am%i+n se lo llama information $idin. De la misma forma podemos respetar el encapsulamiento si se tiene, en la clase Auto, un atri%uto velocidad, que sea privado, el -nico modo de modicar la velocidad es a trav+s de los m+todo acelerar23 ( frenar23, es decir que esta encapsulada la velocidad, ( solo se la puede modicar por los m+todos acelerar23 ( frenar23, no se puede cam%iar la velocidad de ninuna otra forma.
M&todos de acceso
#os m+todos de acceso son el medio de acceder a los atri%utos privados del o%!eto. @on m+todos p-%licos del o%!eto.
G*l etter8 *l m+todo para acceder a los atri%utos en forma de solo lectura se los denomina etters. @on los m+todos que retornan el valor de los atri%utos. *l 7etHeans, como la ma(or&a de los entornos de desarrollo, permite enerarlos de forma autom"tica.
G*l setter8 *l m+todo para acceder a los atri%utos en forma de escritura se los denomina setters. @on los m+todos que esta%lecen el valor de los atri%utos. :am%ien se los enera de forma autom"tica en los entornos de desarrollo
Bodicadores de acceso M"DIFICAD"9(S D( ACC(S" A6A: PULICG P9I6AT(G P9"T(CT(D.
asta a$ora $a%&amos dic$o que una su%clase no tiene acceso a los campos de una superclase de acuerdo con el principio de ocultaci
Decimos que podr&a considerarse demasiado restrictivo porque limita el acceso a una su%clase como si se tratara de una clase cualquiera, cuando en realidad la relación de una superclase con una su%clase es m"s estrec$a que con una clase e/terna. ;or ello en diferentes lenua!es, Java entre ellos, se usa un nivel de acceso intermedio que no es ni pu%lic ni private, sino alo intermedio que se denomina como acceso proteido, e/presado con la pala%ra clave )rotected, que sinica que las su%clases s& pueden tener acceso al campo o m+todo. *l modicador de acceso protected puede aplicarse a todos los miem%ros de una clase, es decir, tanto a campos como a m+todos o constructores. *n el caso de m+todos o constructores proteidos, estos ser"n visi%lesEutiliza%les por las su%clases ( otras clases del mismo pacae. *l acceso proteido suele aplicarse a m+todos o constructores, pero preferi%lemente no a campos, para evitar de%ilitar el encapsulamiento. *n ocasiones puntuales s& resulta de inter+s declarar campos con acceso proteido. #a sinta/is para emplear esta pala%ra clave es an"loa a la que usamos con las pala%ras pu%lic ( private, con la salvedad de que protected suele usarse cuando se tra%a!a con $erencia. Desde un o%!eto de una su%clase podremos acceder o invocar un campo o m+todo declarado como protected, pero no podemos acceder o invocar a campos o m+todos privados de una superclase. Declara un campo de una clase como protected ( en un test crea un o%!eto de la su%clase ( trata de acceder a ese campo con una invocación directa del tipo interino=.Id;rofesor LGDMG5. Java admite una variante m"s en cuanto a modicadores de acceso8 la omisión del mismo 2no declarar ninuno de los modicadores pu%lic, private o protected3. *n la siuiente ta%la puedes comparar los efectos de usar uno u otro tipo de declaración en cuanto a visi%ilidad de los campos o m+todos8
M"DIFICAD"9
CLAS(
PACHA(
SUCLAS(
T"D"S
)u#lic
@&
@&
@&
@&
)rotected
@&
@&
@&
7o
8o es)eci+cado
@&
@&
7o
7o
)ri>ate
@&
7o
7o
7o
'onstructor n constructor es un m+todo especial de una clase que se llama autom"ticamente siempre que se declara un o%!eto de esa clase. #a principal misión del constructor es reservar memoria e inicial izar las varia%les miem%ros de la clase.
Funcionamiento del constructor a>a
• •
•
'uando se crea un o%!eto en !ava se realiza las siuientes operaciones de forma autom"tica8 @e asina memoria para el o%!eto. @e inicializa los atri%utos de estos o%!etos con los valores predeterminados por el sistema. @e llama al constructor de la clase que puede ser uno entre varios.
Caractersticas del constructor a>a • •
• • •
• •
De%e tener el mismo nom%re que la clase a la que pertenece. *n una clase puede $a%er varios constructores con el mismo nom%re ( con distinta cantidad o tipos de arumentos. *s decir permite so%recara. #os constructores no se $eredan. n constructor no puede devolver nin-n valor inclu(endo el void. n constructor de%er&a declararse pu%lico, para que pueda ser invocado desde cualquier parte donde se desee crear un o%!eto de su clase. *s el primer m+todo que se e!ecuta. @e e!ecuta de forma autom"tica.
Constructor a>a )or defecto @i para una clase no se dene nin-n m+todo constructor se crea uno autom"ticamente por defecto.*l constructor por defecto es un constructor sin par"metros que no $ace nada. #os atri%utos del o%!eto son iniciados con los valores predeterminados por el sistema. *ste tipo de constructor se lo llama como constructor noGars, (a que no reci%e par"metros.
Constructor a>a co)ia *s un constructor que reci%e por par"metro un o%!eto del mismo tipo de la clase, asinando atri%uto por atri%uto al nuevo o%!eto enerado. ($em)los Constructor a>a )or default:
Ac" vemos una clase con el constructor por defecto es decir sin declarar el constructor.
#a llamada al constructor por default. Constructor a>a so#recargado:
@e puede apreciar el constructor ;ersona23 ( su so%re cara, el constructor ;ersona2@trin nom%re3.
#a llamada al constructor por so%re cara. Constructor a>a Co)ia
*ste constructor reci%e por par"metro un o%!eto del tipo ;ersona ( asina los valores de la persona pasada por par"metros a la nueva instancia de la persona.
erencia #a $erencia es espec&ca de la proramación orientada a o%!etos, donde una clase nueva se crea a partir de una clase e/istente. #a $erencia 2a la que $a%itualmente se denomina su%clases3 proviene del $ec$o de que la su%clase 2la nueva clase creada3 contiene los atri%utos ( m+todos de la clase primaria. #a principal venta!a de la $erencia es la capacidad para denir atri%utos ( m+todos nuevos para la su%clase, que lueo se aplican a los atri%utos ( m+todos $eredados. *sta particularidad permite crear una estructura !er"rquica de clases cada vez m"s especializada. #a ran venta!a es que uno (a no de%e comenzar desde cero cuando desea especializar una clase e/istente. 'omo resultado, se pueden adquirir %i%liotecas de clases que ofrecen una %ase que puede especializarse a voluntad 2la compa4&a que vende estas clases tiende a proteer los datos miem%ro usando la encapsulación3.
34U5 (S LA (9(8CIA7 Diferentes tipos de o%!etos suelen tener una cierta cantidad en com-n unos con otros.
Hicicletas de monta4a %icicletas de carretera ( %icicletas t"ndem, por e!emplo, todos comparten las caracter&sticas de las %icicletas 2velocidad actual, la cadencia actual de pedal, arte actual3 .@in em%aro, cada uno dene tam%i+n las caracter&sticas adicionales que los $acen diferentes8 las %icicletas t"ndem tiene dos asientos ( dos !ueos de manillares, las %icicletas de carrera tienen ota manillar, alunas %icicletas de monta4a tienen una anillo de cadena, d"ndoles una menor relación de desmultiplicación. #a proramación orientada a o%!etos permite $eredar a las clases de uso com-n del *stado ( el comportamiento de otras clases. *n este e!emplo, Hicicleta a$ora se convierte en la superclase de la Bonta4era, 'arrera ( :andem. *n el lenua!e de proramación Java, cada clase se le permite tener una superclase directa, ( cada superclase tiene el potencial para un n-mero ilimitado de las su%clases8
Hicicleta
Bonta4era 'arrera
Una $erar/ua de clases de #icicleta
:andem
#a sinta/is para la creación de una su%clase es simple. Al principio de su declaración de clase, el uso de pala%ras clave eJtendsG seuido por el nom%re de la clase a $eredar8
'lass %icicletaNdeNmonta4a eJtends %icicleta O EE#os nuevos campos ( m+todos de denición de una %icicleta de monta4a ir&an aqu& P
*sto da a la monta4era todos los mismos campos ( m+todos de %icicleta, pero permite propio códio para centrarse e/clusivamente en las caracter&sticas que lo $acen -nico. @in em%aro, usted de%e tener cuidado de documentar adecuadamente el estado ( el comportamiento que casa superclase dene, (a que ese códio no aparecer" en el arc$ivo fuente de cada su%clase. @uponamos, por e!emplo, que tenemos la clase Jefe ( la clase @ecretaria denidas como siue8
class Jefe O
class @ecretaria O
int num*mpleadoQ
int num*mpleadoQ
@trin nom%reQ
@trin nom%reQ
int numDepartQ
int numDepartQ
int salarioQ
int salarioQ
P
P
#as partes comunes se pueden arupar en una misma clase, manteniendo las otras dos clases con las partes no comunes ( $eredando de esta nueva clase con la pala%ra reservada e/tends.
9elaci
;ara sa%er si la relación de $erencia es correcta, se plantea la preunta Rla su%clase esGuna superclaseS #a respuesta de%e ser si Rel Jefe esGun *mpleadoS @&
6enta$as • •
@e a$orra códio ;ermite reutilizar códio e/tendiendo su funcionalidad
Des>enta$as • •
•
•
•
@e a$orra códio @e introduce una fuerte dependencia en la clase $i!a respecto a la clase padre ;uede dicultar la reutilización n cam%io en la clase padre puede tener efectos imprevistos en las clases $i!as n o%!eto de una clase $i!a puede tener un comportamiento inconsistente con lo esperado de un o%!eto de la clase padre @e esta%lece una !erarqu&a o clasicación. @i cam%ia el criterio de clasicación puede acarrear muc$as modicaciones
@e indica usando la pala%ra reservada eJtends class ;unto=D e/tends ;unto
6isi#ilidad: •
•
•
• •
#os miem%ros privados de la superclase no son visi%les desde la su%clase. #os miem%ros p-%licos de la superclase son visi%les ( siuen siendo p-%licos en la su%clase. @e puede acceder a los miem%ros de la superclase usando la pala%ra reservada super. @i una clase se declara como nal no se puede $eredar de ella. *n !ava, todas las clases $eredan impl&citamente de la clase %!ect.
((MPL" im)ort $a>aJ.Q im)ort $a>aJ.sing.")tionPaneQ )u#lic class MamiferoO )ri>ate int patasQ
)ri>ate @trin nom%reQ )u#lic void imprimir;atas23O Jption;ane.s$o>BessaeDialo2 null ,T :iene T ) patas ) T patasUnT, TBamiferoT, Jption;ane.I7?VBA:I7NB*@@AW*3Q P )u#lic Bamifero2@trin nom%re, int patas3O tBis.nom%re nom%reQ tBis.patas patasQ P
P )u#lic class Perro eJtends Bamifero O )u#lic ;erro2@trin nom%re3O su)er2nom%re, 3Q P P )u#lic class ato eJtends Bamifero O )u#lic Wato2@trin nom%re3O su)er2nom%re, 3Q P P )u#lic class CrearPerro O )u#lic static void main2@trinXY ars3 O ;erro perrito ne ;erro2T;antaleonT3Q perrito.imprimir;atas23Q %&'st( en a case mam)*ero&% P P
erencia ! creaci
*l constructor de la clase $i!a rena el comportamiento del padre. *n Java los constructores no se $eredan. #a primera sentencia del constructor de la clase $i!a @I*B;V* es una llamada al constructor de la clase padre. #a llamada al constructor del padre puede ser8 Impl&cita8 @i se omite, se llamar" impl&citamente al constructor por defecto, equivale a poner como primera sentencia super23Q @i no e/iste el constructor por defecto en la clase padre dar" un error en tiempo de compilación. */pl&cita8 super23Q o super2a,%3Q o F Dependiendo de si el constructor al que invocamos tiene o no arumentos
ACC(S" P9"T(ID" "CULTACI;8 D( I8F"9MACI;8E
na su%clase $ereda todos los atri%utos denidos en la superclase, pero no puede acceder a los campos privados. ;ara permitir que en un m+todo de la su%clase se pueda acceder a una caracter&stica 2atri%utoEm+todo3 de la superclase, +ste tiene que declararse como )rotected
*s discuti%le la visi%ilidad proteida para los atri%utos *s -til la visi%ilidad proteida para los m+todos
Protected8 caracter&sticas visi%les a las su%clases ( al resto de clases del paquete.
De m"s restrictivo a menos8
private Zisi%le sólo en la clase donde se dene
@in modicador 2por defecto3 Zisi%le a las clases del paquete
protected Zisi%le a las su%clases ( al resto de clases del paquete
pu%lic Zisi%le a todas las clases
9(FI8AMI(8T": @e a4ade nueva funcionalidad al comportamiento $eredado su)er
#a pala%ra reservada super se utiliza para invocar a un m+todo de la clase padre. @e de%e utilizar para el renamiento de m+todos. 7o se tiene que utilizar para invocar a m+todos $eredados.@e puede utilizar en el cuerpo de otros m+todos8 Deposito[[et'apital8 devuelve el capital !o Deposito*structurado[[et'apital8 devuelve el capital !o ) capital varia%le *n los m+todos de Deposito*structurado $a%r" que determinar cu"l de las dos versiones del m+todo et'apital es la que necesitamos.
@e puede cam%iar el nivel de visi%ilidad, sólo rela!a8 ;odemos pasar de menos a m"s, pero no al contrario.
si
se
*l tipo de retorno 2rela covariante3 @iempre que el tipo de retorno del m+todo redenido sea compati%le con el tipo de retorno del m+todo oriinal
n tipo H es compati%le con un tipo A si la clase H es su%clase de A *!emplo8 Jerarqu&a de *mpleado *mpleado [[ pu%lic *mpleado et'olea23OFP Jefe [[ pu%lic Jefe et'olea23 OFP
9(ST9I8I9 LA (9(8CIA
*n Java se puede aplicar el modicador nal a un m+todo para indicar que no puede ser redenido. Asimismo, el modicador nal es aplica%le a una clase indicando que no se puede $eredar de ella. R*l modicador nal va contra el principio a%iertoGcerradoS
TIP"S D( (9(8CIA
P"LIM"9FISM"
tro concepto de la ; es el polimorsmo. n o%!eto solamente tiene una forma 2la que se le asina cuando se constru(e ese o%!eto3 pero la referencia a o%!eto es poim+r,ca porque puede referirse a o%!etos de diferentes clases 2es decir, la referencia toma m-ltiples formas3. ;ara que esto sea posi%le de#e Ba#er una relaci
na referencia a un o%!eto de la clase H tam%i+n puede ser una referencia a un o%!eto de la clase A. na referencia a un o%!eto de la clase ' tam%i+n puede ser una referencia a un o%!eto de la clase A. na referencia a un o%!eto de la clase D tam%i+n puede ser una referencia a un o%!eto de la clase A. na referencia a un o%!eto de la clase * tam%i+n puede ser una referencia a un o%!eto de la clase D. na referencia a un o%!eto de la clase * tam%i+n puede ser una referencia a un o%!eto de la clase A
?ormas de polimorsmo8
;olimorsmo de asinación 2varia%les polimorfas3 ;olimorsmo puro 2función polimorfa3 ;olimorsmo ad $oc 2so%recara3 ;olimorsmo de inclusión 2redenición3 ;olimorsmo param+trico 2enericidad3
A#stracci
Zolviendo a la ura anterior de la relación de $erencia entre clases, se puede pensar en una !erarqu&a de clase como la denición de conceptos demasiado a%stractos en lo alto de la !erarqu&a ( esas ideas se convierten en alo m"s concreto conforme se desciende por la cadena de la superclase. @in em%aro, las clases $i!as no est"n limitadas al estado ( conducta provistos por sus superclasesQ pueden arear varia%les ( m+todos adem"s de los que (a $eredan de sus clases padres. #as clases $i!as pueden, tam%i+n, so%reescri%ir los m+todos que $eredan por implementaciones especializadas para esos m+todos. De iual manera, no $a( limitación a un sólo nivel de $erencia por lo que se tiene un "r%ol de $erencia en el que se puede $eredar varios niveles $acia a%a!o ( mientras m"s niveles descienda una clase, m"s especializada ser" su conducta. #a $erencia presenta los siuientes %enecios8 •
•
#as su%clases proveen conductas especializadas so%re la %ase de elementos comunes provistos por la superclase. A trav+s del uso de $erencia, los proramadores pueden reutilizar el códio de la superclase muc$as veces. #os proramadores pueden implementar superclases llamadas clases a%stractas que denen conductas Ten+ricasT. #as superclases a%stractas denen, ( pueden implementar parcialmente, la conducta pero ran parte de la clase no est" denida ni implementada. tros proramadores concluir"n esos detalles con su%clases especializadas.
C"MPATIILIDAD D( TIP"S
n tipo H es compati%le con un tipo A sólo si la clase H es descendiente de la clase A. Deposito*structurado es compati%le con Deposito na asinación polimórca es v"lida sólo si el tipo est"tico de la parte izquierda es compati%le con el tipo de la parte derec$a. *l paso de par"metros es v"lido sólo si el tipo del par"metro real es compati%le con el tipo del par"metro formal.
(9A94UA D( CLAS(S
#a $erencia oraniza las clases en una estructura !er"rquica formando $erar/uas de clases
7o es tan sólo un mecanismo para compartir códio • •
•
'onsistente con el sistema de tipos del lenua!e @i una clase H $ereda de otra clase A entonces8 H incorpora la estructura 2atri%utos3 ( comportamiento 2m+todos3 de la clase A H puede incluir adaptaciones8 H puede a4adir nuevos atri%utos H puede a4adir nuevos m+todos H puede redenir m+todos #as adaptaciones son dependientes del lenua!e
6(8TAAS D( USA9 (9A94UA D( CLAS(S
@e puede reutilizar todas las funcionalidades comunes a m-ltiples clases lo incluimos en superclases. #a cual se puede acceder a todos los m+todos ( atri%utos @e puede realizar cam%ios en el códio, si cam%iamos en una superclase autom"ticamente se ve ree!ado en las su%clases ( en las su%clases de las su%clases ( as& sucesivamente en esta !erarqu&a, reci%en la información de la $erencia. *sto $ace que es códio sea m"s claro.
DIS(N" D( (9A94UA D( (9(8CIA eneraliOaci
@e detectan clases con un comportamiento com-n *!emplo8 #i%ro ( Vevista son ;u%licaciones (s)ecialiOaci
@e detecta que una clase es un caso especial de otra *!emplo8 Vect"nulo es un tipo de ;ol&ono 7o $a( receta m"ica para crear %uenas !erarqu&as ;ro%lemas con la evolución de la !erarqu&a
Hi%lioraf&a •
•
•
• • •
•
•
• •
•
• • • • •
$ttp8EE!avaG>$iteG%o/.%lospot.peE<01=E1
article\id66L8pu%licGprivateG(GprotectedG !avatiposGdeGmodicadoresGdeGaccesoGvisi%ilidadGenGclasesGsu%clasesG cu0069=%\catid658cursoGaprenderGproramacionG!avaGdesdeG cero\Itemid155 $ttp8EEmundoee.netEarc$ivosE<009E0=E=0EmodicadoresGenG!avaE $ttp8EEprofesores.G%.unam.m/EcarlosE!avaE!avaN%asico=N=.$tml $ttp8EEla%o!ava.%lospot.peE<01article\id=658iqueGesG!avaGconceptoGdeG proramacionGorientadaGaGo%!etosGvsGproramacionGestructuradaG cu0060=%\catid658cursoGaprenderGproramacionG!avaGdesdeG cero\Itemid155 http:==%arroba.com=herencia3en3la3programacion3orientada3a3ob%etos3e%emplo3en3 %ava= http:==rua.ua.es=dspace=bitstream=688@A=6ABBA=6=-$$33Herencia368366.pd# http:==es.slideshare.net=equipoD=poo3herencia3abstraccion3y3polimor#ismoE ne5tFslideshoG6 http:==GGGD.caminos.upm.es=epartamentos=matematicas=Idistancia=-2"=%ava=tem as%=t%ava6.pd# https:==sites.google.com=site=programacionbasica%ava=herencia http:==GGG.arra?is.es=Jabelp=!puntesKava=/estion"5cepciones.htm http:==pro#esores.#i3b.unam.m5=carlos=%ava=indice.html http:==code%avu.blogspot.pe=D86=8A=herencia3en3%ava.html http:==GGG.cs.buap.m5=Jygalicia=-$$.pd#