Está en la página 1de 77

CONCEPTOS DE

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:

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?
 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:


1. Utiliza objetos y no algoritmos
2. Cada objeto es instancia de una clase
3. 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.

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 {

public String Nombre;


Alumno public String Domicilio;

+Nombre:string public Alumno(String n, String d){


+Domicilio:string }

+Alumno(n:String; d:String) public void setNombre(String n){


+setNombre(n:String) }
+getNombre():string
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 = 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

• 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 47.5F
parte decimal
double Real en 64 bits con 15 dígitos en la 3456e-3
parte decimal
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 Operador Descripción
aritmético unario
+ Suma + Mas unario
- Resta - Menos unario
* Multiplicación
++ Autoincremento
/ División
-- Autodecremento
% Residuo de la división

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

&& true 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 D

Precedencia de operadores de mayor a menor


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.

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

 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.
 Mostrar aplicación “PruebaPunto” en NetBeans

 EJEMPLO: Pasar valores al método.


 Mostrar aplicación “PruebaPunto2” en NetBeans

 EJEMPLO: Uso de las variables Static.


 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
 Facilitael 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
 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).

• 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
public Clase A1 Clase A2
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 Tesis Artículo


……. ……. …….
editorial director revista
Grado volumen
Métodos 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 CuentaDe
Servicios Credito
Estructura: saldo saldo saldo
numCuenta numCuenta numCuenta
Comportamiento: retirar retirar retirar (superclase)
depositar depositar depositar
darSaldo darSaldo darSaldo
pagarTeléfono comprar
retirar (subclase)
obtenerValorDeuda

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” ………... Punto(3,2)

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

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 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.

 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 Clase B
Atributos Atributos

Métodos Métodos

Clase C
Atributos

Métodos

También podría gustarte