You are on page 1of 6

El operador de envo

Parapodermandarmensajesalosobjetos,necesitamosunoperador,aestele llamamosel operadorde envo.Cadalenguajepuedetenerelsuyo,peroesfrecuentequeseutilicenlosdospuntos(':')oel punto('.')(enC++ y JAVAeselpuntosimple). As,siqueremosenviarleelmensaje Caminaralobjeto Juandelaclasehombre,escribiramoslo siguiente. hmrJuan.Caminar() +-++--++-------+ +----Mensaje.Invocaelmtododeigualnombre1. +---------Operadordeenvo2. +------------ObjetodelaclasehombrehmrJuan. +---------------Elprefijohombredenotasuclase. 1.EnalgunoslenguajesOOPsepuedehacerqueunmensajeinvoqueunmtodoconnombredistinto. 2.Comohemoscomentado,cadalenguajepuedeutilizarsupropio operadordeenvo. Eloperadordeenvohacequeseejecutelaporcindelcdigoagrupadabajoelnombredelmtodo,y el mtodotrabajarconlosdatospropiosdelainstanciadelaclasealaqueserefiera. Siguiendo elejemplodelosmarcosexpuestos enanteriormente, supongamos quetenemoslasdos instanciassiguientedelaclaseMarco(marco1ymarco2): Valores marco1 7,5 22,12 Verde Doble marco2 14,50 20,60 Verde Simple

DatosdelaclaseMarco Coordenadasuperiorizquierda Coordenadainferiorderecha Colordelalnea Tipodelneadelrecuadro

CuandoseinvocaelmtodoMostrar()delaclaseMarco:
marco1.Mostrar(); marco2.Mostrar();

Elmtodoeselmismo,perocadainstanciadelaclasetieneunosvaloresdiferentesparasusdatos,por lo queel mtodoutilizarestosvaloresparamostrarlosdosobjetos,deestemodo,el primermarcose mostrarensuscoordenadas(diferentesa lasdelsegundomarco)y consucolorpropio(igualalde segundomarco)yconsutipodelneapropio(diferentealadelsegundomarco). Comoyacomentamos,elobjetoesuntodoencapsulado,conlviajansusmtodosysusdatos,porlo tanto,alaplicarelmismomtodoadosobjetosdiferentes,seproducenresultadosdiferentes:porque losvaloresdesusdatossondiferentes.

Referenciasasmismo
Uncasoespecialocurrecuandoestamoscodificandounmtododeunaclaseytenemosquereferirnos

aundatoounmtododelpropioobjeto.Enestecasonopodemosenviarunmensajealobjeto,porque annohemosinstanciadoningnobjeto;estamoscreandolaclase,o porasdecirlo,dentrodelobjeto mismo. Cmoreferirnosentonces,desdeunobjetoalpropioobjeto?Larespuesta,comosiempreenOOP,es mismo,s-mismo,self(eningls).Self(Algunoslenguajesutilizan "self",perolomscomnesqueutilicen"this":aslohacenC++yJava,porejemplo.)enOOPse refierealpropioobjetoconelqueseesttrabajando.Porlotanto,siestamosescribiendounmtodo deunaclaseyqueremosenviarunmensajealpropioobjeto,escribiramos:


this.Ocultar();

lamismaqueenelmundoreal:l-

Paraconsultarundatodelobjeto,actuaremosdeigualmodo:
if(this.nTop<1) { ....... }

Noolvidequeestareferenciamediantethisslopuedehacerlamientrasquecodificalaclase. Paramsinformacin,refirasealcaptulodondetratamoslaHerencia (super).

Constructores
Parapoderutilizarunobjeto,previamentehemosdecrearlo,loquehacemosmedianteelconstructor delaclase(Observequeenvirtud alasobrecarga(referidacuando hablamosdelpolimorfismo)puede habermsdeunconstructor.).Paraello,dependiendodellenguajeexistendosprocedimientos: Utilizandounmtodoespecial,al quese le denotadeunmodotambinespecial(normalmenteconla palabrareservada" constructor").Estemtodonosdevuelveunobjetonuevodeesaclase.Eneste caso,alosmtodosconstructoresselessuelellamarNew(). Utilizandounoperadorespecialqueellenguajeproporcionayquenormalmentesellama" new".Es estecaso,elconstructorolosconstructoressonnotadosdeunaformaespecial:enJava,porejemplo, senotanconelnombredelaclaseynodevuelvenningntipo,nisiquiera"void". As,paracrearunobjetodelaclasehombre,llamadoJuan,escribiremoslosiguiente: 1. HombrehmrJuan=newHombre(); Leestamosdiciendoalmtodoconstructorquenosdevuelvaunnuevoobjeto.Supongamosqueeste objetotienetresdatos(queparamssencillezsonpblicosaunquerecuerdequenucadebehacerlo as)yquequeremosdarlevaloresaesosdatosdelobjeto:Edad,EstaturayColor-de-ojos.Haremoslo siguiente:
hmrJuan.Edad=30; hmrJuan.Alto=180; hmrJuan.Ojos=Marrn;

Enestecaso,estamosrealmenteenviandounmensajealobjeto,peroellugardeaccedera aundato.Siustedloprefiere, nombredeundatocomoelhechodeenviarelmensaje"CambiarDato()".

unmtodo, estamos accediendo puedeconsiderareloperadordeenvomsel

Habitualmente,losconstructoresdeclasesefabricandetalmodoquepodamoshacerlasdoscosasala vez:crearelobjetoydarvaloresasusdatos,veamoscmo:
HombrehmrJuan=newHombre(30,180,"Marrn"); HombrehmrPepe=newHombre(12,145,"Azul"); HombrehmrAna =newHombre(24,75,"Verde");

Normalmente las clases tiene ms de un constructor, de inicializadosdedistintasformas.As,podemostenerunconstructordelaclase

esta forma podemos crear objetos e Hombrequerecibe

sololaedad,otrolaedadylaestatura,otrolaedad,laestaturayelcolordeojos,etc.Elnmeroytipo deconstructoressolodependedenuestrasnecesidadesydelsentidocomn. Existeunconstructorespecialalqueselellama" constructor recibeningnparmetro.linicializaelobjetoconlosvalorespordefecto. tenerunconstructorpordefectodelaclaseHombrequepusieraeldatoedada30,laestaturaa marrn,quesonlosvaloresmscomunesparaobjetosdeestaclase.Aspodramos hacer:


HombrehrmEstandar=newHombre();

argumento-cero"yesaquelqueno Deestemodo,podramos 175 y elColor-de-ojosa

Estemtodointernamenteselimitaraahacerlosiguiente:
Hombre() { this.edad=30; this.estatura=175; this.ojos="marrn"; }

Estambinimportante,elconceptode"constructorpordefecto".MuchoslenguajesdeOOP,permiten definirunaclasesincrearunconstructorparala clase.Elleguaje,entonces,utilizael defecto(internoallenguaje)paracrearobjetosdeesaclase.Estemtodointerno,normalmente limitaareservarelespaciodememorianecesarioparaalmacenarlosdatosdelobjeto,peroestosdatos noestninicializadosonoloestncorrectamente,yaqueelconstructorpordefectonopuedesaber quvaloressonlosapropiadosparalosdatosdelaclase. Dehecho,todosnuestrosconstructoressonllamadosporellenguajedespusdequesehayainvocado elconstructorpordefecto,yaquesteesrealizalastareasdebajonivel(reservadememoria,manejo delatabladesmbolos,etc.)necesariasparapoderempezaratrabajarconunobjeto. Encualquiercaso,lamisindelconstructoresconstruiradecuadamenteel constructorhayaterminadosutrabajo,elobjetotienequeestarlistoparaserusado. objeto,es

constructorpor se

decir,cuandoel

Accesibilidad de Datos y Mtodos


ModificadoresdeAccesibilidad
Losmodificadores deaccesoindicanlavisibilidad queunavariableounmtodotienen.Tantol s o palabrareservadaparadenotarlosdependen,comoes lenguaje.Detodosmodos,todosloslenguajesOOPincluyenalmenoslostressiguientes: distintostiposposibles,comola lgico,decada

Pblicos
Sonvisiblesdentroyfueradelaclasesinrestriccinalguna.La palabrareservadamscomnpara denotarloses"public". Comoyahemoscomentados,losdatosnodebensernuncapblicos,yaqueromperanelprincipiode EncapsulacinquedebeseguirtodoproyectoOOP.

Protegidos
Estosmiembrosdelaclase(yaseandatoso mtodos)sonvisiblesdesdedentrodellaclasey desde cualquierotraclaseheredada,es decir,claseshijas(o subclases,comoprefierallamarlas).Lapalabra reservadamscomnparadenotarloses"protected"o"friend".

Privados
Lo miembros privados son solo accesibles reservadamscomnparadenotarloses"private". Lasintaxismshabitualeslasiguiente: [<public|protected|private>]<TipoVariable><NombreVariable>; Ejemplos:
PublicStringsNombre; ProtectedintnEdad; PrivatelongnAcceso;

desde

dentro

de

la

clase

donde

existen.

La

palabra

[<public|protected|private>]<TipoRetorno><NombreMtodo>...

Ejemplos:
PublicvoidImprimir(); ProtectedintCalcular(); PrivatestringGrabar();

ModificadoresdeContenido

Para ser correctos, estos modificadores deberan tratarse, como su nombre indica, no el captulo dedicado a la accesibilidad, sino en algn otro dedicado a los modificadores de contenido. Sin embargo,ypuestoquesolovamosatratarunmodificadordeestetipo,noshemospermitidoincluirlo enestecaptulo. EsciertoquelamayoradeloslenguajesdeOOPincluyenmsdeunmodificadordecontenido,tanto paradatos como paramtodos, peropuesto quecasitodos lenguajes coinciden soloenuno,aqu trataremossolamenteelmodificadordecontenidoparadatosestticos. Losmodificadoresdecontenidoafectana cmovaa sertratadoelcontenidodelavariable.As,una variableestticamantienesucontenidoparatodaslasinstanciasdelaclasequesehagan,ascomo paralassubclasesquedeellasehereden. Aestas,selesllamavariablesdelaclase,comocontraposicinalasvariablesdeinstancia.Mientras quelasvariablesdeinstanciaseinicializanparacadanuevainstanciaquesehagadelaclase,es decir, existeunacopiaporcadainstanciadela clase,delasvariablesdela claseexisteunasolainstancia, independientementedelnmerodeinstanciacionesquedela clasese hagan.Deestemodo,todoslos objetoscompartenunlugardealmacenamientocomn. Elejemplomstpicodevariabledelaclaseesuncontadordelnmerodeobjetosexistentesdela clase.Paraello,slohayqueincrementarelcontadordesdeelconstructordelaclasey desdeeldestructor.VaseConstructoresydestructores. Elcdigomuysimplificadopodraseralgoas:
classCuenteo { staticlongnObj=0; //Constructor publicCuenteo() { nObj++; } //Destructor protectedvoidfinalize() { nObj--; } //Obtenerelnmerodeobjetosexistentes publiclongGetObj() { returnnObj; } }

decrementarlo

Interfazfrenteaimplementacin

Eltema delaaccesibilidad nolleva indefectiblemente aotro ntimamenterelacionado:qudebeserpblicoyquprotegidoyquprivado.

tema,

ms

terico,

conelqueest

Selellama"interfazdelaclase"alosmtodospblicosdelamisma(nonoscansaremosderepetir quelosdatosnodebensernuncapblicos),e"implementacin delaclase"alrestodemtodosya todoslosdatos. Si lo piensabien,el nombrede"interfaz"tienesentido,yaquesuponeel conjuntodemtodosquenos permiteninteractuarconlaclase. Comolosdatosnopuedenserpblicos (yraramente sonprotegidos) debehaberunapartedela losmismos.Enestesentido,enlosltimosaoshaaparecidouna tendencia: interfazqueproporcioneaccesoa

Permitirelusodemtodosconsintaxisdedatos
Muchos lenguajes OOP, como es el caso de Delphi, por ejemplo, permiten indicar que a accedemedianteunmtodo.Normalmenteestoslenguajespermitendefinirun mtodoparaleerelvalordeldato(get)yotromtodoparaestablecerelvalordeldato(set).Esto permitequealutilizarunainstanciadelaclaseparezcaqueseestaccediendoa formadirecta,comosieldatofuerapblico,cuandorealmenteseaccedealmedianteunmtodo. Unavezdefinidalaclase,eselmotorOOPdellenguajeelquehacetodaslasconversionesnecesarias. Por ejemplo, teniendo laclaseCaja, ysuponiendo queparaleerelvalor definidoelmtodogetAltura()yparamodificarelvalordeldatosehadefinidoelmtodosetAltura(); lassiguientesinstruccionesseranconvertidasautomticamenteporellenguaje: Cdigo Caja1.getAltura()+Caja2.getAltura() Caja.setAltura(15) Transformacin Caja1.nAltura+Caja2.Altura Caja1.nAltura=15 un determinadodatose

undatodelacalsede

deldatonAlturaseha

Utilizarunanomenclaturaespecialparaestetipodemtodos.Estesistemaes comoJava,elcualasumequetodoslosmtodosquetienencomosufijo recogerelvalordeundatoylosset<nombre>()sonparaasignarelvaloraundato.

el

queutilizanlenguajes get<nombre>()sonpara

You might also like