20
Manual corto y basico de Programacion Orientada a Objetos (hecho por mi) Programacion Orientada a objetos: El termino "programacion orientada a objetos" surge del hecho de realizar aplicaciones apoyandose en el paradigma de objetos. Antes que nada... que es un paradigma? Paradigma: "Paradigma es un modelo o patrón en cualquier disciplina científica u otro contexto epistemológico." (Wikipedia). Hablando mal y pronto, paradigma es una manera de pensar el problema, y en funcion de ello, buscar una solucion. Por ejemplo, si pienso en una factura (de esas que te dan cuando compras algo), e intento representarla basandome en el paradigma de objetos, deberia pensarla como: un "objeto factura"... ese objeto tiene ciertas caracteristicas (una fecha, un cliente, un numero de factura, una cantidad determinada de productos, etc). Es decir, deberia pensar en la factura como un objeto compuesto por ciertas caracteristicas. Ahora, dijimos que la factura tenia una determinada cantidad de productos, entonces podriamos pensar a cada producto tambien como un objeto. El "objeto Producto" tiene caracteristicas como: precio de costo, descripcion, proveedor, precio de venta, etc, etc.Redondeando la idea, podemos ver que cada elemento de la realidad que nos rodea, puede ser pensado como objetos (una persona: con caracteristicas como edad, nombre, direccion, estado civil --- Un medio de transporte: con caracteristicas como: velocidad maxima, capacidad maxima de pasajeros, costo, etc). El paradigma de objetos es la forma de pensar a cada elemento del problema que tenemos que resolver, como si fuera un objeto. Existen otros paradigmas, como el paradigma procedural (u orientado a los procedimientos, paradigma logico, paradigma funcional... Algunos conceptos basicos: Que es una clase de objetos?? Antes de explicar que es una clase dentro del paradigma de objetos, pensemos en situaciones reales de la vida cotidiana. El ser humano, por naturaleza, agrupa los objetos de la realidad en "clases de objetos". Por ejemplo, si hablo de un caballo,

Manual Corto y Basico de Programacion Orientada a Objetos

Embed Size (px)

Citation preview

Page 1: Manual Corto y Basico de Programacion Orientada a Objetos

Manual corto y basico de Programacion Orientada a Objetos (hecho por mi)

Programacion Orientada a objetos: El termino "programacion orientada a objetos" surge del hecho de realizar aplicaciones apoyandose en el paradigma de objetos. Antes que nada... que es un paradigma? 

Paradigma: "Paradigma es un modelo o patrón en cualquier disciplina científica u otro contexto epistemológico." (Wikipedia). Hablando mal y pronto, paradigma es una manera de pensar el problema, y en funcion de ello, buscar una solucion. Por ejemplo, si pienso en una factura (de esas que te dan cuando compras algo), e intento representarla basandome en el paradigma de objetos, deberia pensarla como: un "objeto factura"... ese objeto tiene ciertas caracteristicas (una fecha, un cliente, un numero de factura, una cantidad determinada de productos, etc). Es decir, deberia pensar en la factura como un objeto compuesto por ciertas caracteristicas. Ahora, dijimos que la factura tenia una determinada cantidad de productos, entonces podriamos pensar a cada producto tambien como un objeto. El "objeto Producto" tiene caracteristicas como: precio de costo, descripcion, proveedor, precio de venta, etc, etc.Redondeando la idea, podemos ver que cada elemento de la realidad que nos rodea, puede ser pensado como objetos (una persona: con caracteristicas como edad, nombre, direccion, estado civil --- Un medio de transporte: con caracteristicas como: velocidad maxima, capacidad maxima de pasajeros, costo, etc). El paradigma de objetos es la forma de pensar a cada elemento del problema que tenemos que resolver, como si fuera un objeto. Existen otros paradigmas, como el paradigma procedural (u orientado a los procedimientos, paradigma logico, paradigma funcional... 

Algunos conceptos basicos: Que es una clase de objetos??Antes de explicar que es una clase dentro del paradigma de objetos, pensemos en situaciones reales de la vida cotidiana. El ser humano, por naturaleza, agrupa los objetos de la realidad en "clases de objetos". Por ejemplo, si hablo de un caballo, un automovil, un omnibus, un avion y un tren.... podria agrupar todos esos objetos dentro de la clase "medios de transporte". Es decir, aunque cada uno de ellos tenga caracteristicas distintas, todos sirven para transportar personas. Algunos tendran ruedas, otros alas, el caballo tendra piernas, etc. 

Page 2: Manual Corto y Basico de Programacion Orientada a Objetos

Como vimos, el paradigma de objetos, es una manera de pensar o modelar un problema determinado. Hay lenguajes de programación orientados a objetos, como C++, Java, etc.Los objetos son entidades que nos sirven para representar o modelar un problema concreto de la realidad.Bajo estos conceptos mencionados, los objetos, son INSTANCIAS de una determinada clase. Por ejemplo, el objeto "automovil" es una INSTANCIA de la clase "medios de transporte". Los objetos son instancias de una determinada clase.Al tratar cada elemento del problema como si fuera un objeto, y enumerar sus caracteristicas, podemos ver dos grandes categorias: los objetos estan compuestos por dos cosas fundamentales: 

Atributos: Los atributos son las caracteristicas propias de cada objeto. por ejemplos: Persona: edad, altura, sexo, direccion, telefono, nombre, apellido, peso, etc. Automóvil: color, marca, modelo, precio, velocidad maxima, etc. Una venta: cliente al que se le vendio, fecha, hora, total de la venta, cantidad de productos, forma de pago, etc.Los atributos de un objeto en particular, pueden cambiar el valor que contienen, por ejemplo, el atributo edad de un objeto Persona, puede contener el valor 22 (la persona tiene 22 anios), pero obviamente ese valor puede variar en cualquier momento. Los atributos no contienen valores estaticos o fijos, sino que contienen valores que cambian (o pueden cambiar) constantemente. Obviamente hay atributos que no cambian mucho, como por ejemplo el atributo sexo de un objeto persona, puede contener "masculino" o "femenino" pero difícilmente cambie (aunque en estos dias todo es posible), otro ejemplo seria el atributo "cantidad de ruedas" del objeto Motocicleta, que generalmente contiene el valor 2. Los atributos son caracteristicas de los objetos, como vimos en los ejemplos, son bastante sencillos de enumerar. Hay que tener en cuenta que, en funcion del problema que estemos tratando de resolver, hay atributos que debemos descartar. Asi, si estamos desarrollando una aplicacion para un supermercado, el objeto cliente, tendra atributos como Nro. Cliente, nombre, telefono, etc (y hasta direccion de correo por si queremos enviarle un mail para navidad). Pero en este caso, NO nos interesa el peso del cliente, su edad, su presion arterial o el color de su piel (mientras que estos atributos podrian ser utiles si estamos desarrollando una aplicacion para un sistema de historias clinicas, por ejemplo). Esta

Page 3: Manual Corto y Basico de Programacion Orientada a Objetos

posibilidad o habilidad de dejar de lado algunos atributos que no son relevantes para el problema, y concentrarnos en los detalles mas importantes, recibe el nombre de Abstraccion (pero de eso hablaremos mas adelante). 

Metodos: Los metodos, son acciones que los objetos son capaces de llevar a cabo. Por ejemplo, el objeto "Automovil" puede tener un metodo llamado moverse() (los parentesis al final son una manera de denotar un metodo), el cual modificara el atributo "ubicacion", o un objeto "Persona", puede tener un metodo que se llame cumplirAnios(), este metodo, aumentara en una unidad el valor el atributo edad. En el paradigma de objetos, se dice que los objetos se comunican entre si, enviandose mensajes. Entenderemos ahora que son los mensajes. 

Mensajes: Un mensaje es una solicitud que se realiza a un objeto para que ejecute un bloque de codigo determinado. Como es esto? Si recordamos todo lo que vimos hasta ahora podriamos resumir lo siguiente: un objeto tiene atributos (que son las caracteristicas propias de cada objeto) y metodos (acciones que el objeto puede llevar a cabo). Entonces, un mensaje es un pedido para que el objeto ejecute uno de sus metodos. Veamos un ejemplo que unifique las tres ideas. 

EJEMPLO PARA UNIFICAR IDEAS El objeto en cuestion es el objeto Persona... este, tiene los siguientes atributos: Edad: 20 Nombre: Federico Alem Dirección: Chubut 19 fecha-nacimiento: 17/06/1986y ademas los siguientes metodos: cumplirAnios() mudarse(nueva direccion) <---- notese que este metodo nos pide la nueva direccion (mas adelante vamos a ver como funciona esto) fecha-nacimiento()El primer método, hara que el atributo Edad sume una unidad a su valor actual (cabe aclarar que no puede tener un valor negativo, por ejemplo).El segundo metodo, hara que el atributo Direccion cambie por el nuevo valor que le pasamos entre parentesis. Este valor se denomina PARÁMETRO o ARGUMENTO. Es decir, el atributo tiene el valor "Chubut 19", pero si nosotros llamamos al metodo mudarse("Corrientes 2315" ), este mismo tomara dicho valor pasado entre parentesis.El tercer método, nos devolvera la fecha de nacimiento de la persona. Es decir, cuando lo llamemos, nos devolvera 17/06/1986.Ya que vimos los metodos y los atributos, veamos como se implementan los mensajes. Para "enviarle" mensajes a un objeto se utiliza la forma OBJETO.MENSAJE (objetoPUNTOmensaje), es decir, en nuestro ejemplo actual podria

Page 4: Manual Corto y Basico de Programacion Orientada a Objetos

darse ersona.cumplirAnios()o tambiénPersona.fecha-nacimiento()Cuando un objeto recibe un mensaje, busca dentro de sus metodos a aquel que coincida con el nombre del mensaje y ademas con el numero y tipo de parametros. Veamos un ejemplo para esto. Sigueiendo el ejemplo anterior, el objeto Persona tiene un metodo que se llama mudarse. Cuando este objeto

Page 5: Manual Corto y Basico de Programacion Orientada a Objetos

recibe el mensaje "mudarse" ==> Persona.mudarse("Chaco 882" ), entonces este objeto busca dentro de sus metodos a aquel que se llame "mudarse", pero que ademas reciba SOLO UN parametro, y que ademas, ESE PARÁMETRO SEA DE TIPO STRING (o cadena de caracteres).Podria darse el caso de que dos metodos tengan el mismo nombre, pero tengan cantidades distintas de argumentos... o teniendo el mismo numero de argumentos, estos sean de tipos distintos. Por esto que acabamos de decir, todos los metodos descritos a continuación son distintos:mudarse("Chubut 1918" ) <== recibe 1 parametro de tipo Stringmudarse("Chubut", 1918) <== recibe 2 parametros, un String y un enteromudarse("Chubut", 1918, 1, "B" ) <== recibe 4 parametros... el nombre de la calle, el numero de puerta, el nro de piso, y la letra de departamento. (si vive en un edificio)Y asi muchos casos mas. Entonces, es facil notar, que cuando un objeto recibe un mensaje, busca su metodo que coincida con la cantidad y tipo de parametros recibidos. Asi, si escribimos Persona.mudarse("Corrientes 1918" ) el objeto ejecutara su primer metodo, mientras que si escribimosPersona.mudarse("Buenos Aires", 2344, 4, "A" ), se llamara al tercer metodo, que recibe 4 parametros (un String, dos enteros, y otro String al final)Hasta aca la primera parte de Programacion Orientada a Objetos. Cualquier

pregunta, sugerencia, critica o correccion es bienvenida, como asi tambien los

comentarios. Manual corto y basico de Programacion Orientada a Objetos (hecho por mi)

Programacion Orientada a objetos: El termino "programacion orientada a objetos" surge del hecho de realizar aplicaciones apoyandose en el paradigma de objetos. Antes que nada... que es un paradigma? 

Paradigma: "Paradigma es un modelo o patrón en cualquier disciplina científica u otro contexto epistemológico." (Wikipedia). Hablando mal y pronto, paradigma es una manera de pensar el problema, y en funcion de ello, buscar una solucion. Por ejemplo, si pienso en una factura (de esas que te dan cuando compras algo), e intento representarla basandome en el paradigma de objetos, deberia pensarla como: un "objeto factura"... ese objeto tiene ciertas caracteristicas (una fecha, un cliente, un numero de factura, una cantidad determinada de productos, etc). Es decir, deberia pensar en la factura como un objeto compuesto por ciertas caracteristicas. Ahora, dijimos que la factura tenia una determinada cantidad de productos, entonces podriamos pensar a cada producto tambien como un objeto. El "objeto Producto" tiene caracteristicas como: precio de costo, descripcion, proveedor, precio de venta, etc, etc.Redondeando la idea, podemos ver que cada elemento de la realidad que nos rodea, puede ser pensado como objetos (una persona: con caracteristicas como edad, nombre, direccion, estado civil --- Un medio de transporte: con caracteristicas como: velocidad maxima, capacidad maxima de pasajeros, costo, etc). El paradigma de objetos es la forma de pensar a cada elemento del problema que tenemos que resolver, como si fuera un objeto. Existen otros paradigmas, como el paradigma procedural (u orientado a los procedimientos, paradigma

Page 6: Manual Corto y Basico de Programacion Orientada a Objetos

logico, paradigma funcional... 

Algunos conceptos basicos: Que es una clase de objetos??Antes de explicar que es una clase dentro del paradigma de objetos, pensemos en situaciones reales de la vida cotidiana. El ser humano, por naturaleza, agrupa los objetos de la realidad en "clases de objetos". Por ejemplo, si hablo de un caballo, un automovil, un omnibus, un avion y un tren.... podria agrupar todos esos objetos dentro de la clase "medios de transporte". Es decir, aunque cada uno de ellos tenga caracteristicas distintas, todos sirven para transportar personas. Algunos tendran ruedas, otros alas, el caballo tendra piernas, etc. 

Como vimos, el paradigma de objetos, es una manera de pensar o modelar un problema determinado. Hay lenguajes de programación orientados a objetos, como C++, Java, etc.Los objetos son entidades que nos sirven para representar o modelar un problema concreto de la realidad.Bajo estos conceptos mencionados, los objetos, son INSTANCIAS de una determinada clase. Por ejemplo, el objeto "automovil" es una INSTANCIA de la clase "medios de transporte". Los objetos son instancias de una determinada clase.Al tratar cada elemento del problema como si fuera un objeto, y enumerar sus caracteristicas, podemos ver dos grandes categorias: los objetos estan compuestos por dos cosas fundamentales: 

Atributos: Los atributos son las caracteristicas propias de cada objeto. por ejemplos: Persona: edad, altura, sexo, direccion, telefono, nombre, apellido, peso, etc. Automóvil: color, marca, modelo, precio, velocidad maxima, etc. Una venta: cliente al que se le vendio, fecha, hora, total de la venta, cantidad de productos, forma de pago, etc.Los atributos de un objeto en particular, pueden cambiar el valor que contienen, por ejemplo, el atributo edad de un objeto Persona, puede contener el valor 22 (la persona tiene 22 anios), pero obviamente ese valor puede variar en cualquier momento. Los atributos no contienen valores estaticos o fijos, sino que contienen valores que cambian (o pueden cambiar) constantemente. Obviamente hay atributos que no cambian mucho, como por ejemplo el atributo sexo de un objeto persona, puede contener

Page 7: Manual Corto y Basico de Programacion Orientada a Objetos

"masculino" o "femenino" pero difícilmente cambie (aunque en estos dias todo es posible), otro ejemplo seria el atributo "cantidad de ruedas" del objeto Motocicleta, que generalmente contiene el valor 2. Los atributos son caracteristicas de los objetos, como vimos en los ejemplos, son bastante sencillos de enumerar. Hay que tener en cuenta que, en funcion del problema que estemos tratando de resolver, hay atributos que debemos descartar. Asi, si estamos desarrollando una aplicacion para un supermercado, el objeto cliente, tendra atributos como Nro. Cliente, nombre, telefono, etc (y hasta direccion de correo por si queremos enviarle un mail para navidad). Pero en este caso, NO nos interesa el peso del cliente, su edad, su presion arterial o el color de su piel (mientras que estos atributos podrian ser utiles si estamos desarrollando una aplicacion para un sistema de historias clinicas, por ejemplo). Esta posibilidad o habilidad de dejar de lado algunos atributos que no son relevantes para el problema, y concentrarnos en los detalles mas importantes, recibe el nombre de Abstraccion (pero de eso hablaremos mas adelante). 

Metodos: Los metodos, son acciones que los objetos son capaces de llevar a cabo. Por ejemplo, el objeto "Automovil" puede tener un metodo llamado moverse() (los parentesis al final son una manera de denotar un metodo), el cual modificara el atributo "ubicacion", o un objeto "Persona", puede tener un metodo que se llame cumplirAnios(), este metodo, aumentara en una unidad el valor el atributo edad. En el paradigma de objetos, se dice que los objetos se comunican entre si, enviandose mensajes. Entenderemos ahora que son los mensajes. 

Mensajes: Un mensaje es una solicitud que se realiza a un objeto para que ejecute un bloque de codigo determinado. Como es esto? Si recordamos todo lo que vimos hasta ahora podriamos resumir lo siguiente: un objeto tiene atributos (que son las caracteristicas propias de cada objeto) y metodos (acciones que el objeto puede llevar a cabo). Entonces, un mensaje es un pedido para que el objeto ejecute uno de sus metodos. Veamos un ejemplo que unifique las tres ideas. 

EJEMPLO PARA UNIFICAR IDEAS El objeto en cuestion es el objeto Persona... este, tiene los siguientes atributos: Edad: 20 Nombre: Federico Alem Dirección: Chubut 19 fecha-nacimiento: 17/06/1986y ademas los siguientes metodos: cumplirAnios() mudarse(nueva direccion) <---- notese que este metodo nos pide la nueva direccion (mas adelante vamos a ver como funciona esto) fecha-nacimiento()El primer método, hara que el atributo Edad sume una unidad a su valor actual (cabe aclarar que no puede tener un valor negativo, por ejemplo).El segundo metodo, hara que el atributo Direccion cambie por el nuevo valor que le pasamos entre parentesis. Este valor se denomina PARÁMETRO o ARGUMENTO. Es decir, el atributo tiene el valor "Chubut 19", pero si nosotros llamamos al metodo mudarse("Corrientes 2315" ), este mismo tomara dicho valor pasado entre parentesis.El tercer método, nos devolvera la fecha de nacimiento de la persona. Es decir, cuando lo llamemos, nos devolvera 17/06/1986.Ya que vimos los metodos y los atributos, veamos como se implementan los mensajes. Para "enviarle" mensajes a un objeto se utiliza la forma OBJETO.MENSAJE (objetoPUNTOmensaje), es decir, en nuestro ejemplo actual podria darseersona.cumplirAnios()o tambiénPersona.fecha-nacimiento()Cuando un objeto recibe un mensaje, busca dentro de sus metodos a aquel que coincida con el nombre del mensaje y ademas con el numero y tipo de parametros. Veamos un ejemplo para esto. Sigueiendo el ejemplo anterior, el objeto Persona tiene un metodo que se llama mudarse. Cuando este objeto recibe el mensaje "mudarse" ==> Persona.mudarse("Chaco 882" ), entonces este objeto busca dentro de sus metodos a aquel que se llame "mudarse", pero que ademas reciba SOLO UN parametro, y que ademas, ESE PARÁMETRO SEA DE TIPO STRING (o cadena de

Page 8: Manual Corto y Basico de Programacion Orientada a Objetos

caracteres).Podria darse el caso de que dos metodos tengan el mismo nombre, pero tengan cantidades distintas de argumentos... o teniendo el mismo numero de argumentos, estos sean de tipos distintos. Por esto que acabamos de decir, todos los metodos descritos a continuación son distintos:mudarse("Chubut 1918" ) <== recibe 1 parametro de tipo Stringmudarse("Chubut", 1918) <== recibe 2 parametros, un String y un enteromudarse("Chubut", 1918, 1, "B" ) <== recibe 4 parametros... el nombre de la calle, el numero de puerta, el nro de piso, y la letra de departamento. (si vive en un edificio)Y asi muchos casos mas. Entonces, es facil notar, que cuando un objeto recibe un mensaje, busca su metodo que coincida con la cantidad y tipo de parametros recibidos. Asi, si escribimos Persona.mudarse("Corrientes 1918" ) el objeto ejecutara su primer metodo, mientras que si escribimosPersona.mudarse("Buenos Aires", 2344, 4, "A" ), se llamara al tercer metodo, que recibe 4 parametros (un String, dos enteros, y otro String al final)Hasta aca la primera parte de Programacion Orientada a Objetos. Cualquier pregunta, sugerencia, critica o correccion es bienvenida, como asi tambien los comentarios. 

Manual corto y basico de Programacion Orientada a Objetos (hecho por mi) 

Lo que vimos hasta ahora En la primera parte de este post (http://www.taringa.net/posts/apuntes-y-monografias/10716721/Programacion-Orientada-a-Objetos_-Corto-y-Basico_-Parte-1.html) hemos visto conceptos basicos del paradigma de objetos tales como: que es una clase, que es un objeto, que es un mensaje, etc. En esta parte, voy a explicar conceptos un poco mas avanzados, como por ejemplo la HERENCIA y el POLIMORFISMO, como asi tambien que es un metodo, un evento, la diferencia entre metodo y mensaje, la abstraccion, el encapsulamiento, la modularidad, la recoleccion de basura, entre otros. 

Conceptos necesarios antes de empezar 

Diferencia entre Metodo y Mensaje. Que es un Evento Como habiamos visto en la primera parte de este post, un Metodo, es un bloque de codigo encargado de realizar alguna tarea especifica. Por ejemplo, un objeto de la clase Medios de Transporte podria ser un automovil. Veamos como se compone este objeto Automovil 

OBJETO AUTOMOVIL: Atributos: - Capacidad_de_personas - Velocidad_Actual - Velocidad_Maxima - Cantidad_de_ puertas Metodos: + Acelerar(cuantos_km/h) + Detenerse() + Ir_a(lugar) ..... 

.....Como vemos en este ejemplo, el objeto Automovil esta compuesto por Atributos y Metodos. Como dijimos, los metodos son bloques de codigo encargados de realizar alguna tarea especifica. Para ejemplificar esto, vamos a ver el codigo del metodo Acelerar(cuantos_km/h)... 

Page 9: Manual Corto y Basico de Programacion Orientada a Objetos

Acelerar(cuantos_km/h){ Velocidad_Actual = Velocidad_Actual + cuantos_km/h ; } 

Este metodo es el encargado de aumentar la velocidad del objeto Automovil, es decir, tiene un bloque de codigo que aumenta en "cuantos_km/h" unidades la velocidad actual del objeto.Entonces.... un metodo es una pequena porcion de codigo que generalmente modifica el estado interno del objeto (sus atributos), y digo "generalmente" porque podria no siempre lo hace... un metodo podria simplemente ser el encargado de mostrar un mensaje por pantalla, o devolver ciertos valores, etc. Ahora... cual es la diferencia entre un metodo y un mensaje?? Es simple, un metodo es la IMPLEMENTACION DE UN MENSAJE. Como es esto? Un mensaje es una solicitud a un objeto para que ejecute alguno de sus metodos. Cuando escribimos Automovil.Acelerar(32), lo que estamos haciendo es decirle al objeto Automovil que aumente su velocidad en 32 unidades, mediante la ejecucion del metodo Acelerar(cuantos_km/h). Cuando un objeto recibe un mensaje, busca entre sus metodos aquel que coincida con el NOMBRE DEL MENSAJE, LA CANTIDAD DE PARAMETROS, y el TIPO DE DATOS DE ESOS PARAMETROS. Es decir, si encuentra al metodo que coincida exactamente con esas tres cosas, lo ejecutara. A esto se denomina FIRMA DEL MENSAJE, o SIGNATURA DEL MENSAJE (nombre, cantidad de parametros y tipo de datos de los mismos). 

Evento La programacion orientada a objetos no necesariamente necesita de eventos. Un evento es una accion que ocurre en un momento determinado del tiempo, ya sea por accion del usuario, o porque la propia PC lo genera. Por ejemplo, cuando hacemos click con el mouse... eso es un evento, cuando presionamos una tecla del teclado... eso es un evento, cuando minimizamos una ventana... eso es un evento, etc, etc, etc. Es asi que cada accion que llevamos a cabo en la PC es tomado por la misma como un evento. Pero tambien existen eventos generados por la PC, como por ejemplo, la finalizacion de un determinado lapso de tiempo (temporizador).Que tiene que ver esto con la POO?? Muy simple, la POO se utiliza generalmente de manera conjunta o acompanada de la PROGRAMACION GUIADA POR EVENTOS. Cuando un evento ocurre, se invoca a un metodo determinado. Por ejemplo, cuando hago click en el boton Minimizar de cualquier ventana, se envia un Mensaje al objeto VENTANA para que ejecute su metodo Minimizar()... Mas simple imposible! 

Abstraccion La abstraccion es una propiedad que permite en programacion, tomar informacion relevante, y descartar aquellos detalles que no son importantes en el ambito del problema. Es decir, pensemos que debemos contruir una clase que se llame Pacientes, para una aplicacion de un consultorio medico (de esos tipicos que usan las secretarias para asignar turnos). Pensariamos entonces en que propiedades de los pacientes nos interesan... Edad, Peso, Antecedentes medicos, Altura, Direccion (para enviarle una linda postal a fin de anio), y Telefono. Si observamos bien, todos estos ATRIBUTOS del objeto PACIENTE son relevantes para un consultorio medico. Nos interesaria agregar el ATRIBUTO Ingresos_Mensuales?? Y... la verdad que no, para que querria un medico tener dicha informacion (dejemoslo ahi jaja). En conclusion, la abstraccion nos permite centrarnos en los detalles inherentes al problema, dejando de lado detalles que no lo son. Tambien se denomina abstraccion a una propiedad que tienen los METODOS. Cuando hablabamos del metodo Acelerar(cuantos_km/h), sabiamos que si lo llamabamos, y le pasabamos una velocidad determinada entre parentesis, el objeto Automovil aceleraria. Pero nada sabiamos acerca de como lo hace... es decir, la forma en que este metodo lleva a cabo su tarea es irrelevante (si tuvieramos un empleado que nos prepara el desayuno todas las mananas, nos daria lo mismo que preparara primero el cafe, y luego agregue mermelada a las tostadas o viceversa, siempre que el desayuno llegue caliente y

Page 10: Manual Corto y Basico de Programacion Orientada a Objetos

delicioso a la cama... no es asi??) Entonces, no deberia importar como un metodo lleva a cabo su tarea, sino que la realice correctamente. El metodo anterior:Acelerar(cuantos_km/h){ Velocidad_Maxima = Velocidad_Maxima + cuantos_km/h ;}tranquilamente pudo haber sido asi:Acelerar(a_que_velocidad){ Velocidad_Actual = a_que_velocidad ;}Es decir, no nos interesa la forma en que el metodo realiza su tarea... lo unico que nos interesa es que ese metodo acelera la velocidad del objeto automovil. A este "ocultamiento de detalles" se denomina tambien abstraccion. Algunos autores llaman a esto ENCAPSULAMIENTO y a veces se suelen confundir, pero basicamente, el concepto es el mismo (o puede encontrarse con ambos nombres). 

Herencia Y por fin llegamos al concepto de herencia, uno de los mas faciles de explicar, pero que trae aparejado muchos otros conceptos.Sin entrar en POO, pensemos en el concepto de Herencia (sin ser la economica). Cuando nacemos, tenemos ciertas caracteristicas, que segun nuestros padres heredamos de alguno de los dos (eventualmente de los abuelos) como por ejemplo el color de ojos, el caracter, la altura, ciertas destrezas, etc. En POO sucede lo mismo con las clases de objetos... ciertas clases heredan de otras, metodos y atributos, conformandose asi una JERARQUIA DE CLASES... pero vamos despacio: Pensemos en la clase MediosDeTransporte: 

MediosDeTransporte{ Atributos: - velocidadMaxima; - capacidadPersonas; - autonomia; - tipoCombustible Metodos: + Acelerar(cuantos_km/h) + Detenerse() + Ir_a(lugar) } 

Esta clase servira como CLASE BASE o CLASE PADRE para otras. Esto quiere decir que podemos hacer otras clases que contengan todos los metodos y atributos que la anterior, PERO QUE ADEMAS TENGAN METODOS Y ATRIBUTOS PROPIOS. Veamos dos ejemplos de clases que hereden de la clase MediosDeTransporte... 

Caballo{ Atributos: - velocidadMaxima; - capacidadPersonas; - autonomia; - tipoCombustible - Raza - Edad Metodos: + Acelerar(cuantos_km/h) + Detenerse() + Ir_a(lugar) + ComerPasto + Dormir } 

Page 11: Manual Corto y Basico de Programacion Orientada a Objetos

Motocicleta{ Atributos: - velocidadMaxima; - capacidadPersonas; - autonomia; - tipoCombustible - Marca - Cilindrada Metodos: + Acelerar(cuantos_km/h) + Detenerse() + Ir_a(lugar) + RealizarMantenimiento + EncenderLuces } 

Creo que en el ejemplo quedo mas que claro... la herencia se utiliza para dos cosas fundamentales. Primero, para ahorrarse el trabajo de programar o codificar dos clases que tienen los mismos metodos y atributos, haciendolo solo una vez en la clase PADRE, y luego declarando en las clases HIJAS que heredan de su PADRE. Con esto se consigue que una clase tenga los mismos metodos y atributos que su padre, pero que ademas pueda agregar los suyos. La otra finalidad que persigue la herencia es una correcta organizacion en la Jerarquia de Clases, haciendo mas entendible el modelado del problema. ACLAREMOS CIERTAS COSAS: Cuando una clase PADRE tiene un metodo (por ejemplo Acelerar(cuantos_km/h)), la clase HIJA puede modificar varias cosas: por un lado, puede dejar intacta la firma del metodo (nombre y cantidad y tipo de parametros) pero modificar su funcionamiento interno, es decir, cambiar la forma en la que el metodo cumple con su tarea. Este mecanismo se conoce como ESPECIALIZACION debido a que las clases hijas, ESPECIALIZAN la forma de actuar de los metodos heredados. Por ejemplo, si en la clase PADRE MediosDeTransporte existe un metodo denominado CargarCombustible... pensemos que si una clase HIJA llamada Automovil debe hacerlo, debera incrementar el numero de litros de combustible en su deposito, mientras que si pensamos en una clase HIJA llamada Caballo, deberiamos incrementar el numero de kilogramos de pasto en su estomago (que ocurrente el ejemplo no? jaja). Es asi que las clases HIJAS que HEREDAN de sus clases PADRES pueden ESPECIALIZAR ciertos metodos en funcion de las necesidades especificas de cada una de ellas.Ademas de modificar solo el funcionamiento de un metodo heredado, las clases HIJAS tambien pueden modificar la cantidad y/o el tipo de parametros que recibe dicho metodo, manteniendo intacto el nombre del mismo. A este metodo se lo denominaSOBRECARGA DE METODOS, y se da cuando una clase HIJA cambia la cantidad y/o los tipos de parametros que este recibe.Pueden existir en una clase dos metodos con el mismo nombre, pero ambos difieren en el tipo y/o cantidad de parametros que reciben, entonces se dice que ese metodo esta SOBRECARGADO. Cuando un objeto recibe un mensaje, buscara entre sus metodos (y ejecutara) aquel que coincida en el nombre, pero ademas en el tipo y la cantidad de parametros.Supongamos que un objeto recibe un mensaje cualquiera... AUTOMOVIL.ACELERAR(20km/h)... que sucede si este objeto no cuenta con un metodo que coincida en el nombre o en el tipo y cantidad de parametros?? Buena pregunta no? Lo que sucede en este caso es que el objeto empezara a buscar entre sus propios metodos, y si no lo encuentra lo buscara entre los metodos de su clase padre... y si no lo encuentra buscara entre los metodos de su clase abuelo... y asi sucesivamente hasta llegar a la clase RAIZ. En caso de no encontrar el metodo, devolvera un error diciendonos que ese metodo no ha sido encontrado. A este mecanismo de busqueda hacia arriba en la jerarquia de clases se denomina LOOK-UP o simplemente "Busqueda hacia arriba". 

Page 12: Manual Corto y Basico de Programacion Orientada a Objetos

Modularidad Este concepto es mas sencillo, y viene del viejo dicho "DIVIDE Y TRIUNFARAS". Se trata de un concepto que implica dividir el GRAN problema en muchas partes PEQUENAS, a fin de que cada una de ellas sea mas facil de manejar y sea o este especializada en una tarea particular. Pensemos en la construccion de un edificio, donde cualquier persona hace lo que quiere... el arquitecto colocando los ceramicos, el electricista pintando las paredes... seria un completisimo desastre no? En la POO pasa lo mismo. Cuando modelamos una serie de clases de objetos, con sus respectivos metodos y atributos, debemos pensar en dividir el problema en muchas partes pequenas... siguiendo el ejemplo del edificio deberiamos pensar en una clase "Obreros" y dentro de ella SUBCLASES o CLASES HIJAS que se encarguen respectivamente de colocar ceramicos, otra de preparar el cemento, otra de armar las columnas, etc... mientras otra clase Electricista tendra SUBCLASES que se encargaran de pasar cables, otras de colocar lamparitas, etc. Este concepto nos estimula a organizar las clases para que el modelado sea: mas entendible, mas util, y con menor redundancia, logrando el desempeno optimo y una mejor especializacion de cada clase. 

Recoleccion de Basura Tambien denominado Garbage Collector, es un metodo de "limpieza de memoria". Cuando corremos una aplicacion que respeta el paradigma de objetos, cada objeto que es creado durante la ejecucion va a parar a memoria principal... entonces, que pasaria si ejecutamos nuestra aplicacion un tiempo prolongado?? la respuesta mas sencilla seria "La memoria se va a llenar y ya no se podran seguir cargando objetos en ella". Es por esto, que existe lo que se denomina Recolector de Basura, y consiste en un mecanismo de eliminacion de objetos que ya no se utilizan en memoria con el objeto de optimizar el uso de la misma. 

POLIMORFISMO Que raro suena esto... no? Aunque suene raro, su definicion es bastante simple... El POLIMORFISMO es la capacidad que tienen objetos de diferentes clases de responder a mensajes con el mismo nombre. Ejemplifiquemoslo: 

Una clase CAJA_AHORRO: posee el metodo extraerDinero(cuanto) Una clase CUENTA_CORRIENTE: tambien posee el metodo extraerDinero(cuanto) 

Tengamos en cuenta que las dos clases son totalmente distintas. Solo a MODO DE EJEMPLO vamos a decir que cuando extraemos dinero de una CAJA_AHORRO se resta el monto que extraemos del dinero disponible en ella (como lamentablemente sucede en la realidad jaja)... mientras que si extraemos dinero de una CUENTA_CORRIENTE, ademas de restarse el dinero que extraemos, el banco nos cobra una comision de $10. Vamos a ver como podrian ser estos metodos: ----------------------------------------------------------------------------------------------------- Metodo extraerDinero(cuanto) de la clase CAJA_AHORRO: extraerDinero(cuanto){ saldoDisponible = saldoDisponible - cuanto; } ----------------------------------------------------------------------------------------------------- Metodo extraerDinero(cuanto) de la clase CUENTA_CORRIENTE: extraerDinero(cuanto){ saldoDisponible = saldoDisponible - cuanto - 10; } ----------------------------------------------------------------------------------------------------- 

Page 13: Manual Corto y Basico de Programacion Orientada a Objetos

Ahora, supongamos que tenemos que hacer el balance diario de los movimientos de todas las cuentas del banco, y para ello, vamos leyendo de un archivo una por una las cuentas (ya sean cajas de ahorro o cuentas corrientes). 

He aqui donde aparece el POLIMORFISMO.... Primero leo una cuenta a la vez del archivos de cuentas y lo guardo en un objeto... 

nuevaCuenta = cuentas.leerSiguiente() 

y ahora magicamente puedo hacer lo siguiente: 

nuevaCuenta.extraerDinero(cuanto) 

La pregunta es... Como puedo saber si la cuenta que lei del archivo es una CAJA_AHORRO o una CUENTA_CORRIENTE?? 

La respuesta es simple: NO ME INTERESA!! Porque ambas clases poseen el metodo extraerDinero(cuanto), mas alla que cada una de ellas haga cosas distinas. Entonces, el POLIMORFISMO, como dije antes, es la capacidad que tienen objetos de diferentes clases de responder a mensajes con el mismo nombre, lo cual es extremadamente util en ciertas ocaciones (como en el ejemplo anterior). Un mensaje con la misma firma puede ser entendido por objetos de distintas clases, aunque cada uno de ellos tenga un metodo asociado distinto. Recordemos que un metodo es la implementacion de un mensaje, por lo tanto cada una de las clases tendra maneras distintas de implemetar dicho mensaje, pero con seguridad sabemos que lo entendera. 

Bueno, con esto creo que queda bastante mas claro y mas completo el primer post. De todas maneras, y como dije antes, cualquier consulta no duden en preguntarme en los comentarios y respondere alli, de tal manera que todos puedan ver la pregunta y la respuesta. Espero haberme explicado bien y que les haya servido. 

Que son las funciones Las funciones son bloques de codigo encargados de realizar una tarea determinada, y como resultado devuelven un valor. Este valor puede ser numerico, una cadena de texto, de tipo booleano, etc. Un claro ejemplo de como funciona una funcion (valga la redundancia) es el de calcularEdad() Suele suceder que entre los datos que manejamos en una aplicacion tengamos la fecha de nacimiento de un cliente, paciente, etc. Sabemos que esos datos van a permanecer en nuestra aplicacion durante un tiempo bastante prolongado, por lo que guardar la edad no seria factible, ya que al pasar un anio, dicho dato seria erroneo, y tambien seria tedioso tener que actualizar la edad de cada cliente de nuestra base de datos una vez por anio. Para casos como este (y muchos otros) existen las funciones, que como dije antes, reciben ciertos parametros (o argumentos), realizan cierto procesamiento y devuelven un resultado que puede ser de algun tipo de datos en particular. Veamos este ejemplo... 

DATOS DE NUESTRO CLIENTE: Nro. de Cliente: 100 Nombre: Federico Alem Domicilio: Chubut 1918 Fecha de Nacimiento: 17/06/1986 

En alguna parte de la aplicacion supongamos que queremos mostrar la leyenda 

Page 14: Manual Corto y Basico de Programacion Orientada a Objetos

EL CLIENTE NRO. XXX SE LLAMA XXXX, VIVE EN XXXXX Y TIENE XX ANIOS. 

La pregunta seria... Como calculo la edad? Para ello disponemos de las funciones. Esta podria ser: 

Public Function calcularEdad(byVal fecNac as Date) as Integer Dim edad as integer edad = date.today().year - cliente.fecNac().year Return edad End Function 

O lo que podria ser mas corto... 

Public Function calcularEdad(byVal fecNac as Date) as Integer Return (date.today().year - cliente.fecNac().year) End Function 

(en el ejemplo use la sintaxis de Visual Basic... hace un tiempo que no programo en ese lenguaje asi que perdon por algun posible error de sintaxis, pero creo que la idea se entiende) 

Notese que en el primer ejemplo, se define una funcion que se llama calcularEdad y como argumento recibe por valor (esto lo explico mas adelante) una variable de tipo Date (o fecha). De este valor, que posiblemente tenga esta forma DD/MM/AAAA se rescata solo la parte final (AAAA), es decir el anio de nacimiento. La resta entre este valor y el anio actual se guarda en una variable de tipo Integer (del mismo tipo de dato que el valor que devuelve la funcion). Luego obviamente se lo retorna mediante Return. Sin embargo, en el segundo ejemplo no se define una variable, por lo que el tipo de dato se "induce", es decir, si resto un numero entero con otro numero entero, el resultado sera... Y SI!!! Otro numero entero. Hay que tener cuidado de retornar siempre el mismo tipo de dato que se declaro en la firma de la funcion, ya que pueden pasar dos cosas: 1) El tipo de datos que intentamos retornar es el mismo que el declarado en la funcion... TODO FUNCIONA 2) El tipo de datos que intentamos retornar NO es el mismo que el declarado en la funcion... en este caso, el compilador intentara convertir el valor que estamos intentando retornar a Integer (esto funciona si le pasamos un double, single o hasta un string con numeros), pero si le pasamos otro tipo de datos NO CONVERTIBLE a enteros, nos dara error... OJO CON ESO!! 

PROCEDIMIENTOS: Paso por valor y por referencia Cuando llamamos a un procedimiento, generalmente le pasamos valores como argumentos. Estos pueden ser por valor o por referencia. Cual es la diferencia? (me salio un verso sin esfuerzo... jaja estoy re chistoso hoy) 

Supongamos la siguiente situacion... Tenemos un objeto llamado Cliente con atributos Nombre y Edad Este objeto esta almacenado en memoria principal si llamamos a un metodo y le pasamos el atributo edad POR VALOR, se creara una copia del valor del Atributo Edad en memoria (es decir, en otro lugar de memoria) por lo que cualquier cambio que hagamos con ese valor, no afectara al valor real del atributo Edad, ya que estamos manejando una COPIA DE ESE VALOR EN MEMORIA. Por el contrario, si pasamos el valor del atributo Edad por REFERENCIA, lo que hacemos realmente es pasar como argumento la direccion fisica de donde se encuentra el atributo Edad, por lo que cualquier cambio que realicemos a este valor TAMBIEN AFECTARA O HARA CAMBIAR el valor del atributo. Espero haberme explicado correctamente. Cualquier duda... ya saben.