Sunteți pe pagina 1din 10

Repblica Bolivariana de Venezuela

Ministerio del Poder Popular Para la Educacin Universitaria


Misin Sucre
Aldea Gran Mariscal de Ayacuco!
"u#an$ Edo% Sucre
Programacin Orientada a Objetos
Realizado por:
Vicente Astudillo
"%&%' ()**+,*-
E.lys Alvarez
"%&%' /00*)112
3o#ileidys 3el.ado
/*,21(1-
&n4or#$tica
Seccin U
Cuman, mayo de 201
!acilitador:
5uis 6rte.a
"ntroduccin
5a pro.ra#acin orientada a ob7etos8 a to#ado las #e7ores ideas de la pro.ra#acin estructurada
y los a co#binado con varios conceptos nuevos y potentes 9ue incitan a conte#plar las tareas de
pro.ra#acin desde un nuevo punto de vista% 5a pro.ra#acin orientada a ob7etos8 per#ite
desco#poner #as 4$cil#ente un proble#a en sub.rupos de partes relacionadas del proble#a% Entonces8
utilizando el len.ua7e se pueden traducir estos sub.rupos a unidades autocontenidas lla#adas ob7etos%
El t:r#ino Pro.ra#acin 6rientada a 6b7etos ;P66<8 oy en d=a a#plia#ente utilizado8 es di4=cil
de de4inir8 ya 9ue no es un concepto nuevo8 sino 9ue a sido el desarrollo de t:cnicas de pro.ra#acin
desde principios de la d:cada de los setenta8 aun9ue sea en la d:cada de los noventa cuando a
au#entado su di4usin8 uso y popularidad% >o obstante8 se puede de4inir P66 co#o una t:cnica o
estilo de pro.ra#acin 9ue utiliza ob7etos co#o blo9ue esencial de construccin%
Un ob7eto es una unidad 9ue contiene datos y las 4unciones 9ue operan sobre esos datos% A los
ele#entos de un ob7eto se les conoce co#o #ie#bros? las 4unciones 9ue operan sobre los ob7etos se
deno#inan #:todos y los datos se deno#inan #ie#bros datos%
#esarrollo
Constructor es una subrutina cuya #isin es inicializar un ob7eto de una clase% En el constructor se
asi.nan los valores iniciales del nuevo ob7eto%
Se utiliza para crear tablas de clases virtuales y poder as= desarrollar el poli#or4is#o8 una de las
erra#ientas de la pro.ra#acin orientada a ob7etos% Al utilizar un constructor8 el co#pilador
deter#ina cual de los ob7etos va a responder al #ensa7e ;virtual< 9ue e#os creado% @iene un tipo de
acceso8 un no#bre y un par:ntesis%
#estructor en pro.ra#acin orientada a ob7etos es una 4uncin #ie#bro especial lla#adas
auto#$tica#ente en la e7ecucin del pro.ra#a8 y por tanto no tienen por 9u: ser lla#adas
eApl=cita#ente por el pro.ra#ador% Sus principales co#etidos son'
liberar los recursos co#putacionales 9ue el ob7eto de dica clase aya ad9uirido en su tie#po
de e7ecucin al eApirar :ste%
9uitar los v=nculos 9ue pudiesen tener otros recursos u ob7etos con :ste%
5os destructores son invocados auto#$tica#ente al alcanzar el 4lu7o del pro.ra#a el 4in del $#bito en
el 9ue est$ declarado el ob7eto%
$obrecarga: se re4iere a la posibilidad de tener dos o #$s 4unciones con el #is#o no#bre pero
4uncionalidad di4erente% Es decir8 dos o #$s 4unciones con el #is#o no#bre realizan acciones
di4erentes% El co#pilador usar$ una u otra dependiendo de los par$#etros usados% A esto se lla#a
ta#bi:n sobrecar.a de 4unciones%
$obrecarga de %unciones: una 4or#a con la 9ue "BB consi.ue el poli#or4is#o es
#ediante la utilizacin de la sobrecar.a de 4unciones % En "BB8 dos o #as 4unciones pueden co#partir
el #is#o no#bre sie#pre 9ue la declaracin de sus par$#etros sea di4erente% En esta situacin 8las
4unciones 9ue co#parten el #is#o no#bre se dice 9ue est$n sobrecar.adas %Por e7e#plo8consid:rese el
si.uiente pro.ra#a'
#include<iostream.h>

//cuadrado se sobrecarga de tres formas
int cuadrado(int i);
double cuadrado(double d);
long cuadrado(long l);

int main()
{
cout<<cuadrado(10)<<"\n";
cout<<cuadrado(11.0)<<"\n";
cout<<cuadrado(!)<<"\n";
return 0;
"
int cuadrado(int i)
{
cout<<"#e encuentra dentro de la funcion cuadrado() $ue utili%a ";
cout<<"&n argumento entero.\n";

return i'i;
"
double cuadrado(double d)
{
cout<<"#e encuentra dentro de la funcion cuadrado()$ue utili%a";
cout<<"un argumento double.\n";

return d'd;
"
long cuadrado(long l)
{
cout<<"#e encuentra dentro de la funcion cuadrado() $ue utili%a";
cout<<"un argumento long.\n";

return 1'1;
"
El pro.ra#a anterior crea tres 4unciones si#ilares 8pero distintas8deno#inadas cuadrado&'8cada una de
las cuales devuelve el cuadrado del valor 9ue se le pasa co#o ar.u#ento% "o#o #uestra el pro.ra#a8el
co#pilador sabe 9ue la 4uncin 9ue debe utilizar en cada caso dependiendo del tipo del ar.u#ento 9ue
se le pasa% 5a i#portancia de las 4unciones sobrecar.adas es 9ue per#iten acceder #ediante un no#bre
co#n a un con7unto de 4unciones relacionadas% En este sentido 8la sobrecar.a de 4unciones per#ite
crear un no#bre .en:rico para una operacin ? el co#pilador se encar.a de decidir la 4uncin 9ue se
necesita real#ente para realizar la operacin%
$obrecarga de operadores: otra 4or#a de conse.uir el poli#or4is#o en "BB es
#ediante la sobrecar.a de operadores% Por e7e#plo 8en "BB se pueden utilizar los operadores CC y DD
para realizar operaciones de EES a trav:s del ter#inal% Esto es posible puesto 9ue estos operadores estan
sobrecar.ados en el arcivo de cabecera iostrea#%% "uando un operador se sobrecar.a8ad9uiere un
si.ni4icado adicional relativo a una deter#inada clase% >o obstante8si.ue #anteniendo todos sus
si.ni4icados anteriores%
En .eneral 8se pueden sobrecar.ad operadores de "BB de4iniendo lo 9ue si.ni4ican para una clase
espec(4ica% &#a.in)#onos por e7e#plo 9ue tene#os una clase cola8bien es posible sobrecar.ar el
operador B para los ob7etos de tipo cola de 4or#a 9ue se aFada el contenido de una cola en otra%Sin
e#bar.o8el operador B #antiene su si.ni4icado ori.inal con respecto a los otros tipos de datos%
*erencia' Es una propiedad 9ue per#ite 9ue los ob7etos sean creados a partir de otros ya eAistentes8
obteniendo caracter=sticas ;#:todos y atributos< si#ilares a los ya eAistentes% Es la relacin entre una
clase .eneral y otra clase #as especi4ica% Es un #ecanis#o 9ue nos per#ite crear clases derivadas a
partir de clase base8 >os per#ite co#partir auto#$tica#ente #:todos y datos entre clases subclases y
ob7etos% Por e7e#plo' Si declara#os una clase p$rra4o derivada de un clase teAto todos los #:todos y
variables asociadas con la clase teAto son auto#$tica#ente eredados por la subclase p$rra4o%
Polimor%ismo' Si.ni4ica 9ue un no#bre se puede utilizar para especi4icar una clase .en:rica de
acciones%
Clase abstracta'
Gay ocasiones8 cuando se desarrolla una 7erar9u=a de clases en 9ue al.n co#porta#iento est$ presente
en todas ellas pero se #aterializa de 4or#a distinta para cada una% Por e7e#plo8 pense#os en una
estructura de clases para #anipular 4i.uras .eo#:tricas% Podr=a#os pensar en tener una clase .en:rica8
9ue podr=a lla#arse Hi.uraGeo#etrica y una serie de clases 9ue eAtienden a la anterior 9ue podr=an ser
"irculo8 Poli.ono8 etc% Podr=a aber un #:todo dibu7ar dado 9ue sobre todas las 4i.uras puede llevarse
a cabo esta accin8 pero las operaciones concretas para llevarla a cabo dependen del tipo de 4i.ura en
concreto ;de su clase<% Por otra parte la accin dibu7ar no tiene sentido para la clase .en:rica Hi.ura
Geo#etrica8 por9ue esta clase representa una abstraccin del con7unto de 4i.uras posibles%
Para resolver esta proble#$tica Iava proporciona las clases y #:todos abstractos% Un #:todo abstracto
es un #:todo declarado en una clase para el cual esa clase no proporciona la i#ple#entacin ;el
cdi.o<% Una clase abstracta es una clase 9ue tiene al #enos un #:todo abstracto% Una clase 9ue
eAtiende a una clase abstracta debe i#ple#entar los #:todos abstractos ;escribir el cdi.o< o bien
volverlos a declarar co#o abstractos8 con lo 9ue ella #is#a se convierte ta#bi:n en clase abstracta
$ubclases deri+adas'
&ncre#enta#os la 4uncionalidad de la clase Ventana de4iniendo una clase
derivada deno#inada VentanaTitulo% 5os ob7etos de dica clase tendr$n
todas las caracter=sticas de los ob7etos de la clase base8 pero ade#$s tendr$n
un t=tulo8 y se podran desplazar ;se si#ula el desplaza#iento de una
ventana con el ratn<%

5a clase derivada eredar$ los #ie#bros dato de la clase base y las 4unciones #ie#bro8 y tendr$ un
#ie#bro dato #$s8 el t=tulo de la ventana%
(ublic class )entana*itulo extends )entana{
(rotected #tring titulo;
(ublic )entana*itulo(int +, int -, int ., int h, #tring nombre) {
su(er(+, -, ., h);
titulo/nombre;
"
e,tends es la palabra reservada 9ue indica 9ue la clase VentanaTitulo deriva8 o es una subclase8 de la
clase Ventana%
5a pri#era sentencia del constructor de la clase derivada es una lla#ada al constructor de la clase base
#ediante la palabra reservada super% 5a lla#ada
su(er(+, -, ., h);
inicializa los cuatro #ie#bros dato de la clase base Ventana' x8 y8 ancho8 alto% A continuacin8 se
inicializa los #ie#bros dato de la clase derivada8 y se realizan las tareas de inicializacin 9ue sean
necesarias% Si no se lla#a eApl=cita#ente al constructor de la clase base Iava lo realiza por nosotros8
lla#ando al constructor por de4ecto si eAiste%
5a 4uncin #ie#bro deno#inada desplazar ca#bia la posicin de la ventana8 aFadi:ndoles el
desplaza#iento%
(ublic 0oid des(la%ar(int d+, int d-){
+1/d+;
-1/d-;
"
Rede4ine la 4uncin #ie#bro mostrar para #ostrar una ventana con un t=tulo%
(ublic 0oid mostrar(){
su(er.mostrar();
#-stem.out.(rintln("titulo 2 "1titulo);
"
En la clase derivada se de4ine una 4uncin 9ue tiene el #is#o no#bre y los #is#os par$#etros 9ue la
de la clase base% Se dice 9ue rede4ini#os la 4uncin mostrar en la clase derivada% 5a 4uncin #ie#bro
mostrar de la clase derivada VentanaTitulo ace una lla#ada a la 4uncin mostrar de la clase base
Ventana8 #ediante
su(er.mostrar();
3e este #odo aproveca#os el cdi.o ya escrito8 y le aFadi#os el cdi.o 9ue describe la nueva
4uncionalidad de la ventana por e7e#plo8 9ue #uestre el t=tulo%
Si nos olvida#os de poner la palabra reservada super lla#ando a la 4uncin mostrar8 tendr=a#os una
4uncin recursiva% 5a 4uncin mostrar lla#ar=a a mostrar inde4inida#ente%
(ublic 0oid mostrar(){ //3o4o5, funci6n recursi0a
#-stem.out.(rintln("titulo 2 "1titulo);
mostrar();
"
5a de4inicin de la clase derivada VentanaTitulo8 ser$ la si.uiente%
(ac7age 0entana;
(ublic class )entana*itulo e+tends )entana{
(rotected #tring titulo;
(ublic )entana*itulo(int +, int -, int ., int h, #tring nombre) {
su(er(+, -, ., h);
titulo/nombre;
"
(ublic 0oid mostrar(){
su(er.mostrar();
#-stem.out.(rintln("titulo 2 "1titulo);
"
(ublic 0oid des(la%ar(int d+, int d-){
+1/d+;
-1/d-;
"
"

Objetos de la clase deri+ada
"rea#os un ob7eto ventana de la clase derivada VentanaTitulo
)entana*itulo 0entana/ne. )entana*itulo(0, 0, 80, 90, ":rinci(al");
Mostra#os la ventana con su t=tulo8 lla#ando a la 4uncin mostrar8 rede4inida en la clase derivada
0entana.mostrar();
3esde el ob7eto ventana de la clase derivada lla#a#os a las 4unciones #ie#bro de4inidas en dica
clase
0entana.des(la%ar(;, 9);
3esde el ob7eto ventana de la clase derivada pode#os lla#ar a las 4unciones #ie#bro de4inidas en la
clase base%
0entana.cambiar<imensiones(10, =>);
Para #ostrar la nueva ventana desplazada y ca#biada de ta#aFo escribi#os
0entana.mostrar();
-ncapsulacin' Es una t:cnica 9ue per#ite localizar y ocultar los detalles de un ob7eto% 5a
encapsulacin previene 9ue un ob7eto sea #anipulado por operaciones distintas de las de4inidas% 5a
encapsulacin es co#o una ca7a ne.ra 9ue esconde los datos y sola#ente per#ite acceder a ellos de
4or#a controlada%
5as principales razones t:cnicas para la utilizacin de la encapsulacin son'
(< Mantener a salvo los detalles de representacin8 si sola#ente nos interesa el
co#porta#iento del ob7eto%
/< Modi4icar y a7ustar la representacin a #e7ores soluciones al.or=t#icas o a nuevas
tecnolo.=as de so4tJare%
Reutilizacin de cdigo se re4iere al co#porta#iento y a las t:cnicas 9ue .arantizan 9ue una parte o la
totalidad de un pro.ra#a in4or#$tico eAistente se pueda e#plear en la construccin de otro pro.ra#a%
3e esta 4or#a se aproveca el traba7o anterior8 se econo#iza tie#po8 y se reduce la redundancia%
5a #anera #$s 4$cil de reutilizar cdi.o es copiarlo total o parcial#ente desde el pro.ra#a anti.uo al
pro.ra#a en desarrollo% Pero es traba7oso #antener #ltiples copias del #is#o cdi.o8 por lo 9ue en
.eneral se eli#ina la redundancia de7ando el cdi.o reusable en un nico lu.ar8 y lla#$ndolo desde los
di4erentes pro.ra#as% Este proceso se conoce co#o abstraccin% 5a abstraccin puede verse clara#ente
en las bibliotecas de so4tJare8 en las 9ue se a.rupan varias operaciones co#unes a cierto do#inio para
4acilitar el desarrollo de pro.ra#as nuevos% Gay bibliotecas para convertir in4or#acin entre di4erentes
4or#atos conocidos8 acceder a dispositivos de al#acena#iento eAternos8 proporcionar una inter4az con
otros pro.ra#as8 #anipular in4or#acin de #anera conocida ;co#o n#eros8 4ecas8 o cadenas de
teAto<%
Para 9ue el cdi.o eAistente se pueda reutilizar8 debe de4inir al.una 4or#a de co#unicacin o inter4az%
Esto se puede dar por lla#adas a una subrutina8 a un ob7eto8 o a una clase%
"o#o se a co#entado anterior#ente la clase descendiente puede aFadir sus propios atributos y
#:todos pero ta#bi:n puede sustituir u ocultar los eredados% En concreto'
(% Se puede declarar un nuevo atributo con el #is#o identi4icador 9ue uno eredado8 9uedando este
atributo oculto% Esta t:cnica no es reco#endable%
/% Se puede declarar un nuevo m)todo de instancia con la #is#a cabecera 9ue el de la clase
ascendiente8 lo 9ue supone su sobreescritura% Por lo tanto8 la sobreescritura o rede4inicin consiste en
9ue #:todos adicionales declarados en la clase descendiente con el #is#o no#bre8 tipo de dato
devuelto y n#ero y tipo de par$#etros sustituyen a los eredados%
0% Se puede declarar un nuevo m)todo de clase con la #is#a cabecera 9ue el de la clase ascendiente8
lo 9ue ace 9ue :ste 9uede oculto% Por lo tanto8 los #:todos de clase o est$ticos ;declarados co#o
static< no pueden ser rede4inidos%
*% Un #:todo declarado con el #odi4icador 4inal ta#poco puede ser rede4inido por una clase derivada%
+% Se puede declarar un constructor de la subclase 9ue lla#e al de la superclase de 4or#a i#pl=cita o
de #ediante la palabra reservada super%
,% En .eneral puede accederse a los #:todos de la clase ascendiente 9ue an sido rede4inidos
e#pleando la palabra reservada super delante del identi4icador del #:todo% Este #ecanis#o slo
per#ite acceder al #etodo perteneciente a la clase en el nivel in#ediata#ente superior de la 7erar9u=a
de clases%
"onstruya#os la clase @aAista%7ava con el si.uiente cdi.o'
public class @aAista eAtends Persona K
private int n5icencia?
public void set>5icencia;int nu#<K
n5icencia L nu#?
M
public int .et5icencia;<K
return n5icencia?
M
M
N construya#os Arran9ue@aAista%7ava'
public class Arran9ue@aAista K
public static void #ain ;Strin. ar.OP<K
@aAista taA( L neJ @aAista;<?
taA(%set>o#bre;Q5uisQ<?
taA(%setEdad;+1<?
Syste#%out%println; taA(%.et>o#bre;<<?
Syste#%out%println;taA(%.etEdad;<<?
M
M
Aora intente#os usar el constructor 9ue eAist=a en la clase Persona 9ue recibia el no#bre de la
persona y va#os a usarlo para la clase @aAista% Para ello construya#os la clase Arran9ue@aAista/%7ava'
public class Arran9ue@aAista/ K
public static void #ain ;Strin. ar.OP<K
@aAista taA( L neJ @aAista;QIoseQ<?
taA(%setEdad;+1<?
Syste#%out%println; taA(%.et>o#bre;<<?
Syste#%out%println;taA(%.etEdad;<<?
Syste#%out%println;taA(%.et>5icencia;<<?
M
M
Se .enera un error de co#pilacin8 debido a 9ue los constructores no se eredan8 sino 9ue ay 9ue
de4inir nuestros propios constructores% A.re.ue#os en la clase @aAista los si.uientes constructores'
public @aAista;int licencia<K
super;<?
n5icencia L licencia?
M
public @aAista;Strin. no#bre8int licencia<K
super;no#bre<?
n5icencia L licencia?
M
Aora si podre#os co#pilar y e7ecutar la clase Arran9ue@aAista/% 5a lla#ada al #:todo super indica
9ue esta#os lla#ando a un constructor de la clase base ;pense#os 9ue un @aAista antes 9ue @aAista es
Persona y por tanto tiene sentido lla#ar al constructor de Persona antes 9ue al de @aAista<% Ade#$s
.racias al n#ero de par$#etros de la lla#ada a super pode#os especi4icar cu$l de los constructores de
la clase base 9uere#os lla#ar%
En 7ava se pueden e#plear dos palabras clave' tis y super% "o#o vi#os en la unidad (8 tis ace
alusin a todo el ob7eto y super ace alusin a la parte eredada8 por ello e#plea#os super para
re4erenciar al constructor de la clase base%
Aora va#os a a.re.ar la 4uncin .et>o#bre dentro de la clase @aAista8 es decir8 tene#os la #is#a
4uncin en Persona y en @aAista'
public Strin. .et>o#bre;< K
return QSoy un taAista y #e lla#o' Q B super%.et>o#bre;<?
M
"o#pila#os @aAista y e7ecuta#os Arran9ue@aAista/% Vere#os 9ue el #ensa7e 9ue aparece en pantalla
de#uestra 9ue la 4uncin .et>o#bre lla#ada es la de del tipo real del ob7eto construido8 en este caso la
de la clase derivada 9ue es @aAista%
@a#bien aprecia#os 9ue para acceder al atributo no#bre es necesario acceder al #:todo .et>o#bre de
la clase base ;y por ello e#plear super<%
En 7ava los atributos y #:todos de la clase base pueden ca#biar su #odi4icador de visibilidad dentro
de la clase derivada8 la si.uiente tabla reco.e dicos ca#bios'
Modi4icadores en la clase base'
public
private
protected
pa9uete
En la clase derivada se trans4or#an en'
public
inaccesible
protected
pa9uete
&naccesible si.ni4ica 9ue8 a pesar de aber sido eredado8 no ay per#isos en la clase derivada para
poder acceder a dico ele#ento inaccesible8 pero an as=8 se pueden lla#ar a #:todos de la clase base
9ue si pueden acceder y #odi4icar al ele#ento%
Recorde#os 9ue protected si.ni4ica 9ue es private8 pero 9ue al eredar no se ace inaccesible8 es decir
9ue desde la clase derivada se puede acceder%
.ibliogra%(a

S-ar putea să vă placă și