miércoles, 21 de noviembre de 2007

Tema 4: POO

Ruby reclama ser un lenguaje de guinoes orientado a objetos, pero ¿Qué signifca exactamente "oreintado a objetos"?

Tradicionalmente, un problema informático se ataca produciendo algún tipo de representación de datos y procedimientos que operan sobre esos datos. Bajo este modelo, los datos son inertes, pasivos e incapacs. Completamente a merced de un gran cuerpo procedimenta, que es activo, lógico y todopodero.

A medida que crece el proyecto, empiezan a surgir interacciones complejas e inintencionadas dentro del núcleo. Existen políticas de porgramación que ayudan a minimizar y localizar errores dentro de este paradgnma pero existe una solución mejor que pasa fundamentalmente opr cambiar la forma de trabjar.

La programación orietada a objetos, es delegar la mayoría del trabajo mundano y repetitio a los propios datos; modifica el concepto de los datos que pasan de pasivos a activos. Es decir:

-Dejamos de tratar cada pieza de dato como una caja en la que se puede abrir su tapa y arrojar cosas en ella.
-Empezamos a tratar cada piexa de dato como una máquina funcional cerrada con uno pocos interruptores y diales bien definidos.

El patrón es lo que se conoce como clase y lo obtenido por ese patrón se conoce como objeto. La mayoría de los lenguajes OO necesitan una clase para tener un nuevo tipo de objeto pero Ruby no.
Conviene resaltar que la utilización de un lenguaje OO no obliga a un diseño OO válido. Lo que permite Ruby es que la práctica de la programación OO sea lo suficientemente natural para qeu, incluso, tabajando a pequeña escal no se sietna la necesidad de recurrir a un código mal estructurado por evitar.

En esta programación no se piensa en operar sobre los datos directamente desde el exterior de un objeto. Podríamos decir que se pasa un mensaje al objeto y este mensaje obtiene algún tipo de acción o respuesta significativa. las tareas qeu podemos pedir que un objeto realice son los métodos. En Ruby, se llama a un método con la notación punto. Este puede variar dependiendo del objeto con el que nos comunicamos, las piezas de datos llevan consigo ese conocimiento por lo que las solicitudes que se les hace se pueden satisfacer en las diferentes formas adecuadas. Esta característica de los lenguajes OO, se conoce com polimorismo, cuando un objeto recibe un mensaje que no conoce, "salta" un error.

En ruby existe una variable especial self que referencia al objeto que llama a un método.

La definición de los metodos es la regíon de codigo que se encuntra entre def seguido del nombre del método y la clave end.Ruby no utiliza llaves para delimitar los cuerpos de sentencias y definiciones compuestas, se finaliza siempre con la palabra clave end.

En terminología OO, una categoría de objetos se denomina clase y cualquier objeto determinado que pertenece a un aclase se conoce como instancia de esa clase.
Generalmente, se define primero las características de una clase, luego se crean las instancias. Un ejemplo

class Perro
def ladra
print "guau guau \n"
end
end

El método new de cualquier clase, crea una nueva instancia. La creación de una instancia de una clase se conoce, como instanciación.
Las propiedades o atributos son las características de los objetos. Hay tres formas de declarar un atributo:

escritura -> attr_writter :nombre
lectura -> attr_reader :nombre
ambos -> attr_accessor :nombre

Cuando declaro un atributo me genera su getter y su setter de forma automática. Si el atributo es declarado de modo de lectura solo genera getter. Para sobreescribir el método getter o setter:

def nombre_atributo
...
end
def nombre_atributo=(parámetro)
...
end

El método initialize si esta definido se ejecutara al crear una instancia de la clase. Esto nos da la oportunidad de escribir código que establezca el estado del objeto

def
initialize
...
end

No hay comentarios: