Está en la página 1de 18

INTRODUCCIÓN A LA POO

Un lenguaje orientado a objetos tiene las siguientes características:

• Basado en objetos
• Basado en clases
• Permite la herencia

La gran mayoría de los lenguajes de los que se dice que son orientados a objetos sólo
cumplen con las dos primeras características, por lo tanto son únicamente lenguajes
basados en objetos y no orientados a objetos. La herencia es lo que hace la diferencia
entre uno y otro.

La Programación Orientada a Objetos se basa en la idea natural de la existencia de un


mundo de objetos y que la resolución del problema se realiza en sus términos, un
lenguaje se dice que está basado en objetos si soporta objetos como una característica
fundamental del mismo.

Este tipo de programación considera como unidad central a los objetos. Entendiendo
que un objeto es una encapsulación (agrupación) de un conjunto de datos y de métodos
para manipular éstos. Por ejemplo, una ventana Windows es un objeto. Este objeto
posee características y datos, como son tamaño, color, barras de desplazamiento,
titulo, etc., y métodos que permiten manipular esos datos. Por ejemplo, cuando el
usuario apunta con el cursor del ratón al botón de maximizar de la ventana y hace clic
sobre él, se produce un mensaje dirigido a la propia ventana que provoca la ejecución
del método que produce su maximización.

La POO es una forma de programación que utiliza objetos que responden a sucesos.
Estos sucesos producen un flujo de mensajes entre los objetos, lo que origina cambios
en el estado del objeto que recibe el mensaje. Como ejemplo, piense en el problema de
que un objeto caja de texto visualice un mensaje cuando se haga clic en otro objeto
botón de pulsación. La estructura del programa básicamente estará formada por dos
objetos y un mapa de mensajes; uno de los mensajes relacionará el clic sobre el botón
con el método que tiene que ejecutarse para poner el comunicado en la caja de texto.
Así, la POO es un enfoque sumamente natural, puesto que la estructura de los
programas refleja directamente la estructura del problema.

Podemos concluir que la Programación Orientada a Objetos es un método de


implementación en el cual los programas se organizan como colecciones cooperativas
de objetos, cada uno de los cuales representa un ejemplo de alguna clase, y cuyas
clases son todas miembros de una jerarquía de clases unidas por relaciones.

VENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS

Un lenguaje de programación que soporte programación orientada a objetos beneficia


el desarrollo de software. Esto es así, porque:

• Los objetos bien diseñados son la base para sistemas que se construyen a partir
de módulos reutilizables, dando lugar a una mayor productividad.
• La reutilización de las clases que han sido probadas en circunstancias reales, en
proyectos anteriores, dan lugar a sistemas de mayor calidad y con menos
errores.
• La herencia hace posible definir sistemas más fiables, más fáciles de ampliar y
menos costosos de mantener.
• Un diseño orientado a objetos es una herramienta clave para enfrentarse a
problemas complejos porque favorece el paso de pequeños a grandes sistemas.
• Las aplicaciones requieren escribir menos líneas de código, menos sentencias
de bifurcación y por lo tanto, los módulos son más comprensibles.
• La encapsulación ayuda a construir sistemas más seguros.
• En contraste con la programación tradicional, donde siempre existe la posibilidad
de que una modificación de un procedimiento o de una estructura de datos afecte
a otros procedimientos, la programación orientada a objetos no necesita
examinar todo el código fuente para ver si un cambio local afecta a otras partes.

Según lo expuesto, las ventajas de la programación orientada a objetos son


sustanciales. Sin embargo, también presenta algunas desventajas que citamos a
continuación:

• La ejecución de una aplicación orientada a objetos resulta más lenta.


• Es preciso desarrollar bibliotecas de clases, lo que obliga al usuario a tomar
conocimientos de las mismas, al mismo tiempo su administración es difícil y
costosa.
• Hay costos inevitables, asociados al entrenamiento y aprendizaje.
CARACTERÍSTICAS DE LA POO

Las características fundamentales de la POO son: abstracción, encapsulamiento,


herencia y polimorfismo.

Abstracción

El término abstracción significa "acción de separar mentalmente". Otra definición podría


ser: "representación de las características esenciales de algo sin incluir antecedentes o
detalles irrelevantes". Por medio de la abstracción conseguimos no detenernos en los
detalles concretos de las cosas que no interesen en cada momento, sino generalizar y
centrarse en los aspectos que permitan tener una visión global del tema. Por ejemplo, el
estudio de un ordenador podemos realizarlo a nivel de funcionamiento de sus circuitos
electrónicos, en términos de comente, tensión, etc., o a nivel de transferencia entre
registros, centrándose así el estudio en el flujo de información entre las unidades que lo
componen (memoria, unidad aritmética, unidad de control, registros, etc.), sin
importamos el comportamiento de los circuitos electrónicos que componen estas
unidades.

La abstracción consiste en la generalización conceptual de los atributos y propiedades


de un determinado conjunto de objetos. Precisamente la clave de la programación
orientada a objetos está en abstraer los métodos y los datos comunes a un conjunto de
objetos y almacenados en una clase. Desde este nivel de abstracción, la introducción o
eliminación de un objeto en una determinada aplicación supondrá un trabajo mínimo o
nulo.

La Abstracción se puede resumir en lo siguiente: Denota las características esenciales


que distinguen a un objeto de otros tipos de objetos, definiendo precisas fronteras
conceptuales, relativas al observador. Surge del reconocimiento de características
similares entre ciertos objetos, situaciones o procesos en el mundo real, decide
concentrarse en ellas e ignorar las diferencias. Enfatiza detalles con significado para el
usuario, suprimiendo aquellos detalles que, por el momento, son irrelevantes o distraen
de lo esencial.

Encapsulamiento

El encapsulamiento u ocultamiento de información se refiere a la práctica de incluir


dentro de un objeto todo lo que necesita, de tal forma que ningún otro objeto necesite
conocer nunca su estructura interna. Esta característica permite ver un objeto como una
caja negra, en la que se ha metido de alguna manera toda la información relacionada
con dicho objeto. Esto nos permitirá manipular los objetos como unidades básicas,
permaneciendo oculta su estructura interna.

La encapsulación sirve para separar la interface de una abstracción y su


implementación. El encapsulamiento esconde la implementación del objeto que no
contribuye a sus características esenciales. La encapsulación da lugar a que las clases
se dividan en dos partes:

Interface. Captura la visión externa de una clase, abarcando la abstracción del


comportamiento común a los ejemplos de esa clase.
Implementación. Comprende la representación de la abstracción, así como los
mecanismos que conducen al comportamiento deseado.

En Java abstracción y la encapsulación están representadas por la clase. La clase es


una abstracción, porque en ella se definen las propiedades y los atributos genéricos de
un determinado conjunto de objetos con características comunes, y es una
encapsulación, porque constituye una caja negra que encierra tanto los datos de que
constan los objetos como los métodos que permiten manipularlos. Ahora, el
ocultamiento de información se refiere a la propiedad que tienen las clases de restringir
el acceso a los atributos que la conforman, es decir, cuando se define un atributo se le
puede asignar el tipo de acceso que tendrá, pudiendo declararse como private ó
protected.
Herencia

La herencia es el mecanismo para compartir automáticamente métodos y atributos


entre clases y subclases. Por ejemplo, si declaramos la clase profesor como una
subclase de empleado, todos los métodos y variables asociadas con la clase empleado
son automáticamente heredados por la subclase profesor. Si la clase empleado
contiene métodos inapropiados para la subclase profesor, éstos pueden obviarse,
escribiendo nuevos métodos y almacenándolos como parte de la clase profesor, o
también pueden redefinirse para que respondan de forma distinta a como lo hacen en la
clase base.

En Java, herencia equivale a derivación de clases; la clase padre (empleado) recibe el


nombre de clase base y la clase hija (profesor) se denomina clase derivada. Esta
característica de la POO está fuertemente ligada a la reutilización del código. Esto es, el
código de cualquiera de las clases existentes puede ser utilizado sin más que crear una
clase derivada de ella.

El concepto de herencia conduce a una estructura jerarquizada de clases, lo cual no


significa que en POO todas las relaciones entre clases deban ajustarse a una estructura
jerárquica. La herencia puede ser también múltiple; esto es, una clase puede derivarse
de dos o más clases base. (Java no lo contempla).

Polimorfismo

Esta característica permite implementar múltiples formas de un mismo método,


dependiendo cada una de ellas de la clase sobre la que se realice la implementación.
Esto hace que se pueda acceder a una variedad de métodos distintos (todos con el
mismo nombre) utilizando exactamente el mismo medio de acceso. El polimorfismo
puede presentarse a través de la sobrecarga o sobreescritura.
 Sobrecarga de métodos: Permite la reescritura de métodos dentro de la misma
clase, siempre y cuando estos difieran en los siguientes aspectos:

Número de parámetros.
Tipo de los parámetros.
Tipo del valor de retorno.

public class Sobrecarga {


public void Numeros(int x, int y){
System.out.println("Método que recibe enteros.");
}
public void Numeros(double x, double y){
System.out.println("Método que recibe flotantes.");
}
public void Numeros(String cadena){
System.out.println("Método que recibe una cadena: "+
cadena);
}
public static void main (String... args){
Sobrecarga s = new Sobrecarga();
int a = 1;
int b = 2;
s.Numeros(a,b);
s.Numeros(3.2,5.7);
s.Numeros("Monillo007");
}
}

 Sobreescritura de métodos: Permite que los métodos declarados en una


superclase puedan ser reescritos en una de las subclases de ésta.
RELACIONES ENTRE CLASES

Al realizar abstracciones, uno se da cuenta de que muy pocas clases se encuentran


aisladas. En vez de ello, la mayoría colaboran con otras de varias maneras. Al diseñar
un sistema no sólo deben identificarse los elementos que lo integran, sino también
como estos están relacionados.

En la Programación Orientada a Objetos existen diferentes tipos de relaciones, tal como


se muestra a continuación:

a) Dependencias. Representan relaciones de uso entre clases, por ejemplo, las


tuberías dependen del calentador para transportar el agua caliente.
b) Generalizaciones. Conectan clases generales con sus especializaciones, por
ejemplo, un mirador es un tipo de ventana con grandes hojas de cristal fijas, una
ventana de patio es un tipo de ventana con hojas de cristal que se abren de lado
a lado.
c) Asociaciones. Representan relaciones estructurales entre objetos, por ejemplo,
un cliente compra en una mueblería.
d) Realizaciones. es una relación semántica entre clasificadores, en donde un
clasificador especifica un contrato que otro clasificador garantiza que cumplirá
e) Agregaciones y Composiciones. Tipo especial de asociación.

Al construir una casa, cosas como paredes, puertas, ventanas, armarios y luces
formarán parte de nuestro vocabulario. Sin embargo, ninguna de esas cosas se
encuentra aislada. Las paredes limitan con otras paredes. Las puertas y las ventanas se
colocan en las paredes para hacer aberturas para la gente y la luz. Los muebles y las
luces están físicamente adyacentes a las paredes y techos. Las paredes, las puertas,
los armarios y las luces se pueden agrupar para formar cosas más complejas, como las
habitaciones.

Entonces, una Relación es una conexión entre elementos, cualquier relación se


representa con una línea, usando diferentes tipos de líneas para diferenciarlas.
ASOCIACIÓN

Una asociación es una relación estructural que especifica que los objetos de un
elemento están conectados con los objetos de otro. Dada una asociación entre dos
clases, se puede establecer una relación desde un objeto de una clase hasta algunos
objetos de la otra clase.

DEPENDENCIA

Una dependencia es una relación de uso que declara que un elemento (por ejemplo, la
clase Ventana) utiliza información y los servicios de otro elemento (por ejemplo, la clase
Evento)
GENERALIZACION

Una generalización es una relación de especialización/generalización en la cual el


elemento especializado (el hijo) se basa en la especificación del elemento generalizado
(el padre). El hijo comparte la estructura y el comportamiento del padre. Gráficamente,
una relación de generalización se representa como una línea continua con una punta de
flecha vacía apuntando al
padre.

AGREGACIÓN

Agregación. Una asociación normal entre dos clases representa una relación estructural
entre iguales, es decir, ambas clases están conceptualmente en el mismo nivel, sin ser
ninguna más importante que la otra. A veces, se desea modelar una relación
"todo/parte", en la cual una clase representa una cosa grande (el "todo"), que consta de
elementos más pequeños (las "partes"). Este tipo de relación se denomina agregación,
la cual representa una relación del tipo "tiene un", o sea, un objeto del todo tiene objetos
de la parte. En realidad, la agregación es sólo un tipo especial de asociación y se
especifica añadiendo a una asociación normal un rombo vacío en la parte del todo
COMPOSICIÓN

La agregación resulta ser un concepto simple con una semántica bastante profunda. La
agregación simple es puramente conceptual y no hace más que distinguir un "todo" de
una "parte". La agregación simple no cambia el significado de la navegación a través de
la asociación entre el todo y sus partes, ni liga las vidas del todo y las partes.

Sin embargo, existe una variación de la agregación simple (la composición) que añade
una semántica importante. La composición es una forma de agregación, con una fuerte
relación de pertenencia y vidas coincidentes de la parte con el todo. Las partes con una
multiplicidad no fijada pueden crearse después de la parte compuesta a la que
pertenecen, pero una vez creadas viven y mueren con ella. Tales partes también se
pueden eliminar explícitamente antes de la eliminación de la parte compuesta.

Esto significa que, en una agregación compuesta, un objeto puede formar parte de sólo
una parte compuesta a la vez. Por ejemplo, en un sistema de ventanas, un Marco
pertenece exactamente a una Ventana. Esto contrasta con la agregación simple, en la
que una parte se puede compartir por varios agregados.

Por ejemplo, en el modelo de una casa, una Pared puede ser parte de uno o más
objetos Habitacion.

REALIZACIÓN

En cuarto lugar, una realización es una relación semántica entre clasificadores, en


donde un clasificador especifica un contrato que otro clasificador garantiza que
cumplirá. Se pueden encontrar relaciones de realización en dos sitios: entre interfaces y
las clases y componentes que las realizan, y entre los casos de uso y las
colaboraciones que los realizan. Gráficamente, una relación de realización se
representa como una mezcla entre una generalización y una relación de dependencia.
CONCEPTOS BÁSICOS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS

Objetos

Un objeto es una encapsulación (agrupación) de datos y de los métodos para


manipularlos, es una entidad que tiene unos atributos particulares, los datos, y unas
formas de operar sobre ellos, los métodos. Por lo tanto, un objeto contiene por una
parte, operaciones que definen su comportamiento y por otra, variables, manipuladas
por esas operaciones, que definen su estado. Por ejemplo, una ventana Windows
contiene operaciones como maximizar y minimizar (los métodos) y variables como
ancho y alto (los atributos).

Métodos

Un método (que en otros lenguajes se denomina función miembro) se implementa en


una clase, y determina cómo tiene que actuar el objeto cuando recibe un mensaje. En
adición, las variables asociadas o atributos permitirán almacenar información para dicho
objeto. Un método puede también enviar mensajes a otros objetos solicitando una
acción o información. La descripción o signatura de un método se denomina operación.

Objeto

mensajes atributos
Métodos

La estructura interna de un objeto está oculta para otros usuarios y la única conexión
que tiene con el exterior son los mensajes. Los atributos (datos) que oculta un objeto,
solamente pueden ser manipulados por los métodos asociados al propio objeto. Los
mensajes son la especificación de una comunicación entre objetos que transmiten
información, con la expectativa de que se desencadenara una actividad. Ahora una
Interacción es un comportamiento que incluye un conjunto de mensajes
intercambiados por un conjunto de objetos dentro de un contexto para lograr un
propósito.

La ejecución de un programa orientado a objetos realizará fundamentalmente tres


cosas:

1. Creará los objetos necesarios.


2. Los mensajes enviados a unos y otros objetos darán lugar a que se procese
internamente la información.
3. Finalmente, cuando los objetos no son necesarios, serán borrados, liberándose la
memoria ocupada por los mismos.

Clases

Una clase se puede considerar como una plantilla para crear objetos de esa clase o
tipo. Una clase describe los métodos y atributos que definen las características
comunes a todos los objetos de esa clase. Precisamente la clave de la programación
orientada a objetos está en abstraer los métodos y atributos comunes a un conjunto
de objetos y encapsularlos en una clase.

Una clase es un tipo de objeto definido por el usuario. En otras palabras, una clase
equivale a la generalización de un tipo específico de objeto. Un objeto es la concreción
de una clase (algunos autores utilizan el término instancia, traducción directa de
instance). Por ejemplo, un objeto de la clase C sería un ejemplar O de esa clase.
Entonces, para disponer de un objeto, primero se abstraen las características comunes
de ese grupo de objetos, después se delimitan esas características comunes (clase) y
por último se pone nombre a uno o más ejemplares de la clase (objetos).

Aunque en las definiciones anteriores hemos utilizado el término objeto como sinónimo
de instancia, en general, cuando hablamos de objetos nos referimos, dependiendo del
contexto, a clases o a instancias. Esto es así, porque un objeto es, por una parte, un
principio de organización, y por otra, una región de almacenamiento que contiene una
copia del elemento especificado por una clase. Desde este segundo punto de vista, los
términos objeto e instancia son sinónimos; no sucediendo lo mismo desde el primer
punto de vista, por lo que no conviene popularizar el término instancia.

Como ejemplo, consideremos el diseño de un procesador de textos utilizando la


programación orientada a objetos. Primeramente, identificamos entidades de interés,
como son párrafos, cabeceras, pies, etc., las cuales pueden ser objetos potenciales. A
continuación analizamos estas entidades; por ejemplo, un párrafo normalmente está
justificado, lo que quiere decir que podemos pensar en un método, que podemos
llamar justificación, común a todos los párrafos. Normalmente, en un documento, todos
los párrafos se escriben con el mismo tipo de letra, entonces fuente es un atributo
común para todos los párrafos. Un párrafo está formado por su propio texto, entonces
texto es un atributo que tendrá un valor específico para cada párrafo. Podemos agrupar
la descripción común a los párrafos, formando así la clase párrafo, la cual nos permitirá
construir objetos de esta clase; esto es, párrafos.

Un atributo asociado con una clase representa un valor que es compartido por todos los
objetos de esa clase; esto es, sólo existe una copia de ese atributo (en Java este tipo
de atributo es static). En cambio, un atributo asociado a un objeto de una clase
representa un valor particular a ese objeto; esto es, cada objeto tiene su propio copia.

Para crear un objeto de una determinada clase simplemente hay que declarar una
variable de dicha clase. Por ejemplo, la siguiente declaración en Java crea un objeto de
la clase párrafo: el objeto párrafo1.

Parrafo parrafo1;

Si más adelante quisiéramos justificar el texto de parrafo1, tendríamos que enviarle el


mensaje justificación.

Parrafo1.justificación();
SUBCLASES

Una característica primaria que define un sistema orientado a objetos es la manera en


que trata las relaciones estructurales y semánticas entre clases de objetos y elimina la
redundancia de almacenar el mismo atributo o método más veces de lo necesario. La
idea clave es la de una clasificación jerárquica en la que la clase hija o subclase hereda
los atributos y métodos de su clase padre. Por ejemplo, supongamos una clase
persona,
clase persona
atributos
Nombre
Dirección
métodos
CambiarNombre
CambiarDirección
ListarDatos

Podemos considerar las clases alumno y empleado en un nivel inferior. De este modo
alumno y empleado heredarán los atributos y los métodos de su clase padre persona a
los que podemos añadir los atributos y métodos propios de la clase hija. Esto es,

clase alumno subclase de persona


atributos
Estudios
Curso
métodos
CambiarEstudios
CambiarCurso
ListarDatos
La declaración anterior supone que la clase alumno herede los atributos y métodos de
la clase persona. Entonces un objeto de la clase alumno tendría los atributos Nombre,
Dirección, Estudios y Curso y los métodos CambiarNombre, CambiarDireccíón,
Cambiar Estudios, CambiarCurso y ListarDatos. Así mismo sucede que hemos
redefinido el método ListarDatos en la clase alumno para adaptarlo a las nuevas
necesidades.

Análogamente podemos considerar las clases administrativo y profesor como subclases


de la clase empleado. La jerarquía de clases resultante se muestra en la figura
siguiente:
Persona

Alumno Empleado

Administrativo Profesor

MENSAJES

Para poder crear una aplicación necesitarás más de un objeto, y estos objetos no
pueden estar aislados unos de otros, pues bien, para comunicarse esos objetos se
envían mensajes.

Los mensajes son simples llamadas a las funciones o métodos del objeto con él que se
quiere comunicar para decirle que haga cualquier cosa.

RECOLECTOR DE BASURA

El entorno de ejecución de Java tiene un recolector de basura que periódicamente


libera la memoria ocupada por los objetos que no se van a necesitar más.

El recolector de basura de Java es un barredor de marcas que escanea dinámicamente


la memoria de Java buscando objetos, marcando aquellos que han sido referenciados.
Después de investigar todos los posibles paths de los objetos, los que no están
marcados (esto es, no han sido referenciados) se les conoce como basura y son
eliminados.

El recolector de basura se ejecuta síncronamente cuando el sistema funciona fuera de


memoria o en respuesta a una petición de un programa Java. Un programa Java le
puede pedir al recolector de basura que se ejecute en cualquier momento mediante una
llamada a System.gc().

También podría gustarte