Está en la página 1de 11

Programacin Orientada a Objetos - Caractersticas de la POO

post info por The Fricky! Caractersticas de la P.O.O.:


No hay un acuerdo aceptado por todo el mundo respecto a cules son las caractersticas que definen la POO, pero al menos todos concuerdan en estas tres: 1. Abstraccin. . !ncapsulacin. ". #erencia.

Abstraccin:
$ada %e& que pronunciamos una palabra, realmente lo que hacemos es asociar ese sonido 'o ese con(unto de )arabatos al escribir* con una serie de cosas. +ecimos que una a%e es tal cosa, que una silla es tal otra, etc. $uando %amos a aplicar la POO, lo primero que debemos hacer es cumplir con una %ie(a m,ima de )uerra: Divide y Vencers. !s decir, lo que hacemos es seccionar nuestro cdi)o en )rupos de cdi)o ms peque-o que, al unirlos, hacen el traba(o. .n buen e(emplo de abstraccin es el cuerpo humano, aunque el cuerpo es una unidad, est di%idido en lo que conocemos por sistemas 'el sistema respiratorio, el sistema linftico, cardio%ascular, etc., etc.*. !stos sistemas, a su %e& estn compuestos por otros ms peque-os: los r)anos, y as sucesi%amente. /a abstraccin nos permite di%idir nuestro pro)rama en distintos ob(etos que se a)rupan para formar cosas ms comple(as. Pero 0qu1 demonios es realmente la abstraccin2 3sicamente es la capacidad de separar los elementos 'al menos mentalmente* para poder %erlos de forma sin)ular. $omo cuando describimos el cuerpo humano y decimos cabe&a, bra&o's*, pierna's*, etc.

Encapsulacin:
4ambi1n conocida como ocultamiento. $uando me acuesto a %er tele%isin no me preocupo del modo como 1ste funciona, o lo que hace para cambiar de canal o aumentar el %olumen. A menos que seas e,perto en electrnica o t1cnico en tele%isores, te pasar lo mismo: no lo sabes y no te importa5 slo sabes que al presionar un botn ocurre la ma)ia. /a encapsulacin se encar)a de mantener ocultos los procesos internos que necesita para hacer lo que sea que ha)a, dndole al pro)ramador acceso slo a lo que necesita. !sto da dos %enta(as iniciales: /o que hace el usuario puede ser controlado internamente 'incluso sus errores*, e%itando que todo colapse por una inter%encin indeseada 't6 no quieres que tu mam, que no tiene ni idea de electrnica, abra tu tele%isor y empiece a (u)ar con los circuitos para cambiar los canales manualmente 0%erdad2*. /a se)unda %enta(a es que, al hacer que la mayor parte del cdi)o est1 oculto, puedes hacer cambios y7o me(oras sin que eso afecte el modo como los usuarios %an a utili&ar tu cdi)o. 8lo tienes que mantener i)ual la forma de acceder a 1l 'en el caso del control de la tele, que

los botones si)an siendo los mismos y que el botn de 9apa)ado: no cambie el %olumen*. Por cierto, estas puertas de acceso que das a los usuarios son lo que se conoce como interfaz.

Herencia:
.no de los elementos 'a mi modo de %er* ms interesantes de la P.O.O. /a herencia es la capacidad que tiene una clase de derivar las propiedades y m1todos de otra 'suena a chino 0no2 $alma, lo %eremos lue)o con paciencia *. 4ratemos de e,plicarlo con un e(emplo: +ecimos que una gallina es un ave5 esto quiere decir que las )allinas tienen caractersticas comunes con otras a%es 'pico, plumas, etc.*, es decir que la )allina hereda las caractersticas comunes de todas las a%es. Pero adems, resulta que un ave es un animal, lo que si)nifica que tambi1n comparte caractersticas comunes al caballo, el perro, el hombre 'seeee, somo animales* y cualquier otra cosa que pueda ser clasificada como animal. /a herencia nos permite, entre otras cosas, e%itar tener que escribir el mismo cdi)o una y otra %e&, puesto que al definir que una cate)ora 'que en pro)ramacin llamaremos clase* pertenece a otra, automticamente estamos atribuy1ndoles las caractersticas )enerales de la primera, sin tener que definirlas de nue%o. .na %e& establecidas las caractersticas de la P.O.O., %eamos sus elementos bsicos: $lase e ;nstancia

Programacin Orientada a Objetos - Qu es POO


#ace tiempo haba prometido a mis alumnos de Action8cript que les dara al)unos apuntes acerca de la Pro)ramacin Orientada a Ob(etos y cmo aplicarla en A8 . Pues bien, el momento de cumplir esa promesa ha lle)ado5 para ello %oy a darme a la tarea de estructurar una serie de posts al respecto, tratando de comprender lo que si)nifica la Pro)ramacin Orientada a Ob(etos y como aplicarla en A8 diri)ida a no< pro)ramadores 'que son la mayora de mis alumnos*. /a idea que ten)o en mente es estructurar un material que permita entrar en el fascinante mundo de la Pro)ramacin, principalmente pero no limitndonos a A8 , para lue)o hacer un paso se)uro y firme a A8" y %er tambi1n como podemos aplicar esto en otros len)ua(es sumamente 6tiles en el desarrollo =eb, como P#P y >a%ascript. ?a %eremos como nos %a.

Qu es la Progra aci!n Orientada a O"#etos$


/a P.O.O. 'tambi1n conocida como O.O.P., por sus si)las en in)l1s* es lo que se conoce como un paradigma o modelo de programacin. !sto si)nifica que no es un len)ua(e especfico, o una tecnolo)a, sino una forma de programar, una manera de plantearse la pro)ramacin. No es la 6nica 'o necesariamente me(or o peor que otras*, pero se ha constituido en una de las formas de pro)ramar ms populares e incluso muchos de los len)ua(es que usamos hoy da lo soportan o estn dise-ados ba(o ese modelo 'P#P, A8 , A8",@*.

/o que caracteri&a a la POO es que intenta lle%ar al mundo del cdi)o lo mismo que encontramos en El Mundo Real. $uando miramos a nuestro alrededor 0qu1 %emos2 pues, cosas, objetos, pero podemos reconocer estos ob(etos porque cada objeto pertenece a una clase, eso nos permite distin)uir, por e(emplo, un perro de un auto 'porque son de clases diferentes* y tambi1n un 4A de otro 'porque, aunque sean i)uales, cada uno es un ob(eto distinto*. Bste es el modelo que la POO intenta se)uir para estructurar un sistema. !s importante recalcar nue%amente que la POO no es un lenguaje de programacin, es una forma de enfrentarse a ella. !sto si)nifica que la POO le ser%ir para desarrollar en muchos de los len)ua(es comunes de hoy en da 'incluso en ASPuaj!* manteniendo un mismo esquema mental. ;ncluso le permitir enfrentar otros proyectos que no necesariamente est1n relacionados con escribir cdi)o@ 'Ad%ertencia: /a P.O.O. no cura el cncer * 3ien, ahora que hemos %isto 'someramente* de qu1 se trata , %amos a darnos un paseo por las $aractersticas de la POO

Programacin Orientada a Objetos - Clase e !nstancia

Qu es una Clase$
$uando decimos 9a%e:, sabemos que nos referimos a 9al)o: con plumas, pico, dos patas, etc. No importa realmente si hemos %isto un a%e o no, o si tenemos un a%e frente a nosotros5 entendemos claramente que la palabra 9a%e: se refiere a al)una cosa que cumple con unas caractersticas especficas, se comporta de una forma concreta, etc, etc. No es ms que una palabra, pero nos permite clasificar las cosas. Por e(emplo, sabemos que una )allina es un a%e y que un perro no es un a%e. /a clasificacin es al)o que hacemos todos los das, a cada momento 'entre otras cosas, nos libra de utili&ar medias como )uantes o ba-arnos en el comedor en %e& de en la ducha*. $ada %e& que decimos que al)o es al)una cosa, estamos clasificndolo, asocindolo a una clase. 8in embar)o, sabemos que la palabra ave no se refiere a un animal concreto, sino a una serie de animales. Ave es la palabra que usamos para identificarlos en un )rupo, pero no podemos decir hoy har volar la pala ra !ave" 'bueno, puedes decirlo, pero estars cada %e& ms cerca del manicomio*, en tal caso siempre nos referiremos a esta o a#uella ave, siempre hablaremos de un animal concreto. /a palabra es lo que conocemos como un concepto, una abstraccin. !n la POO ocurre i)ual, una clase no es ms que una serie de cdi)o que define a todos los elementos relacionados con ella. As, podramos escribir la clase ave colocando en ella todas las caractersticas que tienen las a%es 'pico, color, alto, ancho, patas,@* esas caractersticas las llamaremos en len)ua(e de pro)ramadores, propiedades. Pero la cosa no termina all, resulta que las a%es tienen tambi1n ciertos mecanismos especficos, como comer, dormir, reproducirse 'Cal1(ate Pert%ert%a&D *, etc. !stos mecanismos los llamamos mtodos.

Por 6ltimo, tambi1n sabemos que las a%es reaccionan ante ciertos sucesos, como peli)ro, atraccin, defensa@ A esto lo llamaremos eventos. !ntonces, %emos que una clase es al)o as como el concepto de lo que queremos hacer, es como la idea 'concebida al detalle* de la cosa, del ob(eto5 pero i)ual que con las ideas, no puedo hacer nada directamente con una clase 'puedes sentarte en una silla, pero no en tu idea de una silla*. 8in embar)o, esta idea ser la que d1 forma al ob(eto que crearemos 'que tendr las caractersticas, mecanismos y comportamientos que habamos pensado en nuestra idea*.

Qu es una %nstancia$
3ien, decamos que una clase es como la definicin de un ob(eto, pero no es el ob(eto en s, del modo como una idea no es una cosa fsica 'el e(emplo de la silla*. As que para sentarnos necesitaremos con%ertir esa idea en al)o, en un ob(eto real5 a ese ob(eto lo llamamos instancia. !n un mismo proyecto puedo tener una o ms instancias de una misma clase sin problemas. $ada %e& que creamos una nue%a instancia, 1sta adquiere las propiedades, m1todos y e%entos de la clase a la que pertenece 'es lo que permite la relacin es un*, sin embar)o, cada instancia es independiente de las otras5 esto nos da dos %enta(as: 1. 8i ha)o al)6n cambio en la clase, todas las instancias de esta clase se actuali&arn automticamente5 esto nos permite hacer cambios sin tener que ir a cada una de las instancias 'se aplica el mismo principio de herencia, aunque a un ni%el diferente*.

. Al ser independientes de las otras instancias, puedo darles %alores diferentes sin que afecten a las dems 'como tener una silla ne)ra, una ro(a, una ms alta, etc.*. Aunque comparten la misma estructura, pueden pro)ramarse indi%idualmente, dando %ersatilidad y fle,ibilidad al cdi)o. Ahora que tenemos la base terica, debemos dar un paso ms prctico, en el si)uiente post aprenderemos $mo !scribir una $lase

Programacin Orientada a Objetos - Cmo Escribir una Clase


Ahora que entendemos 'ms o menos* cmo funciona la teora bsica de la P.O.O. y sabemos acerca de la importancia de las clases, es momento para que %eamos cmo sera la estructura de una clase. !s importante tener en cuenta que cada len)ua(e tiene, de acuerdo a su sinta,is, sus propias normas sobre cmo escribir clases. No ser lo mismo en P#P que en A8 o incluso A8". As que, primero, hablaremos en un sentido ms )eneral, para lue)o pasar a la prctica concreta. Para los efectos, usaremos como len)ua(e de e(emplo Action Script .!.

&structura de la Clase
/os elementos bsicos de una clase se estructuran de la si)uiente forma 'ms aba(o definiremos cada elemento*: 1. "aquete al que pertenece la clase 'pac$age < slo en A8", en A8 se incluye en la +efinicin de la $lase*. . #e$inicin de la %lase 'class < !n A8 , si la clase est incluida en un paquete, se usa la sinta,is pa#uete%clase*. ". &ariables 'nternas '8on de uso interno de la clase, por lo que se restrin)e su uso fuera de ellas con la palabra cla%e private, as la %ariable miVar, de tipo num1rico, podra definirse as: private var miVar:Number = 0;* E. %onstructor de la %lase 'e,cepto en el caso de las clases estticas, pero de eso hablaremos en otro post*. F. Propiedades( Mtodos ) Eventos de la %lase 'no necesariamente en ese orden, pero es una buena forma de or)ani&arlo*. Por supuesto, una clase bien hecha contiene adems comentarios con informacin sobre la clase, la forma de usarla, su autor, etc. !n este caso lo omitimos para concentrarnos en lo bsico y no enredarnos ms de lo estrictamente necesario. +icho esto, %eamos los puntos nombrados arriba en una clase de e(emplo, para lue)o pasar a e,plicar los conceptos:

Para crear una nue%a instancia de la clase Persona debemos importarla y lue)o instanciar con la palabra cla%e ne=, pasndole los parmetros que necesita:
import cesarfrick.Persona; var cesar:Persona = new Persona(Csar, !rick, "#$;

Ahora e,pliquemos de qu1 se trata lo que hemos dicho: "aquete* Aunque podemos colocar nuestras clases en el mismo directorio donde se encuentra el archi%o que los usar, siempre resulta ms ordenado y eficiente

clasificarlos en carpetas, donde podemos colocar aquellas clases que tienen un mismo propsito. As podemos tener una carpeta llamada graph para clases de tipo )rfico, e&ternalData para clases que conectan y7o procesan datos e,ternos, etc. !stas carpetas son conocidas como paquetes. Otra %enta(a de usar paquetes 'adems de mantener nuestras clases ordenadas* es que nos permiten importar todas las clases que necesitemos de ellos con slo una lnea: import pa%uete.&, en %e& de tener que hacer un import para cada clase. 8i te preocupa que terminen importndose ms clases de las que necesitas de ese paquete, no hay problema porque slo se importarn las que sean necesarias y no las que no utilices en el cdi)o. !n al)unos len)ua(es, e,isten palabras reser%adas para declarar el paquete al que pertenece una clase 'como en el caso de A8"*, en estos casos %a primero la declaracin del paquete y lue)o la de la clase. !n A8" sera de esta forma:
packa'e nombre(e)Pa%uete* c)ass Nombre(e+aC)ase* , -

%lase* /a clase, propiamente dicha, se declara con la palabra cla%e class. #ay un par de cosas que debemos tener en cuenta cuando creamos una clase:

No es obli)atorio, pero por re)la )eneral <los entendidos lo llaman convencin y es cuando todos se ponen de acuerdo en hacer al)o de la misma forma 'C(aD como si tal cosa fuese posible. !rrr@ perdn, eso es otro tema*< los nombres de las clases siempre comien&an con may6sculas. !sto si es obli)atorio: !l archi%o donde se encuentra la clase debe tener el mismo nombre que 1sta, respetando may6sculas y min6sculas. !sto es importante porque los import usan el nombre del paquete 'si lo hubiere* y la clase para ubicarlos en el disco, as que si usas diferentes nombres, nunca los hallar y dar error. 8i el len)ua(e no tiene una palabra reser%ada para definir el paquete 'A8 , por e(emplo*, la definicin de la clase sera as:
c)ass nombre(e)Pa%uete.Nombre(e+aC)ase* , -

&ariables 'nternas o "rivadas* !n 6ltimo t1rmino, todas las propiedades de una clase son en realidad %ariables, pero no es con%eniente que el usuario de la clase pueda manipular directamente estas %ariables, por ello se mantienen pri%adas, es decir, slo pueden llamarse ) manipularse dentro del cdigo de la clase( pero no $uera de ellas 'o sea que si se trata de llamar a una de estas %ariables desde la instancia, no funcionar*. Para hacer que una %ariable7funcin sea pri%ada, se le antepone la palabra private. %onstructor*

!s la funcin que se e(ecuta cada %e& que se crea una instancia de la clase, 8i necesitamos que nuestra clase inicie con ciertos %alores, colocamos los parmetros correspondientes entre los par1ntesis. /a funcin constructora siempre de%uel%e Aoid 'Aaco*. 4ambi1n puede haber casos en los que no queramos que la clase constructora e(ecute nin)6n cdi)o. Para ello simplemente la colocamos %aca, es decir, la declaramos pero no ponemos cdi)o en ella. 8i una clase no tiene un constructor, no puede ser instanciada. "ropiedades( Mtodos ) Eventos de la clase* +ecamos antes que las propiedades son realmente %ariables dentro de la clase, pero para poder controlar qu1 puede cambiar o no el usuario de la clase, si los %alores son correctos, etc. hacemos uso de unas funciones especiales para definir propiedades: )et y set. get permite al usuario recuperar el %alor de la propiedad, leerlo, por lo que su salida debe ser correspondiente con la que se espera de la propiedad 'por e(emplo, no tendra sentido que la propiedad 9nombre: del e(emplo de%ol%iese un n6mero*. 8i slo creamos una funcin )et para una propiedad, 1sta es de slo lectura. set es usado para darle un %alor a la propiedad, normalmente se a-aden aqu los controles para ase)urarse que el %alor que se asi)na es del tipo deseado 'y e%itar que la clase colapse por un error de tipo de datos*. /a funcin de set, al ser para escribir en la propiedad no de%uel%e nin)6n tipo de datos, pero debe tener un parmetro que es el %alor que se pasar a la %ariable. Al contrario de )et, no puede haber una clase de slo escritura 'despu1s de todo, no tiene nin)6n sentido tener una propiedad a la que se le pueda asi)nar un %alor pero este no pueda ser recuperado*. +os mtodos no son ms que funciones p6blicas, que pueden tener o no datos y que afectan a la instancia de al)una forma. +os eventos, al i)ual que los m1todos, son funciones, pero estos reaccionan ante al)una interaccin del usuario o pueden ser reescritos por 1ste. A ellos dedicaremos un post especial. 3ien, como %en escribir una clase no es tan complicado como puede pensarse en un principio. /ue)o hablaremos de las %enta(as7des%enta(as de usar clases, pero por ahora creo que ha sido bastante 'al menos yo estoy e,hausto *. 8lo decir que si les resulta muy complicado lo que %en ac, repasen los posts anteriores 'seee, he tardado mucho en escribir 1ste* para que lo %ean en conte,to. 4ambi1n decir que en este caso y todos los que %en)an escribiremos el cdi)o si)uiendo las re)las del 8trict +ata 4ypin) '4ipeo !stricto de +atos*, al que le daremos unas lneas en el pr,imo post.

/os atributos pri%ados son %ariables que unicamente puede mane(ar el ob(eto donde estan contenidas. O sea que en: class Pri%ados G pri%ate: int (5 %oid funcion'*5 H el unico que tiene acceso a I(I es un ob(eto del tipo IPri%adosI. /o mismo pasa con los metodos, Ifuncion'*I puede ser llamado dentro del mbito de la clase IPri%adosI. o sea que: Pri%ados p J ne= Pri%ados'*5 p<K( J15 p<Kfuncion'*5 %a a darte un error de IaccesibilidadI. <<<<<<<<<<< /os atributos7metodos p6blicos pueden ser accedidos desde cualquier lu)ar del pro)rama: class Publicos G public: int (5 %oid funcion'* H o sea que: Pri%ados p J ne= Pri%ados'*5 p<K( J15 p<Kfuncion'*5 %a a funcionar perfectamente bien. <<<<<<<<<<< Por otro lado, el encapsulamiento lo que permite es meter dentro de un ob(eto una funcionalidad dada, ocultando del resto de los ob(etos los detalles de esa funcionalidad. Por e(emplo, cuando utili&as una AP; de acceso a datos, t6 simplemente e(ecutas: ob(eto+3<KOpen'*5 y no sabes e,actamente qu1 es lo que ocurre dentro del m1todo IOpen'*I. $uando una $lase implementa una ;nterface, el encapsulamiento permite que, manteniendo un (ue)o de m1todos conocidos, se ha)an distintas cosas. hace meses !(emplo len)ua(e (a%a public class autoG pri%ate 8trin) marca5 public auto'*G H

public 8trin) )etLarca'*G return this.marca5 H H

hace

meses

"uente#s$:
en este e(emplo declaro un atributo pri%ado.... se)un la POO los atributos de una clase deben ser pri%ados para poder ocultar la informacion y e%itar inestabilidad ahora lue)o declaro un metodo publico a parte del contructor... la diferencia esta en que si es pri%ado solo en este caso la clase podra acceder al atributo, solo en este ambito el de la clase si hay otra clase que quiera acceder al atributo marca debera usar el metodo )etLarca que es publico por ende accesible desde cualquier lu)ar.... !s simple, en )eneral en cualquier len)ua(e tendr los modificadores: Public, Pri%ate, Mriend Public: Liembro p6blico, %isible desde cualquier proyecto7libreria e,terna Pri%ate: Liembro pri%ado, solo %isible desde la clase Mriend: Liembro ami)o, %isible desde el proyecto7libreria No importa si es funcin, rutina, propiedad, siepre implica la misma %isibilidad.

También podría gustarte