Download conceptos de programación orientada a objetos

Document related concepts
no text concepts found
Transcript
CONCEPTOS DE
PROGRAMACIÓN
ORIENTADA A OBJETOS
M. en C. Cecilia Pérez Colín
Email: [email protected]
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:
Simula, Smalltalk, Object Pascal, C++, the
Common Lisp Object System (CLOS), Ada, Eiffel,
Java y más.

PROGRAMACIÓN ESTRUCTURADA VS
PROGRAMACIÓN ORIENTADA A OBJETOS



Con los métodos de programación estructurada
los desarrolladores a crean sistemas basados en
algoritmos.
De igual manera, con los métodos orientados a
objetos los desarrolladores crean sistemas
basados en objetos y clases .
Las ideas fundamentales de clases y objetos
aparecieron por primera vez en el lenguaje de
programación Simula 67.
VENTAJAS Y DESVENTAJAS DE LA
PROGRAMACIÓN ORIENTADA A OBJETOS
VENTAJAS:
 Aumenta la reusabilidad
 Forma más modular de modelar problemas
 => diseños más claros
 => implementación más clara
 => mejor manejo de la complejidad
 Mantenimiento más eficiente
VENTAJAS Y DESVENTAJAS DE LA
PROGRAMACIÓN ORIENTADA A OBJETOS
DESVENTAJAS:
 La OO no garantiza la construcción de un
sistema correcto, como ningún otro método de
programación.
 Mayor concentración en requerimientos, análisis
y diseño.
 OO, no es solo la programación, es entender la
abstracción.
 Las ventajas de OO se obtienen a largo plazo
¿QUÉ ES LA PROGRAMACIÓN ORIENTADA A
OBJETOS?


1.
2.
3.
La programación orientada a objetos es un
método de implementación donde los programas
están organizados como colección de objetos
cooperativos, cada uno de los cuales representa
una instancia de alguna clase, y cuyas clases son
todas miembro de una jerarquía de clases unidas
mediante relaciones de herencia. (Grady Booch)
Observar estos tres elementos de la definición:
Utiliza objetos y no algoritmos
Cada objeto es instancia de una clase
Las clases se relacionan entre sí mediante
herencia
¿QUÉ ES EL DISEÑO Y ANÁLISIS
ORIENTADO A OBJETOS?


El diseño orientado a objetos es un método de
diseño que acompaña al proceso de
descomposición orientada a objetos y una
notación que describe tanto modelos lógicos y
físicos, así como estáticos y dinámicos del sistema
bajo diseño (Grady Booch).
El análisis orientado a objetos es un método
de análisis que examina los requerimientos del
sistema desde la perspectiva de clases y objetos
encontrados en el vocabulario de la descripción
del problema (Grady Booch).
5 PRINCIPALES ESTILOS DE
PROGRAMACIÓN
Todos los estilos de programación tiene su propio
marco conceptual.
Orientado a y basado en:
Procedimientos – algoritmos
 Objetos – Clases y objetos
 Lógica – Metas, generalmente lógica de
predicados
 Reglas – IF, THEN
 Restricciones – Relaciones invariantes

CARACTERÍSTICAS
DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS

•

•
•
•
•
•
La abstracción 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.
El encapsulamiento es el proceso modularizar los elementos de una
abstracción que constituyen su estructura y comportamiento. “Los
secretos de la abstracción”.
El ocultamiento de datos relacionados detrás de una interface de
métodos. Estos métodos permiten acceder a a la información y
manipularla convenientemente.
En OO un sistema se modulariza en clases, qua a su vez se
modularizan en métodos y atributos.
El comportamiento es encapsulado en métodos
La información es encapsulada en atributos
A través del encapsulamiento se define el qué se hace ocultando el
cómo se hace.
CARACTERÍSTICAS
DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS

•

•

La modularidad es la propiedad de un sistema para ser descompuesto en un
conjunto de módulos unidos y acoplados.
El acto de dividir un programa en componentes individuales que reducen su
grado de complejidad.
La jerarquía es la clasificación u orden de las abstracciones.
La herencia es la jerarquía más importante: “es un”, “es parte de”
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.

La persistencia es la propiedad de un objeto a existir en tiempo y/o espacio.

CONCEPTOS BÁSICOS DE LA
PROGRAMACIÓN ORIENTADA A OBJETOS

•
•
Un objeto es una entidad que mantiene una estructura
(atributos), que ofrece un conjunto de operaciones
(comportamiento), tiene una identidad (distingue un objeto de
otro).
El conjunto de valores asociados a cada atributo en un momento
dado se denomina estado.
Los objetos responden a mensajes recibidos mediante la ejecución
de métodos.
Objeto
Universidad
Información
nombre = “Universidad RIO”
domicilio = “Rio 3245”
Partes
alumnos
profesores
Comportamiento
inscribirAlumno
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
public class Alumno {
diferente.
public String Nombre;
public String Domicilio;
Alumno
+Nombre:string
+Domicilio:string
public Alumno(String n, String d){
}
+Alumno(n:String; d:String)
+setNombre(n:String)
+getNombre():string
public void setNombre(String n){
}
public String getNombre(){
}
}
CONCEPTOS BÁSICOS DE LA
PROGRAMACIÓN ORIENTADA A OBJETOS
•
Todos los objetos son ejemplares o instancias de una
clase.
alu1:Alumno
Alumno
+Nombre:string
+Domicilio:string
+Alumno(n:String; d:String)
+setNombre(n:String)
+getNombre():string
Nombre = Juan Perez
Domicilio = ejemplo
alu2:Alumno
Nombre = Abel Garcia
Domicilio = ejemplo
alu3:Alumno
Java
Alumno alu1 = new Alumno(“Juan Perez”, “ejemplo”);
Alumno alu2 = new Alumno(“Abel Garcia”, “ejemplo”); Nombre = Jose Lopez
Domicilio = nada
Alumno alu3 = new Alumno(“Jose Lopez”, “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
En Java es preciso asignar un identificador a cada
elemento que se defina: clase, atributo, método,
objeto, dato, etc.
JAVA – PALABRAS
RESERVADAS
Palabras reservadas
abstract
else
interface
static
boolean
extends
long
super
break
false
main
switch
byte
final
native
synchronized
case
finally
new
this
catch
float
null
throw
char
for
package
throws
class
if
private
true
continue
implements
protected
try
default
import
public
void
do
instanceof
return
volatile
double
int
short
while
JAVA – TIPOS DE DATOS PRIMITIVOS
•
Los tipos de datos definidos en Java y denominados
primitivos son:
Tipo
Descripción
Literales (ejemplos)
byte
Entero de 8 bits
8, 25
short
Entero de 16 bits
567
int
Entero de 32 bits
-78654
long
Entero de 64 bits
45678954L
float
Real en 32 bits con 7 dígitos
en la parte decimal
47.5F
double
Real en 64 bits con 15 dígitos
en la parte decimal
3456e-3
char
Carácter en 16-bits (unicode)
‘a’, ‘\’’,’\n’,’\u03A6’ (π)
boolean
Booleano
true y false
JAVA – REFERENCIA A OBJETOS
•
•
•
•
Además de los datos de tipo primitivo, en Java se
tiene a los objetos como el tipo de datos más
importante.
Para poder manipular a los objetos se tiene a las
referencias.
Una referencia contiene una dirección en memoria,
donde se encuentra el objeto con el que se quiere
trabajar.
En este tipo de datos sólo hay una literal, null
JAVA - DECLARACIÓN
Ejemplos de declaración de variables
 int edad, peso;
 double salario, altura;
 double altura = 0.48;
Ejemplos de declaración de constantes
 final int IVA = 16;
JAVA – EXPRESIONES



Los datos de tipo primitivo no son objetos, por lo tanto no
existen métodos asociados a ellos, la única forma de
trabajar con estos datos es mediante los operadores.
Un operador y sus operandos constituyen una expresión
La expresión puede ser
aritmética
 lógica
 asignación


Los operandos pueden ser
literales
 constantes
 variables
 resultado de llamadas a métodos

JAVA - OPERADORES
Operador Descripción
aritmético
+
Suma
Operado
r
unario
-
Resta
+
Mas unario
*
Multiplicación
-
Menos unario
/
División
%
Residuo de la
división
Operador de Descripción
relación
<
Menor que
<=
Menor o igual que
==
Igual que
>=
Mayor o igual que
>
Mayor que
!=
Diferente de
Descripción
++
Autoincremento
--
Autodecremento
Operador
para
cadenas
+
Descripción
Concatenación
JAVA - OPERADORES
Operador
lógico
Descripción
&&
Conjunción
||
Disyunción
!
&&
true
Negación
false
||
true
false
true
true
true
true
true
true
false
false
false
false
true
false
!
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
Precedencia de operadores de mayor a menor
D
JAVA – CONVERSIÓN DE TIPOS



En las expresiones que involucran operandos de diferente
tipo y estas no son compatibles se pueden convertir
implícita o explícitamente al tipo de dato que necesitamos.
La conversión implícita ocurre al tener una asignación
de un dato con tipo de menor prioridad a otro con mayor
prioridad
Las prioridades de menor a mayor son:







byte
char
short
int
long
float
double
JAVA – CONVERSIÓN DE TIPOS


La conversión explícita se utiliza cuando la
implícita no es factible. Esta se indica con el tipo
de resultado deseado entre paréntesis antes del
nombre de la variable.
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.
Java:
Alumno alu1 = new Alumno(“Juan Perez”, “ejemplo”);
Alumno alu2 = new Alumno(“Abel Garcia”, “ejemplo”);
Alumno alu3 = new Alumno(“Jose Lopez”, “nada”);
Alumno
+Nombre:string
+Domicilio:string
+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;
a[0].length;

/* 3 */
Para crear un array en Java hay dos métodos básicos.



/* 10 */
Crear un array vacío
Crear el arreglo con sus valores iniciales
Se pueden crear arreglos de tipos referencia (arreglos de objetos)

Tipo identificador[] = new tipo[tamaño]
Ej.: Alumno cursoPA[] = new Alumno[50]
public class Alumno {
private string nombre;
…
}
JAVA - MÉTODOS



El comportamiento de los objetos de una clase se
programa mediante la creación de métodos.
Un método es el conjunto de instrucciones que se
deben realizar al llamar a ejecutar tal método.
Componentes de un método:
Visibilidad - Especifica a cuáles métodos se puede tener
acceso
 Tipo de valor que devuelve – void si no devuelve nada
 Identificador del método – por convención se utiliza letra
minúscula
 Parámetros – especifica el tipo de cada valor que requiere
el método para trabajar



Paso de parámetro por valor
Cuerpo – bloque con las instrucciones que implementan la
tarea.
JAVA - MÉTODOS

Métodos modificadores
Tienen el propósito de modificar el valor de los atributos
privados del objeto
 No devuelven valor alguno.
 Generalmente el nombre de estos métodos empieza con la
palabra set.


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

El método main es indispensable pues es ahí
donde empieza la ejecución del programa
public static void main(String [] arg) {
…. //algoritmo
}
Es un método público (public)
 Es un atributo compartido por todos los objetos de la
clase, es decir, se trata de un atributo de clase (static)
 No devuelve valor alguno (void)
 Recibe un parámetro de tipo cadena

JAVA - MÉTODOS

STATIC: El uso de este modificador nos permite
utilizar el método y las variables sin necesidad de
crear objetos.
Los métodos estáticos solo pueden llamar a métodos
estáticos. Hay que ser consciente que es equivalente
a declararlas como globales.
 Al modificar el valor de un atributo estático en un
objeto se modifica para todos los objetos de esa clase.
 Si la llamada al método static esta en otra clase
distinta, se tiene que poner el nombre de la clase en
donde esta declarado el método static y el operador
punto (.).
nomb_clase.nomb_metodo([parámetros]);

JAVA - MÉTODOS

EJEMPLO: Teniendo una clase con 2 variables y un
método. Desde la otra clase se crea el objeto, se llama
al método y se muestran los valores del objeto.


EJEMPLO: Pasar valores al método.


Mostrar aplicación “PruebaPunto2” en NetBeans
EJEMPLO: Uso de las variables Static.


Mostrar aplicación “PruebaPunto” en NetBeans
Mostrar aplicación “PruebaEstatica” en NetBeans
EJEMPLO: Mostrar lectura de enteros.

Mostrar aplicación “???” en NetBeans
JAVA – CONSTRUCTORES

Constructores








Métodos para inicializar objetos.
Este método no posee tipo de retorno, ni siquiera
void
Recibe el nombre de la clase que lo contiene.
Se llama mediante el operador new
Puede contener parámetros
Toda clase de Java debe poseer por lo menos un
constructor.
Si desde un constructor se llama a otro constructor de
la misma clase se usa la palabra this en vez de new
La palabra this sólo puede aparecer en la primera
sentencia de un constructor.
JAVA – CONSTRUCTORES

EJEMPLO: Constructores


Mostrar aplicación “PuntoConstructor” en NetBeans
EJEMPLO: Diferentes métodos y constructores y
la aplicación muestra la diferencia entre
referencia y objeto

Mostrar aplicación Diferencia
JAVA – SENTENCIAS DE CONTROL


Es la manera que tiene un lenguaje de programación de
provocar que el flujo de la ejecución avance y se ramifique en
función de los cambios de estado de los datos.
IF-ELSE: La ejecución atraviesa un conjunto de estados
boolean que determinan que se ejecuten distintos fragmentos
de código. La cláusula else es opcional, la expresión puede ser
de cualquier tipo y más de una (siempre que se unan mediante
operadores lógicos).
if (expresion-booleana)
sentencia1;
else
sentencia2;

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;
}
EJEMPLO: Este programa muestra números del 1 al 100:
class multi{
public static void main(String args[]){
int n1=0;
for (n1=1;n1<=100;n1++)
System.out.print(n1+" ");
}
}
 CONTINUE: lo que hace es ignorar las sentencias que tiene el ciclo y saltar
directamente a la condición para ver si sigue siendo verdadera, si es así sigue
dentro del ciclo en caso contrario saldría directamente de el.
CONCEPTOS BÁSICOS DE LA
PROGRAMACIÓN ORIENTADA A OBJETOS

Modularización




Facilita el diseño de programas grandes
Es la propiedad de un sistema para ser descompuesto en un
conjunto de módulos unidos y acoplados.
El acto de dividir un programa en componentes individuales
que reducen su grado de complejidad.
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


Incluir objetos 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
Auto
maxFuel
maxNroDePasajeros
modelo
velocidad
...
acelerar()
desacelerar()
doblarAIzq()
doblarADcha()
...
Avion
maxAltitud
maxFuel
maxNroDePasajeros
velocidad
nroDeMotores
...
acelerar()
desacelerar()
descender()
ascender()
...
DESPUES
Vehiculo
maxFuel
maxNroDePasajeros
velocidad
...
acelerar()
desacelerar()
...
Auto
modelo
...
doblarAIzq()
doblarADcha()
...
superclase
Avion
maxAltitud
nroDeMotores
...
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 reinventarse. 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).
Todas las clases de Java creadas por el
programador tienen una superclase. Cuando no se
indica explícitamente una superclase con la palabra
extends, la clase deriva de java.lang.Object, que es
la raíz de toda la jerarquía de clases de Java.
JAVA - HERENCIA
•
•
La clase Object tiene métodos interesantes para cualquier
objeto que son heredados por cualquier clase.
1. Métodos que pueden ser redefinidos por el programador:
clone() – Crea un objeto a partir de otro objeto de la misma clase
• equals() – indica si dos objetos son o no iguales
• toString() – Devuelve un String que contiene una representación
del objeto como cadena de caracteres.
• finalize() – Se verá en el tema de excepciones
•
•
2. Métodos que no pueden ser redefinidos (son métodos final):
getclass() – devuelve un objeto de la clase Class, al cual se le
pueden aplicar métodos para determinar el nombre de la clase, su
super-clase, las interfaces implementadas, etc.
• notifiy(), notifyall y wait() – Son métodos relacionados con las
threads, los verán más adelante
•
JAVA - HERENCIA




Para especificar que se va a usar el mecanismo de herencia
se utiliza la palabra reservada extends seguida del
nombre de la clase que se heredará.
Los elementos públicos de una superclase pueden ser
utilizados sin ningún problema para cualquier clase y sus
subclases. Para esto se utiliza la palabra reservada public.
Los elementos privados de una superclase no pueden ser
utilizados desde fuera de la clase en que se definieron, así
sea una subclase. Para esto se utiliza la palabra reservada
privated.
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
Clase A1
Clase A2
public
protected
Niveles de acceso de los elementos de la clase A
JAVA - HERENCIA


Sintaxis:
class nombre_clase extends nombre_superclase
{cuerpo;}
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.
EJEMPLO: Partiendo de los ejemplos anteriores
vamos a crear una jerarquía de clases y muestra uso
del constructor super.

Mostrar aplicación “JerarquiaPunto” en NetBeans
JAVA – CONSTRUCTORES (REPETIDO)

Constructores








Métodos para inicializar objetos.
Este método no posee tipo de retorno, ni siquiera
void
Recibe el nombre de la clase que lo contiene.
Se llama mediante el operador new
Puede contener parámetros
Toda clase de Java debe poseer por lo menos un
constructor.
Si desde un constructor se llama a otro constructor de
la misma clase se usa la palabra this en vez de new
La palabra this sólo puede aparecer en la primera
sentencia de un constructor.
JAVA – CONSTRUCTORES EN SUBCLASES
El constructor de una subclase puede llamar al
constructor de su superclase por medio de la
palabra super(), seguida entre paréntesis de los
argumentos apropiados.
 La llamada al constructor de la superclase debe
ser la primera sentencia del constructor excepto
se llama a otro constructor de la misma clase con
this().
 Si el programador no prepara un constructor, el
compilador crea uno, inicializando las variables
de los tipos primitivos a sus valores por defecto y
a los Strings y referencias a objetos a null.

JAVA – CLASES Y MÉTODOS FINALES
Las variables declaradas como final no pueden
cambiar su valor una vez que han sido
inicializadas.
 Una clase declarada final no puede tener
subclases.
 Un método declarado como final no puede ser
redefinido por una subclase

JAVA – FINALIZADORES
Los finalizadores son métodos que completan la
labro del garbage collector que sólo libera la
memoria reservada con new.
 Se llama automáticamente cuando se va a
destruir un objeto
 Se utilizan para ciertas operaciones de
terminación distintas de liberar memorial, por
ejemplo, cerrar archivos, cerrar conexiones de
red, etc.
 Un finalizador es un método de objeto (no static),
void, sin argumentos.

finalize()
CONCEPTOS DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS
La relación de herencia entre clases forma una
estructura jerárquica similar a un árbol.
 Una superclase puede ser subclase de otra clase
superior y una subclase puede ser superclase de
otra clase.
 La especialización de una clase permite reusar
una clase existente para definir una nueva clase
más específica
 Cuando durante el diseño de la solución a un
problema se obtienen diversas clases
relacionadas y no existen clases para extender, se
crea una clase que generalice a todas ellas.

JAVA – REDEFINICIÓN MÉTODOS
HEREDADOS
Una clase puede redefinir cualquiera de los
métodos heredados de su superclase que no sean
final.
 El nuevo método sustituye al heredado para
todos los efectos en la clase que lo ha redefinido.
 Los métodos de la superclase que han sido
redefinidos, pueden ser todavía accedidos por
medio de la palabra super desde los métodos de
la subclase
 Los métodos de clase o static no pueden ser
redefinidos en las subclases.

JAVA – ESPECIALIZACIÓN /
GENERALIZACIÓN



Un objeto de una subclase puede usarse en cualquier lugar
en que se usaría un objeto de su superclase, esto se debe a
que el objeto también pertenece a su superclase.
Es decir, siempre es posible asignar un objeto especializado
a uno más general y no al revés sin una conversión
explícita.
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.
EJEMPLO: Se verá en el programa de
PruebaCuentas a continuación.
EJEMPLO: Aplicación del investigador que desea
llevar el control de los libros, tesis y artículos que
tiene.
JAVA – ESPECIALIZACIÓN /
GENERALIZACIÓN
Obra
autor
título
año
Métodos
Libro
…….
editorial
Tesis
…….
director
Grado
Métodos
Artículo
…….
revista
volumen
número
Métodos
Métodos
CONCEPTOS DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS




La habilidad de decidir cuál método aplicar a un objeto en una
jerarquía de herencia se denomina polimorfismo.
Polimorfismo es el mecanismo por el cual un objeto puede responder
al mismo mensaje de diferentes maneras, permitiendo a los objetos
interactuar con otros sin conocer su tipo exacto anticipadamente.
Es distinto al concepto de sobrecarga pues este se lleva a cabo
dentro de una misma clase.
El ejemplo más sencillo de polimorfismo es cuando se envía un
mensaje a un objeto para que realice una tarea, la subclase verifica si
tiene un método con esa firma.




Si es así, ejecuta el método
Si no turna el mensaje a la superclase
Este proceso se repita en la jerarquía de herencia hasta llegar a la raíz.
Si el método buscado no se encuentra entonces se tiene un error
JAVA – EJEMPLO HERENCIA

EJEMPLO: Crear nuevas clases por combinación,
extensión y/o especialización de clases existentes, a
través del mecanismo de herencia.
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)

Mostrar aplicación “PruebaCuentas” en NetBeans
JAVA - HERENCIA
Clase
Cuenta
CuentaCon
Servicios
CuentaDe
Credito
Estructura:
saldo
numCuenta
saldo
numCuenta
saldo
numCuenta
retirar
depositar
darSaldo
pagarTeléfono
retirar (superclase)
depositar
darSaldo
comprar
retirar (subclase)
obtenerValorDeuda
Comportamient retirar
o:
depositar
darSaldo
Mediante la herencia nos evitamos:
1. Modificar la clase Cuenta agregando los métodos requeridos.
Alterar el funcionamiento de la clase ya creada.
2. Copiar el código de Cuenta en el programa para el pago de
servicios y hacer el cambio necesario (duplicidad de código)
CONCEPTOS DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS




Las clases genéricas o polimorfismo real
paramétrico son clases que almacenan datos cuyo tipo
de determina al momento de crear objetos de tal clase.
Los métodos pueden trabajar con argumentos de
diversos tipos, generalmente realizando el mismo tipo
de trabajo independientemente del tipo de argumento.
En Java se este concepto se logra con la clase Object.
Una envoltura es una clase que permite trabajar con
un dato primitivo como si fuera un objeto y por lo
tanto usarlo cuando se requiera un objeto de la clase
Object.
JAVA – EJEMPLO CLASES GENÉRICAS

EJEMPLO: Crear nuevas clases por combinación,
extensión y/o especialización de clases existentes,
a través del mecanismo de herencia.
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.

Mostrar aplicación “ClaseGenerica” en NetBeans
2
5.3
“a”
………...
Memoria
Punto(3,2)
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
Figura f = new Rectangulo();
int s = f.obtenerSuperficie();
JAVA – ABSTRACT

EJEMPLO: Ejemplo que tiene como superclase
Figura; y Círculo y Cuadrado como subclases
Figura
x
y
obtenNombre()
Area()
Circulo
x
y
radio
obtenNombre()
area()
Cuadrado
x
y
lado
obtenNombre()
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.
Cuando todos los métodos de una clase son
abstractos y sólo hay constantes se está
definiendo una interfaz.
CONCEPTOS DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS

En Java no es posible tener herencia múltiple, es
decir:
Clase A
Atributos
Clase B
Atributos
Métodos
Métodos
Clase C
Atributos
Métodos