Está en la página 1de 32

Fundamentos de la

Programación Orientada
a Objetos

1
2
Relaciones entre clases
Conexión semántica entre clases
Permite que una clase conozca los atributos,
comportamientos y las relaciones de otras
clases
Se destacan
Composición
Asociación
Generalización o Herencia

3
Relaciones

Composición (Relación permanente)


El objeto parte aparece como atributo en el objeto
compuesto

Asociación (Relación temporal)


El objeto a usar, aparece como parámetro de entrada en
un método, o como una variable local.

4
Las Relaciones
Composición, Se conectan conceptualmente, es un
“todo/parte”, en la cual la clase representa una
cosa grande “el todo” que consta de elementos
más pequeños “las partes” que se denominan
como Agregación. Si se encuentra que una clase
trabaja con un objeto de otra clase se considera
asociación y no dependencia.
Asociación, relación (transitoria) de uso, que
declara que un elemento utiliza información y los
servicios de otro elemento pero no necesariamente
a la inversa.
Generalización o Herencia

5
Dependencia (Relaciones de Uso)

+ Estudiante
-cedula : long
-nombre : String
-apellido : String
-estado : char + TestEstudiante
+ setCedula (long) : void
+ setNombre (String) : void
+ setApellido (String) : void + main (String) : void
+ setCasado (boolean): void
+ activar ( ) : void
+ desactivar ( ) : void
+ isCasado ( ) : boolean
+ getCedula ( ) : long
+ getNombre ( ) : String TestEstudiante depende de
+ setApellido ( ) : String
+ getCasado ( ) : boolean Estudiante para poder existir

6
Generalización o Herencia
La herencia de clases,
representa una jerarquía de
abstracciones.
Es la relación entre un
elemento general
(superclase ó padre) y un
caso más concreto de ese
elemento (subclase ó hijo);
se conoce como relación “es
un”
La herencia puede ser
simple o múltiple. En Java
es simple, jerárquica.

7
SuperClase TRANSPORTE

SubClase TERRESTE MARITIMO AEREO SuperClase

SubClase
AUTOMOVIL MOTO AVION GLOBO

8
Herencia (cont)

9
… Herencia
Proceso mediante el cual una clase, y como consecuencia
su objeto adquiere las propiedades (no privadas) de otro.
Permite una clasificación jerárquica establecida mediante
superclases y subclases

Una subclase aumenta o redefine la estructura y el


comportamiento de sus superclases.

Las superclases representan abstracciones generalizadas,


y las subclases representan especializaciones (es un tipo
de …).

Las superclases no se instancian, se heredan; se


instancian las subclases, así se dispone de la totalidad de
los métodos
10
11
… Ejercicio
La Unidad experimental de zoonosis: “La Bestia Feroz”, tiene un laboratorio de
investigación de enfermedades del comportamiento animal y una granja donde
mantienen algunos de los “sujetos” estudiados.

La granja tiene los siguientes animales:


Cuatro perros guardianes, cuya dieta incluye la carne como base, y que al
por mayor se compra a $3000 la libra, cada animal consume al menos cuatro
libras por día.
Tres gatos, que se beben diariamente 10 litros de leche, y se consigue a
$1200 por litro; es su único alimento, el resto de su dieta se la deben
conseguir mediante la caza.
Un zorro que constituye la mascota del administrador, este es soltado cada
noche, a fin de que consiga su propio alimento.
En el estanque conviven cuatro cocodrilos (dos hembras y dos machos) y
seis serpientes constrictor, a los que diariamente echan 80 libras de pescado,
con un valor de $4500 por libra.

Elabore un sistema que permita conocer cuánto consumen de leche, carne y


pescado, y cuánto se requiere de presupuesto mensual, a fin de mantener
perfectamente alimentados, todos los animales residentes en la granja.
Construya la abstracción UML que muestre, una relación que permita asociar a
través de la herencia, todos los elementos de la granja. Considere la posibilidad
de tener algunas relaciones de dependencia y/o asociación.

12
… Ejercicio

SuperClase Animal

SubClase Mamifero Reptil SuperClase

SubClase
Perro Gato Zorro Cocodrilo Serpiente

13
Herencia
Extiende la funcionalidad de las clases, sin hacer modificación ó
re-escritura
Caja
- alto:double
extends
- ancho:double
- largo:double
- volumen:double
+ Caja()
+ setAlto(double): void CajaSolida
+ setLargo(double): void - peso:double
+ setAncho(double): void
+ getAlto(): double + CajaSolida()
+ getLargo(): double + CajaSolida(double)
+ getAncho(): double + CajaSolida(double,double,
+ getVolumen(): double double,double)
+ calculoVolumen(): void + setPeso(double): void

14
Herencia - implementación
public class Caja { public class CajaSolida extends Caja {

private double alto; private double peso;


private double ancho;
private double largo; public CajaSolida() {
private double volumen; }
public CajaSolida(double alto, double largo, double ancho, double peso) {
public Caja() { this.peso = peso;
} setAlto(alto);
public Caja(double alto, double largo, double ancho) { setLargo(largo);
this.alto = alto; setAncho(ancho);
this.largo = largo; }
this.ancho = ancho; public double getPeso() {
public void setAlto(double alto) { return (peso);
this.alto = alto; }
} }
public void setLargo(double largo) { import javax.swing.*;
this.largo = largo; public class TestCaja {
} public static void main(String[] args) {
public void setAncho(double ancho) { double alto =Double.parseDouble(JOptionPane.showInputDialog("Digite el alto"));
this.ancho = ancho; double ancho =Double.parseDouble(JOptionPane.showInputDialog("Digite el ancho"));
} double largo = Double.parseDouble(JOptionPane.showInputDialog("Digite el largo"));
public double getVolumen() { double peso = Double.parseDouble(JOptionPane.showInputDialog("Digite el peso"));
return (volumen); CajaSolida objCajaSolida = new CajaSolida(alto, largo, ancho, peso);
} objCajaSolida.calculoVolumen();
public void calculoVolumen() { String respuesta = "El volumen de la caja es de -> “ + objCajaSolida.getVolumen()
volumen = largo * ancho * alto; + '\n‘ + " y su peso de -> “ + objCajaSolida.getPeso();
} JOptionPane.showMessageDialog(null, respuesta);
} System.exit(0);
}
}
15
… Herencia
La Emavi, desea conocer el valor que paga mensualmente por nómina;
conformada por profesores tiempo completo (Empleados asalariados) y
profesores hora cátedra (Empleados por hora).

La Universidad tiene “N” docentes, entre tiempo completo y cátedra, y


para la liquidación del salario mensual tiene como políticas de pago, las
siguientes:
A los docentes tiempo completo se les deduce un 10% de su salario
bruto (antes de deducciones y bonificaciones); y les otorga una
bonificación del 5% del doble del valor de deducción.
A los docentes hora cátedra se les paga por hora de servicio, no
tiene ningún tipo de deducción o bonificación, pero se le da un
subsidio de transporte equivalente al 20% de su salario bruto (antes
de bonificaciones).

Elabore un clase que lea para los “N” empleados los siguientes datos:
nombre, cédula, departamento a que pertenece, puesto que ocupa y
tipo de contrato ( 1 = Asalariados y 2 = contrato por hora). A los
contratados por hora se les conoce el salario básico por hora y el
número de horas trabajadas; y a los asalariados el salario mensual.

16
… Herencia
Analice el cálculo de sueldo de un Empleado

EmpleadoPorHoras EmpleadoAsalariado
nombreEmpleado nombreEmpleado
cedulaEmpleado cedulaEmpleado
dptoLabora dptoLabora
puestoEmpleado puestoEmpleado
horasTrabajadas sueldoBruto
valorHora valorDeducciones
sueldoBruto valorBonificaciones
valorSubsidio sueldoNeto
sueldoNeto

17
… Herencia
Forma de jerarquía de objetos, similar al
árbol genealógico.
Elementos comunes
De lo general a lo particular
Empleado

EmpleadoPorHoras EmpleadoAsalariado

18
Actividad

Elaborar una clase que lea las cédulas,


nombres, apellidos y calificaciones de
“N” estudiantes de un curso. El sistema
debe determinar el nombre y apellido,
de la nota más alta; además se debe
imprimir cuál fue el promedio del
curso.

19
… Abstracción
+ Estudiante + Piloso
-cedula: long -nombreApellidoMax:String
-nombre:String -calificaciónMax:double
-apellido:String -acumuladoNota:double
-calificación:double -promedioCurso:double
+ Estudiante()
+ setCedula(long):void
+ setApellido(String):void
+ setNombre(String):void + Piloso()
+ getCedula():long + getNombreApellidoMax ( ):String
+ getNombreApellido():String + getCalificacionMax ( ):double
+ getCalificación():double + calcularAcumuladoNota( ):void
+ calcularPromedio( ):void
+ getPromedioCurso( ):double

+ TestCurso

20
… Implementación
public class Estudiante { public class Piloso extends Estudiante {
private String nombre;
private String apellido; private String nombreApellidoMax;
private long cedula; private double calificacionMax;
private double calificacion; private double promedioCurso;
public Estudiante (){ private int cantidadNotas;
this.cedula = 0; private double acumuladoNotas;
this.calificacion = 0.0;
} public Piloso(){
public void setNombre(String nombre){
this.nombre = nombre; }
} public String getNombreApellidoMax (){
public void setApellido(String apellido){ return(nombreApellidoMax);
this.apellido = apellido; }
}
public void setCedula(long cedula){ public double getCalificacionMax (){
this.cedula = cedula; return(calificacionMax);
} }
public void setCalificacion(double calificacion){
this.calificacion = calificacion; public int getPromedio (){
} return(promedioCurso);
public String getNombreApellido(){ }
return(nombre + " " + apellido);
} public void calcularAcumuladoNota (){
public long getCedula(){ acumuladoNotas += getCalificacion();
return(cedula); cantidadNotas ++;
} }
public double getCalificacion(){
return(calificacion); public void calcularPromedioCurso(){
} promedioCurso = acumuladoNotas / cantidadNotas;
} }
}
21
El Polimorfismo

Polimorfismo significa que un objeto puede


tener muchas formas o comportarse de
diferentes formas.

Existe polimorfismo de Generalización o de


Sobrecarga.

22
Polimorfismo
La acción específica se determina a partir de
la naturaleza exacta de la situación

Su comportamiento depende del ambiente


donde se presenta
Sobrecarga
sobrescritura

23
POLIMORFISMO
Sobrecarga de Métodos y constructores
(overloading):

Implementar otro método, con el mismo nombre


dentro de la misma clase, con otra lista de
argumentos.

Los métodos, se distinguen ó diferencian entre


sí, por los argumentos que recibe.

La mayor aplicación, esta en los constructores.

24
Polimorfismo de Sobrecarga

Circulo (float radio)


Circulo()
Circulo (float radio, int x, int y) Cuadrado.Colorear(color)
Cuadrado.Colorear(color1,
color2)
3 + 2 = ??
“Hola” + “Amigo” =??

25
Polimorfismo de Generalización

O sobre-escritura, ocurre cuando dos objetos


de clases distintas, pero con un antecesor
(herencia) común, pueden responder de
manera distinta a un mismo mensaje.
Volver a escribir la implementación del método
con la misma signatura (iguales parámetros).
Se emplea para cambiar, el comportamiento
de los métodos que se reciben a través de
herencia.

26
POLIMORFISMO
Sobre-escritura de Métodos:

+ FiguraGometrica

# calcularArea():void

+ Cuadrado + Circulo

+ calcularArea():void + calcularArea():void

27
Ejemplo

+ Estudiante

# validarRequisitos():boolean

+ PreGrado + PostGrado

+ validarRequisitos():boolean + validarRequisitos():boolean

28
… Apuntador super
Al definir constructores con parámetros, tanto en la subclase
como en la superclase. El apuntador super, permite que el
constructor de la subclase invoque, de manera explícita, el
constructor de la superclase

public ConstructorNombre (lista parámetros){


super (lista parámetros);
// cuerpo de constructor subclase
}

Cuando el constructor de la subclase invoca el constructor


de su superclase, esta sentencia tiene que ser la primera
instrucción en aparecer
En la superclase debe estar definido el constructor por
defecto
29
… Apuntador super
Permite identificar el atributo que desea utilizarse o actualizarse,
diferenciando si es de la subclase o de la superclase
public class DemoSuperA {
private String dato = new String("Estoy en DemoSuperA");
protected DemoSuperA (){ }
protected void imprimirDato(String dato){
System.out.println(dato);
System.out.println(this.dato); } }

public class DemoSuperB extends DemoSuperA {


private String dato = new String("Estoy en DemoSuperB");
public DemoSuperB (){ }
public void imprimirDato(String dato){
System.out.println(dato);
System.out.println(this.dato);
System.out.println(super.imprimirDato()); } }

public class TestDemoSuper {


public static void main(String[] args) {
String dato = new String("Dato de TestDemoSuper");
DemoSuperA objSuperA = new DemoSuperA();
DemoSuperB objSuperB = new DemoSuperB();
System.out.println("** Primer Llamado ** \n\n");
objSuperA.imprimirDato(dato);
System.out.println("\n\n ** Segundo Llamado ** \n\n");
objSuperB.imprimirDato(dato); } }

30
Actividad
Elaborar una clase que lea las cédulas,
nombres, apellidos y calificaciones de
“N” estudiantes de un curso. El sistema
debe determinar el nombre y apellido,
de la nota más alta y el de la nota mas
baja.

31
… Abstracción + Piloso
-cedula: long
-nombre: String
-Apellido:String
-calificación:double
+ Estudiante + Piloso()
-cedula: long + Piloso(long cedula, String nombre,
-nombre:String String apellido, double calificacion
-apellido:String + getNombre ( ):String
-calificación:double + getApellido ( ): String
+ getCalificacion ( ):double
# Estudiante( )
+ calcularCalificacion ( ):void
# Estudiante(long cedula,
String nombre, String apellido,
double calificacion) + NoPiloso
-cedula: long
# setCedula(long):void
-nombre: String
# setApellido(String):void
-Apellido:String
# setNombre(String):void
-calificación:double
# setCalificacion (double):void
# getCedula():long + NoPiloso()
# getNombre ():String + NoPiloso(long cedula, String nombre,
# getApellido():String String apellido, double calificacion
# getCalificación():double + getNombre ( ):String
+ getApellido ( ): String
+ getCalificacion ( ):double
+ calcularCalificacion ( ):void
32

También podría gustarte