Sei sulla pagina 1di 12

Programació n

orientada a objetos con


Java
La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un
paradigma de programación que usa objetos y sus interacciones, para diseñar
aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo
herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a
principios de la década de los años 1990. En la actualidad, existe variedad de
lenguajes de programación que soportan la orientación a objetos. + Wikkipedia.

¿Que es un objeto?
Un objeto es una representación detallada, concreta y particular de un "algo". Tal
representación determina su identidad, su estado y su comportamiento particular en
un momento dado.
Quizas decir que es una representación de un “algo” suene un tanto vaga, pero es
exactamente eso: un objeto en el software puede representar a un objeto tangible
como un “motor” o bien, puede representar a un objeto no tangible, como el objeto
“estrategia”.
Un objeto es una pieza de software única que posee ciertas características
(atributos) y un comportamiento previamente determinado (métodos que se definen
en una clase).
A diferencia de otros lenguajes, un objeto siempre pertenece a una clase. No puede
existir sintaxis “tirada” en cualquier lugar.

1
¿Que es una clase?
Un clase es una plantilla que se utiliza para definir las características y habilidades de
los objetos, lo que significa, que una clase es la definición de un objeto. Es un
modelo abstracto, sin “vida”, ya que son sus instancias (objetos) las que tendrán
valores en el futuro.
Desde un punto de vista más técnico, es el lugar donde se define los métodos y
atributos que tendrán los objetos. Una clase es un contenedor de uno o más datos
(variables o propiedades miembro) junto a las operaciones de manipulación de
dichos datos (funciones/métodos).
Para aquellos que vienen de la programación estructurada es un conjunto de datos
definidos por el programador, parecidos a las “estructuras de datos” de la
programación estructurada, pero con la importante novedad de incluir también las
herramientas necesarias para su manipulación.

Cuando se crea una clase, por convención, suelen colocarse en la parte superior los
atributos de la misma. Y en la parte inferior, sus métodos. Si esto no se cumple,
funcionan igual, aunque esto podría afectar el entendimiento de la misma y, por
ende, el mantenimiento del sistema.
Los nombres de las clases empiezan con mayúscula y si tuviesen palabras en el
medio, también comenzarían con mayúscula: AutoDeCarrera.

Atributos
Los atributos son las características del objeto. Toman valores durante la vida del
mismo. Estos valores determinan el estado del objeto.
Cuando definimos un atributo se establece su nombre y su tipo. Los atributos suelen
ser sustantivos. Marcan las propiedades del objeto.
Una persona puede tener varios atributos. Además de las variables (y clases)
definidas por Java, es posible agregar atributos propios, por ejemplo documento que
hace referencia a la clase Documento.

2
Los atributos se escriben con minúscula y si tuviesen palabras en el medio, éstas van
con mayúscula: colorDeOjos.

Métodos
Representan el comportamiento del objeto. Es decir, lo que el objeto puede hacer.
Los métodos se escriben con minúscula y si tuviesen palabras en el medio, éstas van
con mayúscula: dameCantidad().

Deben especificar lo que devuelven….y en caso que no devuelvan nada se utiliza la


palabra reservada “void”.

3
Creando objetos.
• Un objeto es una instancia de una clase.
• Es la implementación con valores del modelo abstracto (clase).
• La sintaxis para crear un objeto es new Objeto(), donde la parte izquierda del
igual representa la referencia del objeto.
Por ejemplo, para crear un objeto de la clase Persona habría que colocarla siguiente
sintaxis:

Persona p = new Persona();

El paradigma de objetos posee tres características fundamentales:


1. Encapsulamiento
2. Herencia
3. Polimorfismo

1) Encapsulamiento.
• Consiste en ocultar los detalles de la implementación de un objeto, a la vez
que se provee una interfaz pública por medio de sus métodos permitidos.
• Es la propiedad de los objetos de permitir el acceso a sus estados. Esto se
logra a través de su interfaz pública o a través de relaciones preestablecidas
con otros objetos. Lo que importa es el comportamiento del objeto y no como
esta implementado ese comportamiento.
• Tiene una regla de oro: atributos en privado y métodos públicos.
El modificador “private” hace que un atributo (o método) pueda ser accedido sólo
dentro de la propia clase.
El modificador “public” hace que un atributo (o método) pueda ser accedido desde
todos lados.

4
Aquí vemos como todos los atributos son privatizados y todos tienen métodos Get
que sirve para pedir el valor del atributo en cuestión y un método Set que sirve para
asignarle un valor determinado. Se debe prestar especial atención a aquellos
atributos que son objetos, ya que reciben un objeto instanciado.

Los errores de codificación se subrayan en rojo y son debido a que los atributos
fueron privatizados, por ende, no pueden ser accedidos por fuera de la clase.

5
Esta sería la forma correcta.

6
Ventajas del encapsulamiento.:
• La complejidad de la implementación queda escondida al resto de los objetos.
Esto se ve reflejado en la vida real, yo quiero que mi auto funcione pero no
quiero saber como esta hecho el motor.
• La implementación de un objeto puede variar sin que ello afecte a los objetos
que interactúan con él. Esto se debe a que los objetos llaman a un método y
no saben como es la implementación. De esta manera, si la implementación
(que es algo interno de la clase) varía, el resto de los objetos no se ven
afectados.
• Se protege al objeto de usos indebidos o inapropiados. Si los atributos son
accedidos a través de métodos, es posible realizar ciertas validaciones, por
ejemplo, el método setSueldo(+120) no debería asignar 120 al sueldo de la
persona, ya que es un número negativo. El método setIVA(0.25) debería ser
privado, asi ese atributo es de sólo lectura.
• Se centraliza la manipulación del dato. Supongamos que el método getDNI()
debe ser modificado para que, además del DNI, nos anteponga el número de
sucursal donde trabaja la persona. Sin los Get y Set hubiera sido bastante
engorroso y hubiesemos tenido que recorrer todo el programa. Con los Get y
Set es tan simple como modificar 1 sólo método.

2) Herencia.

Es la capacidad de un objeto para utilizar las estructuras y métodos existentes en sus


antepasados. Los “hijos” pueden compartir (y extender) su comportamiento sin tener
que reimplementarlo. Si bien se heredan los métodos de los antepasados, es posible
redefinirlos si fuera necesario.
La idea es no repetir comportamientos que otros ya lo tienen implementados. La idea
es que en la clase padre exista un comportamiento estándar y la clase hija pueda
especializarse en otros aspectos.

Hay dos tipos de herencia:


1. Simple
2. Múltiple ( es cuando una clase tiene más de 1 padre, lo cual no esta permitido
en Java)

7
En Java, para heredar de una clase se utiliza la palabra clave “extends”. En nuestro
ejemplo la definición de la clase Cliente es: public class Cliente extends Persona

Ventajas de la herencia.
• Aumenta la reutilización del código. Tal como se pudo apreciar en la
presentación anterior.
• Favorece el Polimorfismo de los objetos. Esto se verá a continuación.
• Las clases pueden ser organizadas jerárquicamente. Un “hijo” es un “tipo
de…” de una clase padre.

8
3) Polimorfismo.

Polimorfismo implica varias formas de responder el mismo mensaje. En


programación orientada a objetos se denomina polimorfismo a la capacidad que
tienen objetos de diferentes clases de responder al mismo mensaje.
Esto significa que puede haber muchos mensajes con el mismo nombre, en
diferentes clases. Cada clase responde al mensaje con su código propio (o método).
Existen diferentes formas de apreciar el polimorfismo:
a) Sobre+carga de métodos
b) Sobre+escritura de métodos
c) Vinculación dinámica

a) Sobrecarga de métodos.

La sobrecarga de métodos consiste en declarar métodos con el mismo nombre que


serán diferenciados por los parámetros que reciben o que retornan.
Los parametros se diferencian por el tipo y la cantidad.
Por ejemplo, un mismo nombre de método puede recibir un String o un int o nada.
Ahora veremos un ejemplo donde quedará más claro.

En el ejemplo se puede observar que en caso de crear un una Persona, es posible


asignarle un apellido, así como también es posible no pasarle parámetros y que tome
un apellido por default.
La ventaja de esto es que no es necesario declarar una método con distinto nombre
para métodos similares en los que únicamente cambia el tipo de parámetros que han
de utilizar.

b) Sobreescritura de métodos

Una subclase sobreescribe un método de su superclase cuando define un método


con las mismas características (nombre, número y tipo de argumentos) que el
método de la superclase.
Las subclases emplean la sobreescritura de métodos la mayoría de las veces para
agregar o modificar la funcionalidad del método heredado de la clase padre.
9
En el ejemplo vemos que el nombre por default “Perez” no le sirve a la clase Cliente,
la cual prefiere “Garcia”.

Vemos en el ejemplo que Persona y Cliente tienen la opción de setear un apellido


(1er caso) o tomar el que viene por default (2do y 3er caso). Esto se puede apreciar
en la salida por consola.

c) Vinculación dinámica.

Una referencia a un objeto de una clase, puede pasar a referenciar a otro objeto de
otra clase.
Esto es posible siempre y cuando esten en la misma línea de herencia.
En nuestro ejemplo, una persona Puede referencia a un Cliente, ya que ambos se
encuentran en la misma línea de herencia.

10
Si bien la clase instancia es Cliente, se puede observar que el numero de cliente no
aparece. Si lo necesito debo “castear”. Luego veremos este concepto.

Respuesta correcta: Garcia.

11
Casteo.
Para que un objeto que fue referenciado por otro pueda recuperar sus métodos
particulares es necesario “castear”.
El casteo sirve para cambiar de tipo. Es como que el objeto se “saca el disfraz”.

Hasta aquí la teoría de objetos, pero pronto crearé una nueva entrada con cosas
básicas de Java como tipos de atributos/métodos, clases abstractas, paquetes,
interfaces, etc. que van a complementar este post.

Bibliografia:
Para crear este documento me he basado en unos manuales que he escrito junto a
otros profesores cuando trabajaba en IBM. Ellos son:
• David Brunstein.
• Gabriel García.
• Sabrina Campa.

http://migranitodejava.blogspot.com.uy/2011/06/programacion+orientada+objetos+
con+java.html

12