Unidad 1.
Introducción a la Programación Orientada a Objetos (POO)
2.1 Objetos y Clases
Un objeto es:
Una cosa tangible y/o visible
Automóvil
Algo que puede comprenderse intelectualmente
Proceso
Una entidad software
Lista
Todo objeto del mundo real tiene 2 componentes: características y comportamiento.
Por ejemplo, los automóviles tienen características (marca, modelo, color, velocidad máxima,
etc.) y comportamiento (frenar, acelerar, retroceder, llenar combustible, cambiar llantas,
etc.).
Los Objetos de Software, al igual que los objetos del mundo real, también tienen
características y comportamientos. Un objeto de software mantiene sus características en
una o más "variables", e implementa su comportamiento con "métodos". Un método es una
función o subrutina asociada a un objeto.
Para redondear estas ideas, imaginemos que tenemos estacionado en nuestra cochera un
Ford Focus color azul que corre hasta 260 km/h. Si pasamos ese objeto del mundo real al
mundo del software, tendremos un objeto Automóvil con sus características
predeterminadas:
Marca = Ford
Modelo = Focus
Color = Azul
Velocidad Máxima = 260 km/h
Cuando a las características del objeto le ponemos valores decimos que el objeto tiene
estados. Las variables almacenan los estados de un objeto en un determinado momento.
Definición teórica: Un objeto es una unidad de código compuesto de variables y métodos
relacionados.
Los términos de objetos e instancia son intercambiables
Clases.
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo,
nuestro teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en
términos de la programación orientada a objetos, podemos decir que nuestro objeto celular
es una instancia de una clase conocida como "celular". Los celulares tienen características
(marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y
recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.).
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares
comparten esas características comunes y construyen modelos o plantillas comunes, para
que a partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese
modelo o plantilla le llamamos CLASE, y a los equipos que sacamos a partir de ella la
llamamos OBJETOS.
Tipos de operaciones que se realizan sobre un objeto:
Modificador (setter): modifica el estado de un objeto
Selector (getter): accede al estado de un objeto sin alterarlo
Iterador: permite acceder a todas las partes de un objeto
Constructor: crea un objeto e inicializa su estado
Destructor: Limpia el estado de un objeto y lo destruye
Propósito general: la lógica del programa
Estructura de una clase
Nombre
Atributos
Métodos
Clase vs. Objetos
Clase:
Un patrón para la definición del estado y el comportamiento de un tipo particular de objetos
Todos los objetos de una clase dada son idénticos en estructura y comportamiento, pero
tienen identidad única
Objeto (instancia)
Pertenece a una clase en particular
Los objetos son creados y destruidos en tiempo de ejecución. Residen en el espacio de
memoria
2.2 Elementos primordiales en el modelo de objetos
Abstracción
Encapsulamiento
Ocultamiento
Herencia
Polimorfismo
Abstracción
La abstracción consiste en captar las características esenciales de un objeto, así como su
comportamiento.
¿Qué características podemos abstraer de los automóviles? O lo que es lo mismo, ¿Qué
características semejantes tienen todos los automóviles? Todos tendrán una marca, un
modelo, número de chasis, peso, llantas, puertas, ventanas, etc. Y en cuanto a su
comportamiento todos los automóviles podrán acelerar, frenar, retroceder, etc.
En los lenguajes de programación orientada a objetos, el concepto de Clase es la
representación y el mecanismo por el cual se gestionan las abstracciones.
Por ejemplo, en Java tenemos:
public class Automovil {
// variables
// métodos
Encapsulamiento y ocultamiento
Encapsulamiento
El encapsulamiento consiste en unir en la Clase las características y comportamientos, esto
es, las variables y métodos. Es tener todo esto en una sola entidad. En los lenguajes
estructurados esto era imposible. Es evidente que el encapsulamiento se logra gracias a la
abstracción y el ocultamiento que veremos a continuación.
La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que
tendremos a las Clases como cajas negras donde sólo se conoce el comportamiento pero no
los detalles internos, y esto es conveniente porque nos interesará será conocer qué hace la
Clase pero no será necesario saber cómo lo hace.
Ocultamiento
Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer
sólo los detalles que sean necesarios para el resto del sistema.
El ocultamiento permite 2 cosas: restringir y controlar el uso de la Clase. Restringir porque
habrá cierto comportamiento privado de la Clase que no podrá ser accedido por otras Clases.
Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y
es en estos mecanismos dónde se validarán que algunas condiciones se cumplan. En Java el
ocultamiento se logra usando las palabras reservadas: public, private y protected delante de
las variables y métodos.
Herencia
La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente
consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase
que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de
los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la
superclase. De esta manera se crea una jerarquía de herencia.
Por ejemplo, imaginemos que estamos haciendo el análisis de un Sistema para una tienda
que vende y repara equipos celulares.
Polimorfismo
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 posibilita desencadenar operaciones diferentes en respuesta a un mismo mensaje, en
función del objeto que lo reciba.
Diagramas UML (Unified Modeling Language)
Lenguaje visual (diagramas) para modelar sistemas
Tipos de Diagramas UML
Casos de uso
Diagrama de clases
Diagramas de interacción
o Diagramas de secuencia
o Diagramas de colaboración
Diagramas de estado
Diagramas de actividad
Diagramas físicos
o Diagramas de componentes
o Diagramas de implantación
Diagramas de clases
Representa las clases que componen el sistema y sus relaciones estáticas.
Incluye:
Clases con sus atributos y operaciones
Asociación entre las clases
Restricciones sobre las clases y asociaciones
Datos relevantes de las asociaciones
Clases, atributos y operaciones
La clase se representa mediante un rectángulo dividido en 3 partes
El nombre de la clase va arriba
La definición de los atributos va en medio
Visibilidad nombre: tipo = valor por defecto
La definición de los métodos va abajo
Visibilidad nombre (dirección lista de parámetros) : tipo de retorno
Ejemplos:
Defina un diagrama de clases llamado Rectangulo que tenga las siguientes
especificaciones:
Atributos:
largo : double
ancho : double
Métodos:
calcularArea
setLargo
setAncho
getLargo
getAncho
Constructores:
que inicialice los atributos de largo y ancho con los valores 25 y 50
respectivamente
que reciba como parámetro los valores para los atributos largo y ancho.
+ Rectangulo
- largo : double
- ancho : double
+Rectangulo()
+Rectangulo(largo:double, ancho:double)
+ setLargo(nuevoLargo: double):void
+ setAncho(nuevoAncho: double, a:double):void
+ getLargo() : double
+ getAncho() : doublé
+ calcularArea() : double
Ejercicios:
1. Defina un diagrama de clases llamado Triangulo que tenga las siguientes
especificaciones:
Atributos:
ladoA : double
ladoB : double
ladoC : double
Métodos:
calcular Area()
calcularPerimetro()
setLadoA
setLadoB
setLadoC
getLadoA
getLadoB
getLadoC
Constructores:
que inicialice los atributos en valores
que reciba como parámetro los valores para los atributos
2. Defina un diagrama de clases llamado Circulo que tenga las siguientes
especificaciones:
Atributos:
radio
Métodos:
calcular Area
calcularCircunferencia
setRadio
getRadio
Constructores:
que inicialice los atributos en cero
que reciba como parámetro los valores para los atributos
3. Defina un diagrama de clases llamado Persona que tenga las siguientes
especificaciones:
Atributos:
nombre : String
edad : int
peso : double
altura : double
Constructores:
que inicialice los atributos con valores probables
que reciba como parámetro los valores para los atributos
Métodos:
getNombre
setNombre
getEdad
setEdad
getPeso
setPeso
getAltura
setAltura
calcularCalorias
calcularIMC
4. Defina un diagrama de clases llamado Empleado que tenga las siguientes
especificaciones:
Atributos:
nombre : String
departamento : int
horasTrabajadas : char
pagoHora : double
Métodos:
set Nombre
setDepartamento
setHorasTrabajadas
setPAgoHora
get Nombre
getDepartamento
getHorasTrabajadas
getPAgoHora
calcularSalario () : double
Constructores:
que inicialice los atributos en:
nombre = “”
departamento : 1
horasTrabajadas : 0
pagoHora : 0
que reciba como parámetro los valores para los atributos
Defina un diagrama de clases llamado Persona que tenga las siguientes
especificaciones:
Atributos:
nombre : String
edad : int
peso : double
altura : double
Métodos:
calcularCalorias
calcularIMC
setNombre
setEdad
setPeso
setAltura
getNombre
getEdad
getPeso
getAltura
Constructores:
que inicialice los atributos en cero
que reciba como parámetro los valores para los atributos
5. Defina un diagrama de clases llamado Estudiante que tenga las siguientes
especificaciones:
Atributos:
nombre : String
matricula : int
calificacion1 : double
calificacion2 : double
calificación3 : double
Métodos:
setNombre
setMatricula
setCalificacion1
setCalificacion2
setCalificacion3
getCalificacion1
getCalificacion2
getCalificacion3
calculaPromedioAritmetico :double
calculaPromedioPonderado(int c1, int c2, int c3)
Constructores:
que inicialice los atributos en:
nombre = “Pendiente”
matricula = 0
calificacion1= 0
calificacion2= 0
calificacion3= 0
que reciba como parámetro los valores para los atributos
++++++++++
6. Defina un diagrama de clases llamada Persona que tenga las siguientes
especificaciones:
Atributos:
nombre : String
edad : int
peso : double
altura : double
Métodos:
set Nombre
setEdad
setPeso
setAltura
get Nombre
getEdad
getPeso
getAltura
calcularCalorias () : double
calcularIMC () : double
Constructores:
que inicialice los atributos en:
nombre = “Pendiente”
edad = 0
peso= 0
altura= 0
que reciba como parámetro los valores para los atributos