Introducción al Paradigma de Objetos
Que es la Sobrecarga de Operaciones
Es la aparición de métodos dentro de una misma clase que se
llaman igual, pero realizan acciones (levemente) diferentes
Normalmente varían en cantidad y/o tipo de parámetros
Por ejemplo, en la clase Auto podríamos encontrar variantes
del método acelerar(), por ejemplo:
acelerar() acelera 10km/h
acelerar(int km) acelera de acuerdo al parametro “km”
acelerar(int km, boolean tieneNitro) idem caso anterior, pero si el
parámetro “tieneNitro” es verdadero acelera el doble!
Introducción al Paradigma de Objetos
Sobrecarga de Operaciones – Codificación
class Auto {
// Atributos aquí
int velocidad;
// Métodos aquí
void acelerar() {
velocidad = velocidad + 10;
}
void acelerar(int km) {
velocidad = velocidad + km;
}
void acelerar(int km, boolean tieneNitro){
if(tieneNitro == false){
acelerar(km);
} else {
acelerar(km*2);
}
}
}
Introducción al Paradigma de Objetos
Que son las Relaciones Simples
Se produce cuando una clase se relaciona con otra clase
La relación es única
Por ejemplo: Auto tiene una relación simple con Motor, por que
un auto puede tener un motor únicamente
Se puede presentar como:
“… un Auto tiene un Motor …”
Introducción al Paradigma de Objetos
Que son las Relaciones Simples
2 Formas de representar relaciones simples gráficamente:
CASO #1
CASO #2
Introducción al Paradigma de Objetos
Ejercicio #4 – Relaciones Simples
A partir de las clases detectadas previamente, identifique las
relaciones simples que existen entre las mismas.
TIP: Para este ejercicio asumiremos que cada cliente (cualquier tipo)
puede tener una única cuenta
Introducción al Paradigma de Objetos
Ejercicio #4 – Solución
ClientePyme tiene una CuentaCorriente
ClienteCorporacion tiene una CuentaCorriente
ClienteIndividuo tiene una CajaDeAhorro
Banco tiene un DirectorGeneral
Sucursal tiene un DirectorDeSucursal
Introducción al Paradigma de Objetos
Ejercicio #4 – Codificación
class ClientePyme {
// Atributos aquí
String razonSocial;
CuentaCorriente cuenta;
class Banco {
// Atributos aquí
String nombre;
GerenteGeneral gerente;
}
Introducción al Paradigma de Objetos
Que son las Relaciones Múltiples
Se produce cuando una clase se relaciona con una o muchas otras
clases. La relación es múltiple
Por ejemplo: Auto tiene una relación múltiple con Rueda, por que
un auto puede tener varias ruedas
Se puede presentar como:
“… un Auto tiene de una a muchas Rueda(s) …”
“… una Universidad tiene de uno a muchos Alumno(s) …”
Se dice que una Universidad tiene una colección de alumnos
Introducción al Paradigma de Objetos
Que son las Relaciones Múltiples
2 Formas de representar relaciones simples gráficamente:
CASO #1
CASO #2
Introducción al Paradigma de Objetos
Ejercicio #5 – Relaciones Múltiples
A partir de las clases detectadas previamente, identifique las
relaciones múltiples que existen entre las mismas
TIP: Para este ejercicio asumiremos que cualquier tipo de cliente puede
tener mas de una cuenta corriente
Introducción al Paradigma de Objetos
Ejercicio #5 – Solución
Banco tiene de uno a muchas Sucursal(es)
Banco tiene de uno a muchos DirectorRegional(es)
ClienteCorporacion tiene de uno a muchas CuentaCorriente(s)
GrupoFinanciero tiene de uno a muchos Banco(s)
Sucursal tiene de uno a muchos Servicio(s)
Introducción al Paradigma de Objetos
Ejercicio #5 – Codificación
class ClienteCorporacion {
// Atributos aquí
String razonSocial;
Collection<CuentaCorriente> cuentas;
class Banco {
// Atributos aquí
String nombre;
GerenteGeneral gerente;
Collection<Sucursal> sucursales;
Collection<DirectorRegional> directores;
}
Introducción al Paradigma de Objetos
Que es la Visibilidad
Es la posibilidad de “ver” un atributo o método
Si un atributo o método es privado (-) solo puede verse dentro
de la clase
Si un atributo o método es publico (+) puede verse desde otras
clases
La visibilidad es establecida por los modificadores de visibilidad:
private y public
Introducción al Paradigma de Objetos
Que es la Visibilidad
El atributo velocidad es privado, solo El atributo saldo es privado, solo
puede modificarse a través de los puede modificarse a través de los
métodos acelerar() y frenar() métodos depositar() y extraer()
Introducción al Paradigma de Objetos
Que es la Visibilidad – Codificación
class Auto {
// Atributos aquí
private int velocidad;
// Métodos aquí
public void acelerar() {
velocidad = velocidad + 10;
}
public void acelerar(int km) {
velocidad = velocidad + km;
}
public void acelerar(int km, boolean tieneNitro){
if(tieneNitro == false){
acelerar(km);
} else {
acelerar(km*2);
}
}
}
Introducción al Paradigma de Objetos
Que es el Encapsulamiento
Es el ocultamiento del estado de un objeto
El estado (atributos) podrá accederse
únicamente a través de sus operaciones
(métodos)
En la clase, los atributos deben ser privados y
los métodos para acceder a los atributos
deben ser públicos
El atributo saldo esta encapsulado, solo puede
accederse a través de los métodos depositar()
y extraer()
Introducción al Paradigma de Objetos
Que son los Setters y los Getters
Son métodos de acceso públicos a atributos
privados
Representan la única forma de acceder a los
atributos
Setter método utilizado para setear un valor a
un atributo
Getter método utilizado para obtener un valor
de un atributo
Los IDEs generalmente permiten generar los
setters y los getters de forma automática!
Introducción al Paradigma de Objetos
Setters y Getters – Codificación
class Banco {
// Atributos aquí
private String nombre;
private int cantidadDeEmpleados;
// Métodos aquí
public void setNombre(String n) {
nombre = n;
}
public String getNombre() {
return nombre;
}
public void setCantidadDeEmpleados(int c) {
cantidadDeEmpleados = c;
}
public int getCantidadDeEmpleados() {
return cantidadDeEmpleados;
}
}
Introducción al Paradigma de Objetos
Objetos vs. Clases
La clase representa un
concepto, es un molde, una
plantilla
Los objetos representan
instancias de una clase. Seria
como tomar una plantilla (una
clase) y personalizarla
(completar sus atributos)
Introducción al Paradigma de Objetos
Constructores para Construir Objetos
Los objetos son construidos a partir de una clase. Todos los objetos
dependen de una clase
Para construir un objeto es necesario utilizar un constructor
El constructor es “un método” de la clase que se invoca al construir un
objeto, y en su interior tiene un conjunto de acciones a realizar
El constructor tiene el mismo nombre que la clase, y para invocarlo hay que
utilizar una palabra clave del lenguaje de programación que se denomina
new
FORMA GENERICA: NombreDeClase nombreDeObjeto = new Constructor();
EJEMPLO: Auto a = new Auto();
Introducción al Paradigma de Objetos
Ejercicio #6 – Constructores
Asumiendo que cada clase cliente cuenta con dos constructores (un constructor
vacío y un constructor que recibe como parámetros un identificador, la razón
social, y la dirección) y un método informarDatos() el cual informa el valor de sus
atributos.
Suponiendo que se ejecuta el siguiente código, cual es la salida en pantalla?
ClientePyme c1 = new ClientePyme();
[Link](); CASO #1
ClientePyme c2 = new ClientePyme(3020,
“Pirulo SRL”, “Av Maipu 2587”); CASO #2
[Link]();
ClienteCorporacion c3 = new ClienteCorporacion(3084, “Ford SA”,
“Lavalle 1256 piso 10 oficina 30”) CASO #3
[Link]();
Introducción al Paradigma de Objetos
Constructores – Conceptos Avanzados
Como se llama cuando una clase tiene mas de un constructor?
Sobrecarga de constructores
Una clase debe tener al menos un constructor. Si no se agrega un constructor,
normalmente se asume que posee el constructor vacio
Una clase puede tener todos los constructores que sean necesarios
Que ocurre si hay dos constructores con la misma firma? Por ejemplo:
Alumno(String n){
nombre = n; NO FUNCIONA!
} Al igual que los métodos, si tienen misma cantidad
Alumno(String a){ de parámetros, deben tener diferente tipo de dato
apellido = a;
}
Introducción al Paradigma de Objetos
La clase “Programa”
Quien instancia el primer objeto?
La clase Programa a través de un método llamado main(), que
se invoca automáticamente al ejecutar nuestra aplicación
class Programa {
public static void main(String[] args) {
// código aquí
// todo el código ubicado aquí se ejecuta automáticamente
// al ejecutar nuestra aplicación
}
Introducción al Paradigma de Objetos
Interacción entre “Programa” y alumnos
class Alumno { class Programa {
// Atributos aquí
private String nombre; public static void main(String[] args) {
private String apellido; 1
Alumno a1 = new Alumno();
// Constructores Alumno a2 = new Alumno(“Juan”, “Perez”);
Alumno() { 2
} [Link]();
[Link]();
Alumno(String n, String a){ 3
nombre = n; }
apellido = a; }
}
// Métodos aquí
public void informar(){
print(nombre + apellido);
}
}
Introducción al Paradigma de Objetos
Interacción entre Objetos - Ejemplo
Asumiendo que un cliente individual utiliza el cajero automático para realizar un
deposito de $2500, ingresa su dni numero 27.014.589 como pin y realiza el
deposito.
La interacción básica sería:
// Obtiene el cliente
ClienteIndividuo c = ClienteIndividuo(“27014589”);
// Obtiene la caja de ahorro del cliente
CajaDeAhorro cda = [Link]();
// Realiza el deposito
[Link](2500);
El código completo correspondiente se presenta a continuación:
Introducción al Paradigma de Objetos
Interacción entre Objetos - Ejemplo
class Programa { class ClienteIndividuo {
public static void main(String[] args) { // Atributos aquí
1 private String dni;
ClienteIndividuo c1 = new ClienteIndividuo(“27014589”); private CajaDeAhorro cuenta;
CajaDeAhorro cda = [Link]();
[Link](2500); // Constructores
ClienteIndividuo(String d) {
} 3 2
dni = d;
} // busca en la Base de Datos los datos
// de este cliente según el dni y
// completa los atributos
class CajaDeAhorro {
}
// Atributos aquí
private float saldo;
// Métodos aquí
public CajaDeAhorro obtenerCajaDeAhorro(){
// Metodos aquí
return cuenta;
public void depositar(float monto) {
}
saldo = saldo + monto;
}
}
Introducción al Paradigma de Objetos
Ejercicio #7 – Uso de Objetos
Suponiendo que un cliente corporativo desea realizar una extracción de una
cuenta corriente, teniendo en cuenta los siguientes datos:
el cuit de la empresa es 30-12345678-1
desea extraer $20.000
en la cuenta hay disponible $18.000
el giro en descubierto es de $5.000
Realizar el código en forma genérica utilizando las clases Programa,
ClienteCorporativo y CuentaCorriente
TIP: el giro en descubierto es el monto máximo que el banco le presta al cliente en
caso de que el saldo en su cuenta sea cero. Es decir que si el cliente no tiene fondos en
la cuenta, y desea realizar una extracción o un pago, puede utilizar automáticamente
hasta $5.000
Introducción al Paradigma de Objetos
Ejercicio #7 – Codificación
Código de la clase Programa:
class Programa {
public static void main(String[] args) {
// Obtiene el cliente de acuerdo a su cuit
ClienteCorporativo cliente = new ClienteCorporativo(“30-12345678-1”);
// Obtiene la cuenta corriente del cliente
CuentaCorriente cc = [Link]();
// Realiza la extraccion
[Link](20000);
}
Introducción al Paradigma de Objetos
Ejercicio #7 – Codificación
Código de la clase ClienteCorporativo:
class ClienteCorporativo {
// Atributos aquí
private String cuit;
private CuentaCorriente cuenta;
// Constructores
ClienteCorporativo(String c) {
cuit = c;
// busca en la Base de Datos los datos
// de este cliente según el cuit y
// completa los atributos
}
// Métodos aquí
public CuentaCorriente obtenerCuentaCorriente(){
return cuenta;
}
}
Introducción al Paradigma de Objetos
Ejercicio #7 – Codificación
class ClienteCorporativo { Código de la clase CuentaCorriente
private float saldo;
private float saldoDescubierto;
public void extraer(float monto) {
if ( saldo >= monto ) {
saldo = saldo - monto;
print(“Extraccion ok”);
}
else {
montoExcedente = monto - saldo;
if ( montoExcedente <= saldoDescubierto) {
saldo = 0;
saldoDescubierto = saldoDescubierto - montoExcedente;
print(“Extraccion ok”);
}
else {
print(“No hay fondos suficientes”);
}
}
}
}