Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIÓN ORIENTADA A
OBJETOS
M. en C. Cecilia Pérez Colín
Email: cecypc@gmail.com
CONTENIDO
Conceptos de Programación Orientada a Objetos
Clases
Objetos
Herencia
Relaciones de uso
Generadores
Iteradores
Manejo de excepciones
Paquetes (módulos)
Interfaces
Programación en Java
INTRODUCCIÓN A LA PROGRAMACIÓN
ORIENTADA A OBJETOS
Crear software es inherentemente complejo, muchas
veces esta complejidad excede la capacidad humana.
Además una de las tareas de los ingenieros de software
es crear sistemas que parezcan simples.
La POO es una forma de organizar nuestras ideas con
respecto a nuestro mundo, de manera conceptual.
Esta organización se basa en el tipo de cosas, o tipos de
objetos, con los que convivimos diariamente.
INTRODUCCIÓN A LA PROGRAMACIÓN
ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN
ORIENTADA A OBJETOS
POO surgió de la necesidad de simular sistemas de
forma sencilla.
La idea básica consiste en simular conceptos que son
fundamentales en el pensamiento humano
INTRODUCCIÓN A LA PROGRAMACIÓN
ORIENTADA A OBJETOS
El análisis y diseño orientado a objetos es un método
para crear software.
El concepto principal es que uno debe modelar sistemas
de software como una colección de objetos que cooperan
entre sí mediante el envío de mensajes.
Se trata a cada objeto como instancia de una clase dentro
de una jerarquía de clases.
Lenguajes Orientados a Objetos:
Procedimientos – algoritmos
Objetos – Clases y objetos
La asignación de tipos es la imposición de asignar una clase a un objeto; así los objetos
de diferentes tipos no pueden ser intercambiados, o a lo más, ser intercambiados pero con
muchas restricciones.
La concurrencia es la propiedad que distingue un objeto activo de uno que no está activo.
• La concurrencia permite actuar a diferentes objetos al mismo tiempo.
Información
nombre = “Universidad RIO”
Objeto
domicilio = “Rio 3245”
Universidad
Partes Comportamiento
alumnos inscribirAlumno
profesores modiDatosProfesor
CONCEPTOS BÁSICOS DE LA
PROGRAMACIÓN ORIENTADA A
OBJETOS
Una clase es un molde a partir del cual se pueden crear objetos
con la estructura y el comportamiento definidos en ella.
• La identidad de cada objeto es única y no depende de la case,
pues aunque los objetos de misma clase tiene igual estructura,
su estado puede ser diferente.
public class Alumno {
alu1:Alumno
Alumno Nombre = Juan Perez
+Nombre:string Domicilio = ejemplo
+Domicilio:string
+Alumno(n:String; d:String)
+setNombre(n:String) alu2:Alumno
+getNombre():string Nombre = Abel Garcia
Domicilio = ejemplo
Java alu3:Alumno
Alumno alu1 = new Alumno(“Juan Perez”, “ejemplo”);
Nombre = Jose Lopez
Alumno alu2 = new Alumno(“Abel Garcia”, “ejemplo”);
Alumno alu3 = new Alumno(“Jose Lopez”, “nada”); Domicilio = nada
JAVA - CLASES
• En cada clase se define la estructura y el comportamiento que
tendrán los objetos
• El encabezado consta como mínimo, de la visibilidad de la
clase
• Pública (public)
• Privada (private)
• Protegida (protected)
• La estructura de los objetos de la clase se define declarando
sus atributos como datos de cualquiera de los tipos definidos
por el lenguaje
• Las variables utilizadas para definir los atributos en una clase
se conocen como variables de instancia.
JAVA - DATOS
• Los datos que intervienen en la solución de un problema
pueden ser
• Datos de algún tipo definido por Java,
• Objetos de clases definidas en Java (paquetes)
• Definidas por el lenguaje
• Definidas por otros programadores
• Objetos de clases definidas por el mismo programador
Operador de Descripción
relación Operador Descripción
para cadenas
< Menor que
+ Concatenación
<= Menor o igual que
== Igual que
>= Mayor o igual que
> Mayor que
!= Diferente de
JAVA - OPERADORES
Operador lógico Descripción
&& Conjunción
|| Disyunción
! Negación
!
false true
true false
Operador Descripción Asoc
() [] . Paréntesis y punto I
++ -- Incremento y decremento (post) I
++ -- Incremento y decremento (pre) D
! Negación D
- + Menos y más unarios D
new Operador para crear objetos D
(tipo) Conversión explícita de tipo D
* / % Multiplicación, división, residuo I
+ - Suma, resta I
instanceof <, <=, >, >= Operadores de relación I
== != Operadores de igualdad I
&& Conjunción I
|| Disyunción I
?: Operador condicional D
= op = Asignación D
Ejemplo de la implícita:
Al tener una expresión que incluya datos de tipo entero y
datos de tipo real, el resultado será un número real.
Ejemplo de explícita:
long largo = 99988883476L;
int entero = (int) largo; //trunca a un valor de 32 bits
CONCEPTOS BÁSICOS DE LA
PROGRAMACIÓN ORIENTADA A
OBJETOS
• Un constructor es un método definido en una clase usado para
instanciar objetos de la misma.
• En Java, la aplicación del operador new crea un objeto, separando
el espacio necesario para mantener su estado y devuelve como
resultado la referencia al objeto creado.
• Una referencia es un tipo de dato usado para trabajar con objetos.
Alumno
Java:
+Nombre:string
Alumno alu1 = new Alumno(“Juan Perez”, “ejemplo”);
+Domicilio:string
Alumno alu2 = new Alumno(“Abel Garcia”, “ejemplo”);
Alumno alu3 = new Alumno(“Jose Lopez”, “nada”); +Alumno(n:String; d:String)
+setNombre(n:String)
+getNombre():string
CONCEPTOS BÁSICOS DE LA
PROGRAMACIÓN ORIENTADA A
OBJETOS
• Un destructor (recolector de basura)
• En Java, la eliminación de objetos es implícita.
• Si se piensa que se tiene varios objetos sin referencia, se
puede llamar al método gc de la clase System.
EJEMPLO DE PROGRAMA EN JAVA
/**
*Programa para que envíe un mensaje de felicitación
*Objetivo Mostrar como se crean y usan objetos
*@autor suNombre
*@versión Fecha
*/
public class Felicitación {
public static void main (String [] pps) {
System.out.println(“¡Felicidades! Has escrito tu primer
programa en Java”);
}
}
JAVA – MATRICES O ARREGLOS
Las matrices o arreglos son un grupo de variables con el mismo nombre y tipo.
La manera de referirse a cada uno de los elementos de una matriz es mediante su índice.
Los tipos de la matrices son los mismos que el de las variables.
Tenemos 2 tipos de arreglos: unidimensional y bidimensional.
UNIDIMENSIONALES:
tipo nombre_array[]=new tipo[tamaño];
Ej.: int [] enteros =new int[10]
tipo nombre_array[]={valores};
Ej.: int mesdias[]={31,28,31,30,31,30,31,31,30,31,30,31};
BIDIMENSIONALES:
tipo nombre_array[][]=new[lineas][columnas];
Ej. int a[][] = new int[10][3]
JAVA – MATRICES O ARREGLOS
Los arreglos en Java son realmente objetos que deben crearse por medio del operador new.
Tiene una función miembro length que se utiliza para conocer la longitud de cualquier arreglo.
int a[][] = new int[10][3];
a.length; /* 10 */
a[0].length; /* 3 */
Para crear un array en Java hay dos métodos básicos.
Crear un array vacío
Crear el arreglo con sus valores iniciales
Métodos de acceso
Son el medio de conocer el valor de los atributos privados del objetos.
No reciben parámetros.
El valor que devuelven es del tipo definido en el atributo.
Generalmente su nombre empieza con la palabra get.
Si se especifica que un método va a devolver un valor, se debe usar en
el cuerpo del mismo la instrucción return seguida de una expresión
cuyo valor es lo que se devuelve.
JAVA - MÉTODOS
Métodos calculadores
Se emplean para implementar cualquier comportamiento
deseado de los objetos.
Pueden recibir y/o devolver valores
No modifican el estado del objeto, ni devuelven el valor de
algún atributo, trabajan con el estado del objeto para calcular
un valor
Métodos constructores
Un constructor es un método cuyo objetivo es asignar valor
inicial a cada atributo de un objeto recién creado.
Se verá más adelante
JAVA - MÉTODOS
SINTAXIS:
valor_devuelto nombre_método([valores]) {
cuerpo;
}
Si tenemos que hacer referencia a las variables de
instancia y los métodos contenidos en un objeto se
necesita el operador punto(.).
Ej.
Objeto.nomb_método( );
Objeto.nomb_método(valores);
Objeto.variable;
JAVA - MÉTODOS
EJEMPLO: Constructores
Mostrar aplicación “PuntoConstructor” en NetBeans
Operador ternario
Ej.: e = (b==0) ? 0 : (a/b)
JAVA – SENTENCIAS DE CONTROL
IF-ELSEIF ELSE: Permite introducir más de una expresión de
comparación. Si la primera no se cumple, compara la segunda y así
sucesivamente. En caso de que no se cumpla ninguna de las comparaciones
se ejecutan las sentencias correspondientes al else.
if (expresion-booleana1) {
sentencia1;
}
else if (expresión-booleana2) {
sentencia2;
}
…….
else {
sentencian;
}
JAVA – SENTENCIAS DE CONTROL
SWITCH: Realiza distintas operaciones en base al valor de una única variable o
expresión. Es una sentencia muy similar a if-else, pero esta es mucho más cómoda y fácil
de comprender.
switch (expresión) {
case valor1:
sentencia;
break;
case valor2:
sentencia;
break;
…..
case valorN:
sentencia;
break;
default:
}
JAVA – SENTENCIAS DE CONTROL
WHILE: Ejecuta repetidamente el mismo bloque de código hasta que se cumpla una
condición de terminación.
[inicialización;]
while(condición){
cuerpo;
iteración;
}
DO-WHILE: Es lo mismo que en el caso anterior pero aquí como mínimo siempre se
ejecutara el cuerpo una vez, en el caso anterior es posible que no se ejecute ni una sola
vez.
[inicialización;]
do{
cuerpo;
iteración;
} while(condición);
JAVA – SENTENCIAS DE CONTROL
FOR: Realiza las mismas operaciones que en los casos anteriores pero la sintaxis es una forma
compacta.
for (inicialización;condición;iteración) {
sentencia1;
sentencia2;
}
Abstracción
Facilita el diseño de programas grandes.
Denota las características esenciales de un objeto que lo distinguen de otros tipos de
objetos.
• Es el análisis de las características, atributos y métodos que son (y que no son) de
interés para la aplicación en consideración.
Agregación
Incluirobjetos en la estructura de objetos de otra clase.
Por ejemplo, una línea tiene un punto p1 y un punto p2.
CONCEPTOS BÁSICOS DE LA
PROGRAMACIÓN ORIENTADA A
OBJETOS
• Las clases se relacionan entre sí por mediante relaciones de
herencia.
• Es una jerarquía estilo “es un(a)”. Por ejemplo, “un alumno
es una persona”
• La herencia es una generalización/especialización de una
clase.
• Las superclases son abstracciones generalizadas
• Las subclases son abstracciones especializadas.
• La subclase puede añadir nuevas variables y métodos y/o
redefinir (overridden) las variables y métodos heredados.
CONCEPTOS BÁSICOS DE LA
PROGRAMACIÓN ORIENTADA A
OBJETOS
CONCEPTOS BÁSICOS DE LA
PROGRAMACIÓN ORIENTADA A
OBJETOS
• La herencia es el mecanismo que permite definir nuevas clases basadas
en la existencia de otras muy parecidas evitando la duplicidad de código.
ANTES DESPUES
Auto Vehiculo
maxFuel maxFuel superclase
maxNroDePasajeros maxNroDePasajeros
modelo velocidad
velocidad Avion ...
... maxAltitud acelerar()
acelerar() maxFuel desacelerar()
desacelerar() maxNroDePasajeros ...
doblarAIzq() velocidad
doblarADcha() nroDeMotores
... ...
acelerar() Auto Avion
desacelerar() modelo
descender() maxAltitud
... nroDeMotores
ascender() doblarAIzq()
... ...
doblarADcha()
descender()
...
ascender()
...
subclase
CONCEPTOS DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS
VENTAJAS:
Se reduce el tiempo que toma construir nuevas aplicaciones,
debido a que el software no tiene que re-inventarse. Una aplicación
se construye tomando clases ya escritas, en caso necesario se
extienden.
Cuando se crean nuevas clases utilizando herencia, éstas son
pequeñas debido a que sólo contienen las diferencias con respecto
a sus superclases.
Es posible extender clases sin necesidad de tener el código de
ellas.
Las aplicaciones son más fáciles de entender debido a que es
menos el software nuevo.
Se facilita el trabajo de mantenimiento debido a que cualquier
cambio en un atributo o método compartido sólo se hace en un
lugar, evitando posibles inconsistencias.
JAVA - HERENCIA
• Java permite múltiples niveles de herencia, pero no permite
que una clase derive de varias (no es posible la herencia
múltiple).
Si se quiere tener atributos y métodos que sean privados para todas las
clases excepto para las clases derivadas, es necesario que en su
declaración se precedan la palabra reservada protected.
JAVA – HERENCIA - ENCAPSULAMIENTO
private
Clase B Clase A
public Clase A1 Clase A2
protected
Sobrecarga
Se utiliza para crear más de un método con el mismo nombre, pero
con distinto numero de parámetros y operaciones distintas. La
sobrecarga se puede utilizar para miembros constructores o para la
herencia.
Por ejemplo;
Cuenta cta; //superclase
CuentaConServicios ctaConS = new CuentaConServicios(); //subclase
CuentaDeCredito ctaCred = new CuentaDeCrédito(); //subclase
…….
cta = ctaCred //correcto
ctaCred = cta //incorrecto
ctaConsS = ctaCred //incorrecto
JAVA – ESPECIALIZACIÓN /
GENERALIZACIÓN
Para evitar problemas, al asignar referencias a objetos es
conveniente utilizar el operador instanceof, el cual
devuelve la clase a la que pertenece el objeto.
Obra
autor
título
año
Métodos
Es distinto al concepto de sobrecarga pues este se lleva a cabo dentro de una misma
clase.
Problema:
Se requiere un programa para el mantenimiento de cuentas bancarias
teniendo cuentas de débito, cuentas con pago automático de servicios y
cuentas de crédito.
Con todas las cuentas se permite retirar dinero, depositar dinero, y
conocer el saldo de la misma. Las cuentas con pago de servicio además
permiten el pago automático de teléfono, y las cuentas de crédito
permiten comprar crédito y consultar este crédito. (Ver diseño en el slide
siguiente)
Problema:
Una memoria que consta de un conjunto de celdas que almacene
cualquier dato de alguno de los diferentes tipos que se permitan en
el lenguaje.
Memoria
CONCEPTOS DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS
Una clase abstracta (abstract) es una clase de la que no
se pueden crear objetos.
Su utilidad es permitir que otras clases deriven de ella,
proporcionándoles un marco o modelo que deben seguir
y algunos métodos de utilidad general.
Las clases abstractas se declaran anteponiéndoles la
palabra abstract
public abstract class Figura { }
Puede tener métodos declarados como abstract, en cuyo
caso no se define el método.
Si un clase tiene algún método abstract es obligatorio
que la clase sea abstract, más no viceversa.
JAVA - ABSTRACT
Circulo Cuadrado
x x
y y
radio lado
obtenNombre() obtenNombre()
area() area()
CONCEPTOS DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS
Una interface es la definición de una colección de una o
más operaciones que componen un comportamiento
cohesivo (servicio) que debe ser implementado por una o
más clases o componentes.
Clase A Clase B
Atributos Atributos
Métodos Métodos
Clase C
Atributos
Métodos