Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 26

PROGRAMACION ORIENTADA A OBJETO

1
La Programación Orientada a Objetos (POO) es un paradigma de programación,
es decir, un modelo o un estilo de programación que nos da unas guías sobre cómo
trabajar con él. Se basa en el concepto de clases y objetos. Este tipo de
programación se utiliza para estructurar un programa de software en piezas simples y
reutilizables de planos de código (clases) para crear instancias individuales de objetos.
A lo largo de la historia, han ido apareciendo diferentes paradigmas de programación.
Lenguajes secuenciales como COBOL o procedimentales como Basic o C, se
centraban más en la lógica que en los datos. Otros más modernos como Java, C# y
Python, utilizan paradigmas para definir los programas, siendo la Programación
Orientada a Objetos la más popular.

Fuente: Profile.es

2
Con el paradigma de Programación Orientado a Objetos lo que buscamos es dejar de
centrarnos en la lógica pura de los programas, para empezar a pensar en objetos, lo que
constituye la base de este paradigma. Esto nos ayuda muchísimo en sistemas grandes,
ya que en vez de pensar en funciones, pensamos en las relaciones o interacciones de los
diferentes componentes del sistema.
Un programador diseña un programa de software organizando piezas de información y
comportamientos relacionados en una plantilla llamada clase. Luego, se crean objetos
individuales a partir de la plantilla de clase. Todo el programa de software se ejecuta
haciendo que varios objetos interactúen entre sí para crear un programa más grande.

3
Qué es un Objeto
Es una forma de agrupar un conjunto de datos (estado) y de funcionalidad (comportamiento) en
un mismo bloque de código que luego puede ser referenciado desde otras partes de un
programa.

• La clase a la que pertenece el objeto puede considerarse como un nuevo tipo de datos

Clase y Objetos

Modelo

Marca Marca Marca


Atributos Atributos Atributos Modelo Modelo Modelo
Color Color Color
Patente Patente Patente

4
5
Clases, objetos e instancias

¿Cómo se crean los programas orientados a objetos? Resumiendo mucho, consistiría en


hacer clases y crear objetos a partir de estas clases. Las clases forman el modelo a partir
del que se estructuran los datos y los comportamientos.

El primer y más importante concepto de la POO es la distinción entre clase y objeto.

Una clase es una plantilla, un modelo. Define de manera genérica cómo van a ser los
objetos de un determinado tipo. Por ejemplo, una clase para representar a animales puede
llamarse ‘animal’ y tener una serie de atributos, como ‘nombre’ o ‘edad’ (que normalmente
son propiedades), y una serie con los comportamientos que estos pueden tener, como
caminar o comer, y que a su vez se implementan como métodos de la clase (funciones).

5
Un ejemplo sencillo de un objeto, como decíamos antes, podría ser un animal. Un animal tiene
una edad, por lo que creamos un nuevo atributo de ‘edad’ y, además, puede envejecer, por lo que
definimos un nuevo método. Datos y lógica. Esto es lo que se define en muchos programas como
la definición de una clase, que es la definición global y genérica de muchos objetos.

6
Con la clase se pueden crear instancias de un objeto, cada uno de
ellos con sus atributos definidos de forma independiente. Con esto
podríamos crear un gato llamado Paco, con 3 años de edad, y otro animal,
este tipo perro y llamado Pancho, con una de edad de 4 años. Los dos
están definidos por la clase animal, pero son dos instancias distintas.
Por lo tanto, llamar a sus métodos puede tener resultados diferentes. Los
dos comparten la lógica, pero cada uno tiene su estado de forma
independiente.

7
4 Principios de la Programación Orientada a Objetos
•La encapsulación

La encapsulación contiene toda la información importante de un objeto dentro del mismo y


solo expone la información seleccionada al mundo exterior.
Esta propiedad permite asegurar que la información de un objeto esté oculta para el mundo
exterior, agrupando en una Clase las características o atributos que cuentan con un acceso
privado, y los comportamientos o métodos que presentan un acceso público.

La encapsulación de cada objeto es responsable de su propia información y de su propio


estado. La única forma en la que este se puede modificar es mediante los propios métodos del
objeto. Por lo tanto, los atributos internos de un objeto deberían ser inaccesibles desde fuera,
pudiéndose modificar sólo llamando a las funciones correspondientes. Con esto conseguimos
mantener el estado a salvo de usos indebidos o que puedan resultar inesperados.

8
Usamos de ejemplo un coche para explicar la encapsulación. El coche comparte información
pública a través de las luces de freno o intermitentes para indicar los giros (interfaz pública).
Por el contrario, tenemos la interfaz interna, que sería el mecanismo propulsor del coche, que
está oculto bajo el capó. Cuando se conduce un automóvil es necesario indicar a otros
conductores tus movimientos, pero no exponer datos privados sobre el tipo de carburante o la
temperatura del motor, ya que son muchos datos, lo que confundiría al resto de conductores.

9
La encapsulación o encapsulamiento significa reunir en una cierta estructura a todos los
elementos que a un cierto nivel de abstracción se pueden considerar pertenecientes a una
misma entidad, y es el proceso de agrupamiento de datos y operaciones relacionadas bajo
una misma unidad de programación, lo que permite aumentar la cohesión de los componentes
del sistema.
El encapsulamiento oculta lo que hace un objeto de lo que hacen otros objetos y del mundo
exterior por lo que se denomina también ocultación de datos. Un objeto tiene que presentar
“una cara” al mundo exterior de modo que se puedan iniciar sus operaciones.

10
•La abstracción

La abstracción es cuando el usuario interactúa solo con los atributos y métodos


seleccionados de un objeto, utilizando herramientas simplificadas de alto nivel para acceder
a un objeto complejo.
En la programación orientada a objetos, los programas suelen ser muy grandes y los objetos
se comunican mucho entre sí. El concepto de abstracción facilita el mantenimiento de un
código de gran tamaño, donde a lo largo del tiempo pueden surgir diferentes cambios.
Así, la abstracción se basa en usar cosas simples para representar la complejidad. Los
objetos y las clases representan código subyacente, ocultando los detalles complejos al
usuario. Por consiguiente, supone una extensión de la encapsulación. Siguiendo con el
ejemplo del coche, no es necesario que conozcas todos los detalles de cómo funciona el
motor para poder conducirlo.

11
La abstracción es la propiedad que considera los aspectos más significativos o notables de un problema y
expresa una solución en esos términos. La abstracción posee diversos grados o niveles de abstracción, los
cuales ayudan a estructurar la complejidad intrínseca que poseen los sistemas del mundo real.
En el análisis hay que concentrarse en ¿Qué hace? y no en ¿Cómo lo hace?
El principio de abstracción es más fácil de entender con una analogía del mundo real, por ejemplo, la
televisión. Todos estamos familiarizados con sus características y su manejo manual o con el control remoto
(encender, apagar, subir volumen, etc.) incluso sabemos cómo conectarlo con otros aparatos externos como
altavoces o reproductores, o al internet. Sin embargo, no todos sabemos cómo funciona internamente, es
decir, como recibe la señal, como la traduce y la visualiza en la pantalla, etc.
Normalmente sucederá que no sepamos cómo funciona el aparato de televisión pero si sabemos cómo
utilizarlo. Esta característica se debe a que la televisión separa claramente su implementación interna de su
interfaz externa. Interactuamos con la televisión a través de su interfaz: los botones de encendido, cambio de
canal, volumen, etc. no conocemos el tipo de tecnología que utiliza, el método de generar la imagen en la
pantalla o como funciona internamente, es decir, su implementación, ya que ello no afecta a su interfaz.

12
Abstracción funcional Abstracción de datos
– Hay cosas que sabemos – Un coche tiene además
que los coches hacen ciertos atributos:
pero no cómo lo hacen:  Color
• avanzar Velocidad
• parar Tamaño
• girar a la derecha  Marca
• girar a la izquierda  Modelo
 etc.

13
•La herencia
La herencia define relaciones jerárquicas entre clases, de forma que atributos y métodos
comunes puedan ser reutilizados. Las clases principales extienden atributos y comportamientos a
las clases secundarias. A través de la definición en una clase de los atributos y comportamientos
básicos, se pueden crear clases secundarias, ampliando así la funcionalidad de la clase principal y
agregando atributos y comportamientos adicionales.
Volviendo al ejemplo de los animales, se puede usar una sola clase de animal y agregar un atributo
de tipo de animal que especifique el tipo de animal. Los diferentes tipos de animales necesitarán
diferentes métodos, por ejemplo, las aves deben poder poner huevos y los peces, nadan. Incluso
cuando los animales tienen un método en común, como moverse, la implementación necesitaría
muchas declaraciones «si» para garantizar el comportamiento de movimiento correcto. Por ejemplo,
las ranas saltan, mientras que las serpientes se deslizan. El principio de herencia nos permite
solucionar este problema.

14
Modelo Animal

15
•El polimorfismo

•Polimorfismo significa literalmente «muchas formas». Así pues, el polimorfismo genético,


cromosómico o de secuencia del ADN es el responsable de la gran variabilidad existente entre los
individuos de una misma especie.

El polimorfismo consiste en diseñar objetos para compartir comportamientos, lo que nos


permite procesar objetos de diferentes maneras. Es la capacidad de presentar la misma
interfaz para diferentes formas subyacentes o tipos de datos. Al utilizar la herencia, los
objetos pueden anular los comportamientos principales compartidos, con comportamientos
secundarios específicos. El polimorfismo permite que el mismo método ejecute diferentes
comportamientos de dos formas: anulación de método y sobrecarga de método.
Alrededor de estos principios de la programación orientada a objetos se construyen muchas
cosas.

16
Polimorfismo (en POO) es la capacidad que tienen ciertos lenguajes para
hacer que, al enviar el mismo mensaje (o, en otras palabras, invocar al mismo
método) desde distintos objetos, cada uno de esos objetos pueda responder a
ese mensaje (o a esa invocación) de forma distinta.

Volviendo al ejemplo de los vehículos, si defino una variable que apunta a un


objeto de clase "Coche", durante toda la vida de esa variable tendrá que
contener un objeto de la clase Coche, no pudiendo más adelante apuntar a un
objeto de la clase Moto o de la clase Bus. Esta rigidez, como decimos, no
existe en los lenguajes débilmente tipados como es el caso de Javascript o
PHP, sin embargo es una característica habitual de lenguajes como Java, que
son fuertemente tipados.

17
Coche miCoche = new Coche("Ford Focus 2.0");
//la variable miCoche apunta a un objeto de la clase coche
//si lo deseo, mañana podrá apuntar a otro objeto diferente, pero siempre
tendrá que ser de la clase Coche
miCoche = new Coche("Renault Megane 1.6");

Lo que nunca podré hacer es guardar en esa variable, declarada como


tipo Coche, otra cosa que no sea un objeto de la clase Coche.

//si miCoche fue declarada como tipo Coche, no puedo guardar un objeto de
la clase Moto
miCoche = new Moto("Yamaha YBR");
//la línea anterior nos daría un error en tiempo de compilación

18
Para qué nos sirve en la práctica el polimorfismo
Por ejemplo pensemos en la clase "Largometraje" y ahora pensemos en la clase "Cine".
En un cine se reproducen largometrajes. Puedes, no obstante, tener varios tipos de
largometrajes, como películas o documentales, etc. Quizás las películas y
documentales tienen diferentes características, distintos horarios de audiencia, distintos
precios para los espectadores y por ello has decidido que tu clase "Largometraje" tenga
clases hijas o derivadas como "Película" y "Documental".

Imagina que en tu clase "Cine" creas un método que se llama "reproducir()". Este método
podrá recibir como parámetro aquello que quieres emitir en una sala de cine y podrán
llegarte a veces objetos de la clase "Película" y otras veces objetos de la clase
"Documental". Si has entendido el sistema de tipos, y sin entrar todavía en polimorfismo,
debido a que los métodos declaran los tipos de los parámetros que recibes, tendrás que
hacer algo como esto:

19
En concreto, en nuestro array de vehículos, gracias al polimorfismo podrás contener en los
elementos del array no solo vehículos genéricos, sino también todos los objetos de clases
hijas o derivadas de la clase "Vehiculo", osea objetos de la clase "Coche", "Moto", "Bus" o
cualquier hija que se haya definido.

20
reproducir(Pelicula peliculaParaReproducir)

Pero si luego tienes que reproducir documentales, tendrás que declarar:

reproducir(Documental documentaParaReproducir)
Probablemente el código de ambos métodos sea exactamente el mismo. Poner la película en
el proyector, darle al play, crear un registro con el número de entradas vendidas, parar la cinta
cuando llega al final, etc. ¿Realmente es necesario hacer dos métodos? De acuerdo, igual no
te supone tanto problema, ¿pero si mañana te mandan otro tipo de cinta a reproducir, como la
grabación de la final del mundial de fútbol en 3D? ¿Tendrás que crear un nuevo método
reproducir() sobre la clase "Cine" que te acepte ese tipo de emisión? ¿es posible ahorrarnos
todo ese mantenimiento?

21
Aquí es donde el polimorfismo nos ayuda. Podrías crear perfectamente un método "reproducir()"
que recibe un largometraje y donde podrás recibir todo tipo de elementos, películas,
documentales y cualquier otra cosa similar que sea creada en el futuro.
Entonces lo que te permiten hacer los lenguajes es declarar el método "reproducir()" indicando
que el parámetro que vas a recibir es un objeto de la clase padre "Largometraje", pero donde
realmente el lenguaje y compilador te aceptan cualquier objeto de la clase hija o derivada,
"Película", "Documental", etc.

reproducir(Largometraje elementoParaReproducir)

Podremos crear películas y reproducirlas, también crear documentales para luego reproducir y
lo bonito de la historia es que todos estos objetos son aceptados por el método "reproducir()",
gracias a la relajación del sistema de tipos. Incluso, si mañana quieres reproducir otro tipo de
cinta, no tendrás que tocar la clase "Cine" y el método "reproducir()". Siempre que aquello que
quieras reproducir sea de la clase "Largometraje" o una clase hija, el método te lo aceptará.

22
Veamos otro Ejemplo
Tenemos la clase Parking. Dentro de ésta tenemos un método estacionar().
Puede que en un parking tenga que estacionar coches, motos o autobuses. Sin
polimorfismo tendría que crear un método que permitiese estacionar objetos de
la clase "Coche", otro método que acepte objetos de la clase "Moto" para
estacionarlos, etc. Pero todos estaremos de acuerdo que estacionar un coche,
una moto o un bus es bastante similar: "entrar en el parking, recoger el ticket
de entrara, buscar una plaza, situar el vehículo dentro de esa plaza...".

Lo ideal sería que nuestro método me permita permita recibir todo tipo de
vehículos para estacionarlos, primero por reutilización del código, ya que es
muy parecido estacionar uno u otro vehículo, pero además porque así si
mañana el mercado trae otro tipo de vehículos, como una van, todoterreno
hibrido, o una nave espacial, mi software sea capaz de aceptarlos sin tener que
modificar la clase Parking.
23
Gracias al polimorfismo, cuando declaro la función estacionar() puedo decir que recibe como parámetro un
objeto de la clase "Vehículo" y el compilador me aceptará no solamente vehículos genéricos, sino todos
aquellos objetos que hayamos creado que hereden de la clase Vehículo, ósea, coches, motos, buses, etc.
Esa relajación del sistema de tipos para aceptar una gama de objetos diferente es lo que llamamos
polimorfismo.

24
En fin, esto es lo que significa polimorfismo. A partir de aquí
puede haber otra serie de consideraciones y recomendaciones,
así como características implementadas en otros lenguajes.
Conclusión
La Programación Orientada a Objetos es actualmente el paradigma que
más se utiliza para diseñar aplicaciones y programas informáticos. Son
muchas sus ventajas, principalmente cuando necesitas resolver desafíos de
programación complejos. Permite una mejor estructura de datos y
reutilización del código, lo que facilita el ahorro de tiempo a largo plazo,
especialmente en la administración de Bases de Datos. Eso sí, para ello se
requiere pensar bien en la estructura del programa, planificar al comienzo
de la codificación, así como analizar los requisitos en clases simples y
reutilizables que se pueden usar para diseñar instancias de objetos.

25
26

También podría gustarte