Contactenos.

Si tienes algo que aportar puedes enviar tu opinion al correo electronico revloj.savir@gmail.com o jolver_284@hotmail.com

martes, 2 de diciembre de 2008

Programacion Orientada a Objetos

Este post mas que nada como referencia, para no reparar en explicar conceptos similares cada que me adentre en un lenguaje, y como una guia basica o definición de conceptos.

Programación orientada a objetos

La programación orientada a objetos es una metodología de diseño de software que utiliza clases y objetos (como su nombre lo dice) y que promete una mejora en la implementación, depuración y tiempo de desarrollo en proyectos de software.

Para que un lenguaje se considere orientado a objetos debe contar con:
Manejo de clases
Manejo de objetos
Herencia


Las clases

Una clase es un contenedor o envoltura de datos (atributos) y comportamientos (métodos), una estructura para crear objetos a partir de ellas, en la mayoría de los lenguajes una clase se define utilizando la palabra reservada class


Los objetos

Los objetos son instancias de una clase, son tipos de datos abstractos que cuentan con atributos y comportamientos propios, es la base de la programación orientada a objetos, y se puede pensar en ellos homologándolo a la vida cotidiana (o de eso se trata..), como una bicicleta, es un objeto que tiene atributos (el color, el tamaño), y comportamientos (se mueve, vuela(broma)), en la mayoría de los lenguajes para instanciar un objeto (crearlo, reservar memoria para el) se utiliza la palabra reservada new

Encapsulamiento y ocultación de la información

La programación orientada a objetos facilita el encapsulamiento, un objeto puede cumplir con ciertas funciones sin que se conozca su estructura interna, un programador puede crear objeto que resuelva determinado problema y alguien mas puede usarlo solo ocupándose de su implementación, un objeto bien estructurado puede ser portado a otra parte del diseño del software o a otro proyecto sin preocuparse de adaptarlo para ese determinado proyecto (reutilización), me gustaba la analogía de un reproductor de CD's, un usuario puede escuchar un disco solo conociendo la forma de uso del aparato sin tener que prestar la mínima atención a su funcionamiento interno. Sin embargo los objetos pueden comunicarse entre si mismos o con el usuario por interfaces definidas por el programador.

Métodos

Un método es un procedimiento propio de un objeto, un método cumple una función y retorna (o no) un resultado, por ejemplo:


int sumaDos(int param, int, param2)
{
return (param+param2);
}


Es como una función, un concepto muy propio de los lenguajes de procedimientos , pero un método es propio de un objeto

Atributos

Los atributos son variables propias del objeto, son datos encapsulados dentro de el e indican un comportamiento del mismo, en varios lenguajes pueden ser accesadas anteponiendo la palabra reservada this

Referencias

Son atributos especiales que hacen referencia a otros objetos.

Constructores

Los constructores son métodos especiales llamados automáticamente al crear un nuevo objeto, en la mayoría de los lenguajes el constructor lleva el mismo nombre que la clase.

class MiClase
{
MiClase() //constructor
{
}
}


Aunque en otros lenguajes como php se usan palabras reservadas como __construct, el constructor en muchos casos se utiliza para aplicar valores iniciales a variables miembro o ejecutar procesos administrativos, en muchos entornos de ejecución (como C++), al no crearse un constructor, el compilador crea uno vació por defecto.


Herencia

Las clases tienen una estructura jerárquica, una clase puede ser "hija" de otra clase y a la vez esa clase puede ser "padre" de otra, al derivar una clase de otra esta toma sus atributos y comportamientos (dependiendo del nivel de acceso, que explicaré luego). Al desarrollar podemos crear algunas clases un poco generales y derivarla en algunas otras un poco mas especializadas, como "Perro" con propiedades como que tiene orejas , ojos etc.. Y derivar en razas como "Rottweiler", "Chihuahua" , todos derivan de la clase perro y heredan sus atributos y comportamientos (se mueven, ladran), pero tienen sus respectivas distinciones (uno mide mas y se podria comer al otro..) .

En algunos lenguajes una clase puede heredar de otras varias, sin embargo en lenguajes como Java, una clase puede heredar de otra única clase, esto por que el tener herencia múltiple puede generar una jerarquía de clases realmente compleja y dificultar el desarrollo.

En la mayoría de los lenguajes se usa la palabra reservada extends para indicar que una clase hereda de otra

class Rottweiler extends Perro
{
}


Polimorfismo

Con el polimorfismo podemos programar en forma general y no especifica, el polimorfismo se basa en la idea de tener el mismo denominador para diferentes métodos, esto permite responder de una manera diferente a un mismo llamado, por ejemplo tener un mismo método que se llame "suma":

int sumaValores(int param, int param2)
{
print "la suma de 2 parametros es " + (param+param);
}

int sumaValores(int param, int param2, int param3)
{
print "la suma de 3 parametros es " + (param+param2+param3);
}


Es un método llamado igual pero su procedimiento no es el mismo (va, si es el mismo aqui, pero con diferente numero de parámetros u.u), ahora al llamar al método "suma", será ejecutado el método que cumpla con los parámetros (y tipos de parametros) del llamado:


Suma(1, 2); //Se llama el primero
Suma(1, 2, 3); //se llama el segundo

Clases Abstractas

Una clase abstracta es una clase de la cual no se pueden instanciar objetos, de estas clases solo se puden heredar otras, en desarrollo se utilizan simplemente para derivar a otras clases mas especializadas. En los lenguajes que implementan este tipo de clases se utiliza la palabra reservada abstract para indicarlas

Una clase abstracta debe tener uno o mas métodos abstractos, y estos métodos deben ser implementados en las clases derivadas.

Clases finales

Las clases finales son clases que no se pueden heredar, es la ultima parte de la estructura de clases, en los lenguajes que las implementan se utiliza la palabra reservada final

En los lenguajes como java pueden existir métodos finales, un método que se declara final no puede ser sobrescrito en clases derivadas.

Interfaces

Una interfaz es una clase únicamente para implementación en otras, en una interfaz se indican los prototipos de los métodos que debería tener un objeto pero el cuerpo del mismo debe ser escrito en las clases que la implementan, en los lenguajes que lo implementan se utiliza la palabra reservada interface para indicar una interfaz e implements para su implementación. Como:


interfaz Trasporte
{
void avanza();
void detente();
}

class Automovil implements Transporte
{
void avanza()
{
//procesos de avanzar
}

void detente
{
//procesos de detenerse
}

}


Después seguiré u.u, aun falta explicar los niveles de acceso, los atributos y métodos static, etc,, si alguien desea escribir sobre eso adelante , e igualmente, si alguien desea corregir, tiene dudas, comentarios, comentarios fuera de lugar (que ya se le hizo costumbre a alguien..), adelante


gracias por leer.

No hay comentarios:

Publicar un comentario