Está en la página 1de 13

Modulo 10.

Programación Orientada a Objetos

Objetivos:

Aprender los conceptos básicos de la programación orientada a objetos, comportamiento,


relaciones y operaciones.
Comprender por qué la programación orientada a objetos sirve para reutilizar código
Comprender los principios básicos de la programación orientada a objetos.

Introducción a objetos

Los progresos en la abstracción

Todos los lenguajes de programación proporcionan abstracciones. Puede ser


discutido que la complejidad de los problemas que puedes solucionar está
relacionada directamente con la clase y la calidad de la abstracci n. Por “clase”
entendemos, “¿qué es lo que estoy abstrayendo?” El lenguaje ensamblador por
ejemplo es una abstracción básica de la máquina sobre la cual se ejecuta la
aplicación o maquina subyacente. Muchos idiomas son abstracciones del lenguaje
ensamblador. Estos idiomas agregaron grandes mejoras al lenguaje ensamblador, pero su
abstracción primaria de los problemas a resolver todavía requiere que se piense en
términos de la estructura de la computadora en lugar de la estructura del problema que
se está intentando solucionar.
El programador debe establecer una asociación entre el modelo de la máquina y el
modelo del problema que se está solucionando. El esfuerzo requerido para realizar esta
asociación, y el hecho de tener que codificar en el lenguaje de programación según esta
asociación, produce como consecuencia programas difíciles de escribir y costosos de
mantener, Es por esto que la industria de desarrollo de software creo los “métodos
de programaci n”.

En estos términos se presentaron varios métodos y lenguajes que solucionan


satisfactoriamente o torpemente los problemas, la calidad de la solución depende del
dominio en el cual se esté trabajando y del problema en sí.
La programación orientada a objetos proporciona al programador herramientas para
representar los elementos en el espacio del problema. Referimos a los elementos en
el espacio del problema y sus representaciones en la solución espacial como
“objetos.”

Así la POO, permite que se describan los problemas en términos del problema y no en
términos de la maquina donde la solución funcionara, sin embargo aun existe una
relación con la computadora muy estrecha y se da en los fragmentos de código que
representan los estados, las operaciones, las funciones, las relaciones y el
comportamiento de cada objeto.

Alan Kay resumió cinco características básicas Smalltalk, la primera lengua orientada
al objeto y una de los idiomas sobre los cuales se basa Java. Estas características
representan un acercamiento puro a la programación orientada al objeto:

1. Todo es un objeto. Pensar en un objeto como una variable que; almacena datos, se le
puedan solicitar estas variables, se le pueda pedir realizar operaciones, etc. En teoría,
puedes tomar cualquier componente conceptual en el problema que estás intentando
solucionar (los perros, los edificios, los servicios, etc.) y representar como objeto en tu
programa.

2. Un programa es un conjunto de objetos que se envían mensajes entre sí. Para hacer una
petici n a un objeto, “envías un mensaje” a ese objeto. Más concreto, puedes pensar en
un mensaje como una petición de llamado a un método que pertenezca a un objeto
particular.

3. Cada objeto tiene su propia memoria compuesta de otros objetos. Viéndolo de otra
manera, creas una nueva clase de objeto haciendo un paquete que contiene objetos ya
existentes. Así, puedes construir un programa complejo involucrando objetos de
complejidad simple.
4. Cada objeto tiene un tipo, es decir, cada objeto es una instancia de una clase,
entendiendo que clase es sin nima de “tipo.”

5. Todos los objetos de un tipo o clase en particular pueden recibir los mismos mensajes.
Un objeto del tipo “círculo” es también un objeto del tipo “forma,” *1+
Definición de algunos conceptos claves en la programación orientada a objetos

Para comenzar necesitamos definir algunos conceptos claves en la programación


orientada a objetos, estos conceptos se deben manejar en los mismos términos, los
conceptos son:

Atributo, Attribute: Es un dato que representa las propiedades en un objeto.

Campo, Field: Es una instancia de una variable.

Operación: Operation: Lleva a cabo las responsabilidades de la clase.

Método, Method: Es la implementación de una operación.

Mensaje, Message: Una solicitud de un objeto a otro.

Invocación o Ejecución, Invocation o execution: Realización de una operación en


respuesta a un mensaje.

Asociación, Association: Una relación entre dos clases, implica la precensia de


instancias de las clases que tienen asociación.

Agregación, Aggregation: Toda una parte de una asociación.

Composición, Composition: Un tipo de agregación donde las partes se destruyen


cuando todo se destruye.

Interface, Interface: Una conducta que debe ser seguida por un juego de objetos.

Protocolo, Protocol: Lenguajes y reglas que se utilizaran por los mensajes en una
red.

Comportamiento, Behavior: Es en conjunto lo que hace un objeto, es el conjunto


de las operaciones de un objeto.

¿Qué es un objeto?

Como se dijo anteriormente, todo es un objeto, Si damos una mirada a nuestro alrededor
encontraremos muchos ejemplos de objetos del mundo real: el perro, el escritorio, el
televisor, la bicicleta.

Los objetos del mundo real tienen dos características: Todos tienen un estado y un
comportamiento (state and behavior).
Un objeto es una cosa, una entidad, un sujeto, un sustantivo, las características principales
de los objetos son:

- Los atributos, son los estadosinternos del objeto.


- El comportamiento, se expresa en términos de operaciones. La ejecución de una
operación causa que se modifique un estado de un objeto o produce la ejecución
de operaciones en otros objetos. Las operaciones se conocen también métodos o
funciones miembro.

• Los perros por ejemplo pueden tener estados como (el nombre, color, hijos, hambre) y
comportamientos como (gruñir, menear la cola, ladrar).

• Las bicicletas por ejemplo tienen estados como (engranaje actual, cadencia actual del
pedal, velocidad actual) y comportamientos como (cambiar engranaje, cambiar
cadencia del pedal, aplicar frenos).

Identificar los estados y los comportamientos para los objetos del mundo real es una
muy buena manera de comenzar a pensar en términos de la programación orientada
al objeto.

Actividad: observar los objetos del mundo real que nos rodean y hacer dos
preguntas: “¿Cuales son los posibles estados que posee el objeto?” y “ ¿cuáles son los
posibles comportamientos que este objeto puede realizar?”.

Con el Ejercicio se puede notar que algunos objetos, alternadamente, contienen


otros objetos.

Estas observaciones del mundo real se traducen al mundo de la programación


orientada al objeto.
Estructura y comportamiento de un Objeto

Un objeto posee atributos privados y relaciones con otros objetos, su comportamiento se


basa en establecer y realizar operaciones dinámicas con otros objetos y operaciones con sí
mismo.

Un ejemplo:

Un Taxi es un vehículo que puede tener los siguientes atributos: color, modelo,
kilometraje, cilindraje, cantidad de pasajeros. Un taxi tiene relaciones estáticas y directas
con otros objetos como son Alejandro, el conductor del taxi y Mario, el dueño del taxi.

¿Idénticos o iguales?

Existe una diferencia entre ser idénticos o iguales, cuando dos objetos tienen los mismos
comportamientos, el mismo estado o valores en sus atributos y participan en las mismas
relaciones se considera que los objetos son iguales.

Dentro de la programación cada objeto recibe una identidad única, si dos objetos tiene la
misma identidad los objetos se consideran idénticos.

Representación gráfica de un Objeto.

Dentro del lenguaje UML un objeto se representa con una caja que contiene 3 secciones.
Su nombre, atributos, operaciones (comportamiento).
Las operaciones se escriben con paréntesis y en ellos van los parámetros si fuese el caso.
Ejemplo aCar, aDog, maquinaVenta

Un objeto en software.

Los objetos de un software son conceptualmente similares a los objetos del mundo real:
consisten también en relaciones de objetos que tienen estados y comportamientos.
Un objeto almacena sus estados en campos (variables en algunos lenguajes de
programación) y expone su comportamiento con los métodos (funciones en algunos
lenguajes de programación). Los métodos funcionan internamente dentro de un
objeto y sirven como el mecanismo primario para la comunicación de objeto-a-
objeto, o medio para el cambio de los estados (variables). Los estados (variables)
internos que son ocultados y son necesarios para realizar una interacción de un
método dentro del objeto se conoce como “ encapsulaci n de datos” - un principio
fundamental de la programación orientada al objeto.

Consideremos por ejemplo una bicicleta:

Una bicicleta modelada como un objeto de software.

Aun si tuviésemos control sobre los estados o variables (velocidad actual, cadencia
actual del pedal, y engranaje actual) por medio de los métodos para cambiar estos
estados o variables (comportamiento), el objeto sigue contando con la posibilidad de
restringir el uso de estos comportamientos dentro del mismo objeto. Por ejemplo, si
la bicicleta tiene solamente 6 engranajes, un método para cambiar los engranajes podría
rechazar cualquier valor que sea menor de 1 o mayo que 6 implementando código de
validación.

Construir código de software basado en objetos individuales proporciona un número


de ventajas, en las que se incluyen:

Ventajas de construir programas en la programación orientada a objetos


1. Modularidad: El código fuente para un objeto se puede escribir y mantener
independientemente del código de fuente para otros objetos. Una vez que esté
creado, un objeto se pueda utilizar fácilmente alrededor y dentro del sistema.

2. Ocultar información: Al poder trabajar solamente con las definiciones de los


métodos de un objeto, se oculta del mundo exterior los detalles internos de su
puesta en práctica.

3. Reutilización de código: Si ya existe un objeto (quizás escrito por otro


programador de software), se puede utilizar ese objeto en nuestros programas.

4. Conectividad y facilidad el eliminar errores: Si un objeto particular resulta ser


problemático, puedes simplemente quitarlo de tu aplicación y colocar otro objeto como
su reemplazo. Esto es análogo a cambiar problemas mecánicos en el del mundo real.
Si un perno se rompe, se cambia, no la máquina entera.

Clases

Una clase como ya hemos estudiado se puede definir el modelo del cual se crean los
objetos individuales.

Esto significa que una clase encapsula un grupo común de objetos que comparten los
mismosatributos, operaciones, relaciones y estructura.

¿Qué es entonces una clase?

En el mundo real, encontramos a menudo muchos objetos individuales de la misma


clase. Puede haber millares de otras bicicletas en existencia, todas de la misma
marca y modelo. Cada bicicleta fue construida en la misma máquina y basados en el
mismo modelo y por lo tanto contienen los mismos componentes. En términos orientados
al objeto, decimos que esa bicicleta es un caso de la clase de los objetos conocidos como
bicicletas. Una clase es el modelo del cual se crean los objetos individuales.
La siguiente clase de la bicicleta es ejemplo posible de una clase bicicleta:
class Bicicleta {
int cadencia = 0;
int velocidad = 0;
int engranaje = 1;
void cambiarCadencia(int newValue) {
cadencia = newValue;
}
void cambiarEngranaje(int nuevoEngranaje) {
engranaje = nuevoEngranaje;
}
void incrementarVelocidad(int incremento) {
velocidad = velocidad + incremento;
}
void apliqueFrenos(int disminucion) {
velocidad = velocidad - disminucion;
}
void imprimaEstados() {
System.out.println("cadencia:"+ cadencia +" velocidad:"+ velocidad +"
engranaje:"+ engranaje);
}
}

Aunque la sintaxis es nueva, lo que se quiere mostrar son los conceptos de objetos que se
están tratando, Los campos cadencia, la velocidad, y el engranaje representan el
estado del objeto, y los métodos (cambiarCadencia, cambiarEngranaje,
incrementarVelocidad etc.) definen su interacción con el mundo exterior.

En el párrafo anterior debemos notar que la clase bicicleta no contiene un método


principal. Eso es porque no es una aplicación completa; es justo el modelo para las
bicicletas que se puede utilizar en una aplicación. La responsabilidad de crear y de usar
nuevos objetos de la bicicleta pertenece a una cierta clase en las aplicaciones a
desarrollar.

Aquí está una clase “BicycleDemo” que crea dos objetos separados de la bicicleta e invoca
sus métodos, esta clase si contiene un método principal y es una aplicación:
class BicycleDemo {
public static void main(String[] args) {

// Creación de 2 nuevos objetos tipo Bicicleta


Bicicleta bike1 = new Bicicleta();
Bicicleta bike2 = new Bicicleta();

// Llamado a los métodos de los objetos


bike1. cambiarCadencia (50);
bike1. incrementarVelocidad (10);
bike1. cambiarEngranaje (2);
bike1. imprimaEstados ();

bike2. cambiarCadencia (50);


bike2. incrementarVelocidad (10);
bike2. cambiarEngranaje (2);
bike2. cambiarCadencia (40);
bike2. incrementarVelocidad (10);
bike2. cambiarEngranaje (3);
bike2. imprimaEstados ();
}
}

La salida de las impresiones de la cadencia, la velocidad, y el engranaje en esta prueba


para lasdos bicicletas es:

cadencia:50 velocidad:10 engranaje:2

cadencia:40 velocidad:20 engranaje:3

¿Qué es la herencia?

Diversas clases de objetos tienen a menudo cierta cantidad de elementos en común


con otras clases del mismo tipo. Por ejemplo: Las Bicicletas de montaña, las Bicicletas de
ruta, y las Bicicletas dobles, comparten las características de las bicicletas (velocidad
actual, cadencia actual del pedal, engranaje actual).

A cada uno de los tipos de bicicletas se les puede también definir las características
adicionales que las hacen diferentes: las bicicletas dobles tienen dos asientos y dos
sistemas de volantes; las bicicletas de ruta tienen volantes especiales; algunas
bicicletas de montaña tienen un anillo de cadena adicional, brindándoles un cociente
más bajo de engranaje.

La programación orientada al objeto permite que las clases hereden el estado y el


comportamiento de la aplicación general de otras clases. En este ejemplo, la
bicicleta ahora se convierte en la superclase de MountainBike, de RoadBike, y de
TandemBike. En el lenguaje de programación de Java, cada clase se permite tener una
superclase directa, y cada de una de las superclases tienen el potencial para un número
ilimitado de subclases:

La sintaxis en java para crear una subclase es simple. En el principio de la


declaraci n de la clase, se usa la palabra clave “extends” , seguida del nombre de la clase a
heredar:
class MountainBike extends Bicicleta {
// Acá se colocarían los nuevos campos (estados) y nuevos métodos (comportamientos)
}

Con esto la clase MountainBike obtiene todos campos y métodos que la clase
bicicleta, permitiendo así que el código de MountainBike se centre exclusivamente en las
características que lo hacen único. El código de las subclases escritas se vuelve fácil
de leer. Sin embargo, se debe tener cuidado al documentar correctamente los
estados y los comportamientos definidos en cada superclase, porque ese código no
aparecerá en el archivo de fuente de cada subclase y se debe conocer muy bien
realmente cual es su uso.
¿Qué es una interfaz?

Como se ha visto, los objetos definen su interacción con el mundo exterior con los
métodos que exponen o se definen. Los métodos forman el interfaz del objeto con el
mundo exterior; por ejemplo, los botones en el frente de un televisor, son el interfaz
entre el televidente y el cableado eléctrico en el otro lado de la cubierta plástica. Se
presiona el bot n de “encendido” para la funci n de encender o apagar y comenzar
o detener las demás funciones.

En su forma más común, un interfaz es un grupo de métodos relacionados con los cuerpos
de código para cada método vacíos. El comportamiento de una bicicleta, si se hubiese
especificado como una interfaz, pudo parecerse a lo siguiente:
interface Bicicleta {
void cambiarCadencia (int newValue);
void cambiarEngranaje(int newValue);
void aumentarVeocidad(int incremento);
void apliqueFrenos(int disminucion);
}

Para poner este interfaz en ejecución, el nombre de tu clase cambiaría (por ejemplo
a ACMEBicycle), y utilizarías la palabra clave implements en la declaración de la clase.
class ACMEBicycle implements Bicicleta {
// Recordemos la clase Bicicleta vista anteriormente
}

Poner una interfaz en ejecución permite que una clase llegue a ser más formal
sobre el comportamiento que promete proporcionar. Las interfaces forman un
contrato entre la clase y el mundo exterior, y est e contrato es realizado a fin de cumplir
la estructura y verificado en tiempo compilación. Si tu clase demanda poner un
interfaz en ejecución, todos los métodos definidos por esa interfaz deben aparecer en el
código fuente antes de que la clase se compile con éxito.

¿Qué es un paquete?

Un paquete es un espacio que organiza un sistema de clases y de interfaces


relacionadas. Puedes pensar conceptualmente en paquetes como diversas carpetas en tu
computadora. Puede ser que mantengas las páginas HTML en una carpeta, las imágenes
en otra, y las escrituras o las aplicaciones en otra. Como el software escrito en Java se
puede componer de centenares o de millares de clases individuales, tiene sentido
mantener las cosas organizadas, poniendo clases e interfaces relacionadas en
paquetes.

La plataforma Java proporciona una biblioteca enorme de clases (un sistema de


paquetes) conveniente para el uso en las aplicaciones. Se conoce esta biblioteca como
“el interfaz de programaci n de aplicaciones”, o “ API”. Sus paquetes representan las
tareas usadas comúnmente en las aplicaciones. Por ejemplo, un objeto de la clase
“String” contiene el estado y el comportamiento para las cadenas de caracteres; un
objeto del tipo File permite que un programador cree, suprima, examine, compare, o
modifique fácilmente un archivo en filesystem; un objeto de la clase Socket permite la
creación y el uso de los Socket de la red; varios objetos GUI se usan para poner
los botones y los checkboxes y todo lo demás relacionado con las interfaces que
usan gráficos. Hay literalmente millares de clases a elegir. Esto permite que, el
programador, se centre en el diseño de su aplicación en particular, en lugar de
preocuparse de la infraestructura requerida para solucionar el problema.

La especificación del API de la plataforma Java contiene el listado completo para todos
los paquetes, interfaces, clases, campos, y métodos proveídos por la plataforma
sobre la cual se quiera trabajar 6. Esta es la documentación más importante a
mantener como referencia. [2]
REFERENCIAS

[1] Eckel, Bruce. Thinking in Java, fourth edition. P. 15 - 21

[2] Sun Microsystems, The Java Tutorials. En versión online:

http:/ / java.sun.com/ docs/ books/ tutorial/ Tutorial de Java en SUN

También podría gustarte