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. 2. Encapsulacin. 3. Herencia.

Abstraccin:
Cada vez que pronunciamos una palabra, realmente lo que hacemos es asociar ese sonido (o ese conjunto de garabatos al escribir) con una serie de cosas. Decimos que una ave es tal cosa, que una silla es tal otra, etc. Cuando vamos a aplicar la POO, lo primero que debemos hacer es cumplir con una vieja mxima de guerra: Divide y Vencers. Es decir, lo que hacemos es seccionar nuestro cdigo en grupos de cdigo ms pequeo que, al unirlos, hacen el trabajo. Un buen ejemplo de abstraccin es el cuerpo humano, aunque el cuerpo es una unidad, est dividido en lo que conocemos por sistemas (el sistema respiratorio, el sistema linftico, cardiovascular, etc., etc.). Estos sistemas, a su vez estn compuestos por otros ms pequeos: los rganos, y as sucesivamente. La abstraccin nos permite dividir nuestro programa en distintos objetos que se agrupan para formar cosas ms complejas. Pero qu demonios es realmente la abstraccin? Bsicamente es la capacidad de separar los elementos (al menos mentalmente) para poder verlos de forma singular. Como cuando describimos el cuerpo humano y decimos cabeza, brazo(s), pierna(s), etc.

Encapsulacin:
Tambin conocida como ocultamiento. Cuando me acuesto a ver televisin no me preocupo del modo como ste funciona, o lo que hace para cambiar de canal o aumentar el volumen. A menos que seas experto en electrnica o tcnico en televisores, te pasar lo mismo: no lo sabes y no te importa; slo sabes que al presionar un botn ocurre la magia. La encapsulacin se encarga de mantener ocultos los procesos internos que necesita para hacer lo que sea que haga, dndole al programador acceso slo a lo que necesita. Esto da dos ventajas iniciales: Lo que hace el usuario puede ser controlado internamente (incluso sus errores), evitando que todo colapse por una intervencin indeseada (t no quieres que tu mam, que no tiene ni idea de electrnica, abra tu televisor y empiece a jugar con los circuitos para cambiar los canales manualmente verdad?). La segunda ventaja es que, al hacer que la mayor parte del cdigo est oculto, puedes hacer cambios y/o mejoras sin que eso afecte el modo como los usuarios van a utilizar tu cdigo. Slo tienes que mantener igual la forma de acceder a l (en el caso del control de la tele, que

los botones sigan siendo los mismos y que el botn de apagado no cambie el volumen). Por cierto, estas puertas de acceso que das a los usuarios son lo que se conoce como interfaz.

Herencia:
Uno de los elementos (a mi modo de ver) ms interesantes de la P.O.O. La herencia es la capacidad que tiene una clase de derivar las propiedades y mtodos de otra (suena a chino no? Calma, lo veremos luego con paciencia ). Tratemos de explicarlo con un ejemplo: Decimos que una gallina es un ave; esto quiere decir que las gallinas tienen caractersticas comunes con otras aves (pico, plumas, etc.), es decir que la gallina hereda las caractersticas comunes de todas las aves. Pero adems, resulta que un ave es un animal, lo que significa que tambin comparte caractersticas comunes al caballo, el perro, el hombre (seeee, somo animales) y cualquier otra cosa que pueda ser clasificada como animal. La herencia nos permite, entre otras cosas, evitar tener que escribir el mismo cdigo una y otra vez, puesto que al definir que una categora (que en programacin llamaremos clase) pertenece a otra, automticamente estamos atribuyndoles las caractersticas generales de la primera, sin tener que definirlas de nuevo. Una vez establecidas las caractersticas de la P.O.O., veamos sus elementos bsicos: Clase e Instancia

Programacin Orientada a Objetos - Qu es POO?


Hace tiempo haba prometido a mis alumnos de ActionScript que les dara algunos apuntes acerca de la Programacin Orientada a Objetos y cmo aplicarla en AS2. Pues bien, el momento de cumplir esa promesa ha llegado; para ello voy a darme a la tarea de estructurar una serie de posts al respecto, tratando de comprender lo que significa la Programacin Orientada a Objetos y como aplicarla en AS2 dirigida a noprogramadores (que son la mayora de mis alumnos). La idea que tengo en mente es estructurar un material que permita entrar en el fascinante mundo de la Programacin, principalmente pero no limitndonos a AS2, para luego hacer un paso seguro y firme a AS3 y ver tambin como podemos aplicar esto en otros lenguajes sumamente tiles en el desarrollo web, como PHP y Javascript. Ya veremos como nos va.

Qu es la Programacin Orientada a Objetos?


La P.O.O. (tambin conocida como O.O.P., por sus siglas en ingls) es lo que se conoce como un paradigma o modelo de programacin. Esto significa que no es un lenguaje especfico, o una tecnologa, sino una forma de programar, una manera de plantearse la programacin. No es la nica (o necesariamente mejor o peor que otras), pero se ha constituido en una de las formas de programar ms populares e incluso muchos de los lenguajes que usamos hoy da lo soportan o estn diseados bajo ese modelo (PHP, AS2, AS3,).

Lo que caracteriza a la POO es que intenta llevar al mundo del cdigo lo mismo que encontramos en El Mundo Real. Cuando miramos a nuestro alrededor qu vemos? pues, cosas, objetos, pero podemos reconocer estos objetos porque cada objeto pertenece a una clase, eso nos permite distinguir, por ejemplo, un perro de un auto (porque son de clases diferentes) y tambin un TV de otro (porque, aunque sean iguales, cada uno es un objeto distinto). ste es el modelo que la POO intenta seguir para estructurar un sistema. Es importante recalcar nuevamente que la POO no es un lenguaje de programacin, es una forma de enfrentarse a ella. Esto significa que la POO le servir para desarrollar en muchos de los lenguajes comunes de hoy en da (incluso en ASPuaj!) manteniendo un mismo esquema mental. Incluso le permitir enfrentar otros proyectos que no necesariamente estn relacionados con escribir cdigo (Advertencia: La P.O.O. no cura el cncer ) Bien, ahora que hemos visto (someramente) de qu se trata , vamos a darnos un paseo por las Caractersticas de la POO

Programacin Orientada a Objetos - Clase e Instancia

Qu es una Clase?
Cuando decimos ave, sabemos que nos referimos a algo con plumas, pico, dos patas, etc. No importa realmente si hemos visto un ave o no, o si tenemos un ave frente a nosotros; entendemos claramente que la palabra ave se refiere a alguna 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 ejemplo, sabemos que una gallina es un ave y que un perro no es un ave. La clasificacin es algo que hacemos todos los das, a cada momento (entre otras cosas, nos libra de utilizar medias como guantes o baarnos en el comedor en vez de en la ducha). Cada vez que decimos que algo es alguna cosa, estamos clasificndolo, asocindolo a una clase. Sin embargo, 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 grupo, pero no podemos decir hoy har volar la palabra ave (bueno, puedes decirlo, pero estars cada vez ms cerca del manicomio), en tal caso siempre nos referiremos a esta o aquella ave, siempre hablaremos de un animal concreto. La palabra es lo que conocemos como un concepto, una abstraccin. En la POO ocurre igual, una clase no es ms que una serie de cdigo que define a todos los elementos relacionados con ella. As, podramos escribir la clase ave colocando en ella todas las caractersticas que tienen las aves (pico, color, alto, ancho, patas,) esas caractersticas las llamaremos en lenguaje de programadores, propiedades. Pero la cosa no termina all, resulta que las aves tienen tambin ciertos mecanismos especficos, como comer, dormir, reproducirse (aljate Pertvertvaz! ), etc. Estos mecanismos los llamamos mtodos.

Por ltimo, tambin sabemos que las aves reaccionan ante ciertos sucesos, como peligro, atraccin, defensa A esto lo llamaremos eventos. Entonces, vemos que una clase es algo as como el concepto de lo que queremos hacer, es como la idea (concebida al detalle) de la cosa, del objeto; pero igual 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). Sin embargo, esta idea ser la que d forma al objeto que crearemos (que tendr las caractersticas, mecanismos y comportamientos que habamos pensado en nuestra idea).

Qu es una Instancia?
Bien, decamos que una clase es como la definicin de un objeto, pero no es el objeto en s, del modo como una idea no es una cosa fsica (el ejemplo de la silla). As que para sentarnos necesitaremos convertir esa idea en algo, en un objeto real; a ese objeto lo llamamos instancia. En un mismo proyecto puedo tener una o ms instancias de una misma clase sin problemas. Cada vez que creamos una nueva instancia, sta adquiere las propiedades, mtodos y eventos de la clase a la que pertenece (es lo que permite la relacin es un), sin embargo, cada instancia es independiente de las otras; esto nos da dos ventajas: 1. Si hago algn cambio en la clase, todas las instancias de esta clase se actualizarn automticamente; 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 nivel diferente).

2. Al ser independientes de las otras instancias, puedo darles valores diferentes sin que afecten a las dems (como tener una silla negra, una roja, una ms alta, etc.). Aunque comparten la misma estructura, pueden programarse individualmente, dando versatilidad y flexibilidad al cdigo. Ahora que tenemos la base terica, debemos dar un paso ms prctico, en el siguiente post aprenderemos Cmo Escribir una Clase

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 veamos cmo sera la estructura de una clase. Es importante tener en cuenta que cada lenguaje tiene, de acuerdo a su sintaxis, sus propias normas sobre cmo escribir clases. No ser lo mismo en PHP que en AS2 o incluso AS3. As que, primero, hablaremos en un sentido ms general, para luego pasar a la prctica concreta. Para los efectos, usaremos como lenguaje de ejemplo Action Script 2.0.

Estructura de la Clase
Los elementos bsicos de una clase se estructuran de la siguiente forma (ms abajo definiremos cada elemento): 1. Paquete al que pertenece la clase (package - slo en AS3, en AS2 se incluye en la Definicin de la Clase). 2. Definicin de la Clase (class - En AS2, si la clase est incluida en un paquete, se usa la sintaxis paquete.clase). 3. Variables Internas (Son de uso interno de la clase, por lo que se restringe su uso fuera de ellas con la palabra clave private, as la variable miVar, de tipo numrico, podra definirse as: private var miVar:Number = 0;) 4. Constructor de la Clase (excepto en el caso de las clases estticas, pero de eso hablaremos en otro post). 5. Propiedades, Mtodos y Eventos de la Clase (no necesariamente en ese orden, pero es una buena forma de organizarlo). Por supuesto, una clase bien hecha contiene adems comentarios con informacin sobre la clase, la forma de usarla, su autor, etc. En este caso lo omitimos para concentrarnos en lo bsico y no enredarnos ms de lo estrictamente necesario. Dicho esto, veamos los puntos nombrados arriba en una clase de ejemplo, para luego pasar a explicar los conceptos:

Para crear una nueva instancia de la clase Persona debemos importarla y luego instanciar con la palabra clave new, pasndole los parmetros que necesita:
import cesarfrick.Persona; var cesar:Persona = new Persona(Csar, Frick, 36);

Ahora expliquemos de qu se trata lo que hemos dicho: Paquete: Aunque podemos colocar nuestras clases en el mismo directorio donde se encuentra el archivo 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 grfico, externalData para clases que conectan y/o procesan datos externos, etc. Estas carpetas son conocidas como paquetes. Otra ventaja 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 paquete.*, en vez de tener que hacer un import para cada clase. Si 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 cdigo. En algunos lenguajes, existen palabras reservadas para declarar el paquete al que pertenece una clase (como en el caso de AS3), en estos casos va primero la declaracin del paquete y luego la de la clase. En AS3 sera de esta forma:
package nombreDelPaquete{ class NombreDeLaClase{ } }

Clase: La clase, propiamente dicha, se declara con la palabra clave class. Hay un par de cosas que debemos tener en cuenta cuando creamos una clase:

No es obligatorio, pero por regla general -los entendidos lo llaman convencin y es cuando todos se ponen de acuerdo en hacer algo de la misma forma (ja! como si tal cosa fuese posible. Errr perdn, eso es otro tema)- los nombres de las clases siempre comienzan con maysculas. Esto si es obligatorio: El archivo donde se encuentra la clase debe tener el mismo nombre que sta, respetando maysculas y minsculas. Esto 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. Si el lenguaje no tiene una palabra reservada para definir el paquete (AS2, por ejemplo), la definicin de la clase sera as:
class nombreDelPaquete.NombreDeLaClase{ }

Variables Internas o Privadas: En ltimo trmino, todas las propiedades de una clase son en realidad variables, pero no es conveniente que el usuario de la clase pueda manipular directamente estas variables, por ello se mantienen privadas, es decir, slo pueden llamarse y manipularse dentro del cdigo de la clase, pero no fuera de ellas (o sea que si se trata de llamar a una de estas variables desde la instancia, no funcionar). Para hacer que una variable/funcin sea privada, se le antepone la palabra private. Constructor:

Es la funcin que se ejecuta cada vez que se crea una instancia de la clase, Si necesitamos que nuestra clase inicie con ciertos valores, colocamos los parmetros correspondientes entre los parntesis. La funcin constructora siempre devuelve Void (Vaco). Tambin puede haber casos en los que no queramos que la clase constructora ejecute ningn cdigo. Para ello simplemente la colocamos vaca, es decir, la declaramos pero no ponemos cdigo en ella. Si una clase no tiene un constructor, no puede ser instanciada. Propiedades, Mtodos y Eventos de la clase: Decamos antes que las propiedades son realmente variables dentro de la clase, pero para poder controlar qu puede cambiar o no el usuario de la clase, si los valores son correctos, etc. hacemos uso de unas funciones especiales para definir propiedades: get y set. get permite al usuario recuperar el valor de la propiedad, leerlo, por lo que su salida debe ser correspondiente con la que se espera de la propiedad (por ejemplo, no tendra sentido que la propiedad nombre del ejemplo devolviese un nmero). Si slo creamos una funcin get para una propiedad, sta es de slo lectura. set es usado para darle un valor a la propiedad, normalmente se aaden aqu los controles para asegurarse que el valor que se asigna es del tipo deseado (y evitar que la clase colapse por un error de tipo de datos). La funcin de set, al ser para escribir en la propiedad no devuelve ningn tipo de datos, pero debe tener un parmetro que es el valor que se pasar a la variable. Al contrario de get, no puede haber una clase de slo escritura (despus de todo, no tiene ningn sentido tener una propiedad a la que se le pueda asignar un valor pero este no pueda ser recuperado). Los mtodos no son ms que funciones pblicas, que pueden tener o no datos y que afectan a la instancia de alguna forma. Los eventos, al igual que los mtodos, son funciones, pero estos reaccionan ante alguna interaccin del usuario o pueden ser reescritos por ste. A ellos dedicaremos un post especial. Bien, como ven escribir una clase no es tan complicado como puede pensarse en un principio. Luego hablaremos de las ventajas/desventajas de usar clases, pero por ahora creo que ha sido bastante (al menos yo estoy exhausto ). Slo decir que si les resulta muy complicado lo que ven ac, repasen los posts anteriores (seee, he tardado mucho en escribir ste) para que lo vean en contexto. Tambin decir que en este caso y todos los que vengan escribiremos el cdigo siguiendo las reglas del Strict Data Typing (Tipeo Estricto de Datos), al que le daremos unas lneas en el prximo post.

Los atributos privados son variables que unicamente puede manejar el objeto donde estan contenidas. O sea que en: class Privados { private: int j; void funcion(); } el unico que tiene acceso a "j" es un objeto del tipo "Privados". Lo mismo pasa con los metodos, "funcion()" puede ser llamado dentro del mbito de la clase "Privados". o sea que: Privados p = new Privados(); p->j =1; p->funcion(); va a darte un error de "accesibilidad". ----------Los atributos/metodos pblicos pueden ser accedidos desde cualquier lugar del programa: class Publicos { public: int j; void funcion() } o sea que: Privados p = new Privados(); p->j =1; p->funcion(); va a funcionar perfectamente bien. ----------Por otro lado, el encapsulamiento lo que permite es meter dentro de un objeto una funcionalidad dada, ocultando del resto de los objetos los detalles de esa funcionalidad. Por ejemplo, cuando utilizas una API de acceso a datos, t simplemente ejecutas: objetoDB->Open(); y no sabes exactamente qu es lo que ocurre dentro del mtodo "Open()". Cuando una Clase implementa una Interface, el encapsulamiento permite que, manteniendo un juego de mtodos conocidos, se hagan distintas cosas. hace 2 meses Ejemplo lenguaje java public class auto{ private String marca; public auto(){ }

public String getMarca(){ return this.marca; } }

hace 2 meses

Fuente(s):
en este ejemplo declaro un atributo privado.... segun la POO los atributos de una clase deben ser privados para poder ocultar la informacion y evitar inestabilidad ahora luego declaro un metodo publico a parte del contructor... la diferencia esta en que si es privado 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 getMarca que es publico por ende accesible desde cualquier lugar.... Es simple, en general en cualquier lenguaje tendr los modificadores: Public, Private, Friend Public: Miembro pblico, visible desde cualquier proyecto/libreria externa Private: Miembro privado, solo visible desde la clase Friend: Miembro amigo, visible desde el proyecto/libreria No importa si es funcin, rutina, propiedad, siepre implica la misma visibilidad.