Sie sind auf Seite 1von 83

Fundamentos de

Programación 2

Ing. Marco Aedo López

EPIS – 2017 maedo@episunsa.edu.pe marcoaedo@hotmail.com


Programación Orientada a Objetos

Capítulo 2

EPIS UNSA - 2008 marcoaedo@hotmail.com


Objetivos
 Comprender los conceptos de clase, objeto, atributo y
método
 Aprender a crear clases y objetos propios
 Valorar las ventajas de la orientación a objetos
 Representar clases con UML
 Distinguir los niveles de acceso privado y público
 Comprender los métodos set, get (accesores y
mutadores), constructores, sobrecarga, toString y
booleanos
 Aprender los mecanismos de comunicación con los
métodos: argumentos y parámetros, tipo de dato de retorno
 Utilizar métodos que retornen un objeto
 Comprender la persistencia de las variables de instancia,
variables locales y parámetros
 Crear constantes de instancia y de clases
Contenidos

 Introducción a la Orientación a Objetos


 Objetos
 Clases
 Encapsulación
 Diagrama de Clases de UML
 Primera Clase OO
 Acceso private y public
 Clase Principal, Driver o Aplicación
 Variables de Referencia e Instanciación
 Métodos especializados:
 Accesores, mutadores, booleanos, constructores y toString
Contenidos

 Llamando a un método
 Objetos llamados
 Métodos que retornan un objeto
 La referencia this
 Métodos y constructores sobrecargados
 Valores por default
 Persistencia de variables
 Variables locales
 return
 Tipo de Retorno void
 Paso de argumentos
 Constantes de instancia y de clases
1. Introducción a la Orientación a Objetos

 En el pasado, el paradigma de programación


predominante fue la “programación
procedimental”
 El énfasis estuvo en los procedimientos
(tareas, funciones o métodos) que constituian
el programa
 Se construía los programas alrededor de los
procedimientos clave
1. Introducción a la Orientación a Objetos

 Hoy el paradigma predominante es el de la


“Programación Orientada a Objetos” (OOP)
 En este paradigma, en lugar de pensar
primero en los procedimientos, debemos
pensar en las “cosas” que son parte del
problema. Estas cosas son llamadas objetos
1. Introducción a la Orientación a Objetos
Clase Principal,
Driver o Aplicación Clase A

método1
método2
main()

método3

Clase B
1. Introducción a la Orientación a Objetos
1. Introducción a la Orientación a Objetos
1. Introducción a la Orientación a Objetos
• POO: "Programación Orientada a Objetos". La
idea básica de este tipo de programación es
agrupar los atributos (datos o variables) y los
métodos (funciones) para manejarlos en una
única entidad: el objeto
• Clase: Abstracción del mundo real
• Objetos: Instancia u ocurrencia de una clase
• Ejemplo:
Clase: Alumno
Objetos: juan pérez, josé suárez, etc
1. Introducción a la Orientación a Objetos

 Proximidad de los conceptos de modelado


respecto de las entidades del mundo real

Auto
1. Introducción a la Orientación a Objetos

 Integra o encapsula datos y comportamiento


del dominio del problema

Auto
placa
marca
color
numeroPuertas
velocidad

acelerar()
frenar()
encender()
1. Introducción a la Orientación a Objetos
• Atributo (dato miembro o variable): propiedad de los
objetos de la clase
• Método (función): acción, realización de una tarea.
Manipula los atributos y los objetos de la clase
• Ejemplo: Clase: Alumno
• Atributos: nombre, apellido, promedio
• Métodos: cambiarPromedio(nota)
cambiarNombre(nomb)
• Mensaje: es el modo en que se comunican los objetos
entre si. En Java, un mensaje no es más que una
llamada a un método de un determinado objeto
elAlumno.cambiarPromedio(11)
1. Introducción a la Orientación a Objetos

Ejercicio:
1. Introducción a la Orientación a Objetos

Ejercicio:
1. Introducción a la Orientación a Objetos

Ejercicio: ¿Cuenta Bancaria? Indicar atributos


y métodos

?
1. Introducción a la Orientación a Objetos

Ya los hemos utilizado:


• Variables -> atributos (datos miembro)
• Métodos son los mismos, pero ahora pertenecen
a una clase específica
1. Introducción a la Orientación a Objetos

 Objeto:
 Conjunto de datos relacionados (atributos) que identifican el
actual estado del objeto + Conjunto de comportamientos
(métodos)
 Cada objeto tendrá valores específicos para sus atributos
 Clase:
 Descripción para un conjunto de objetos
 Lista de atributos + lista de métodos

 Un objeto es una materialización de una descripción


(Clase)
1. Introducción a la Orientación a Objetos

 Ejemplos:
Humanas Físicas Matemáticas
Empleado PC Punto en el plano o
espacio
Cliente Carpeta Número Complejo
Estudiante Libro Tiempo
1. Introducción a la Orientación a Objetos

Especificación para una PC

Objetos de PC
1. Introducción a la Orientación a Objetos

 ¿Sistema de simulación de flujo de trafico en la calle?


 Auto…
 ¿Sistema de Control de Tráfico Aéreo?
 Avión…
 ¿Software de Diseño de Circuitos electrónicos?
 Resistencia, Capacitor, Diodo, Transistor…
 ¿Clase Auto en el sistema simulación de flujo de tráfico?
 Datos = ?
 Métodos = ?
1. Introducción a la Orientación a Objetos

 Encapsulación:
 Cuando algo está envuelto dentro de una cubierta protectora
 En programación significa que los datos o atributos de una
clase están protegidos al ser ocultados dentro
 El resto del programa no podrá acceder directamente, lo hará
indirectamente por medio de los métodos
 Estos métodos permitirán un adecuado acceso y modificación
de los datos
data

methods rest of program

clase
object
1. Introducción a la Orientación a Objetos

 Beneficios de la POO:
 Programas son más entendibles
 Son mejor organizados, ya que la gente tiende a pensar
sobre los problemas en términos de objetos
 Programas más fáciles de desarrollar y mantener
 Aunque para un programa pequeño parece hacerse más
complicado, al crecer el programa se hace más ordenado
y menos confuso
 Cuando surge un error, podremos ir directamente al
método relacionado y solucionar ahí o en los métodos que
lo invocaron
 Menos errores
 Ya que nos brinda la encapsulación de los datos, es más
difícil alterar equivocadamente los datos
1. Introducción a la Orientación a Objetos

 Las clases pueden definir 2 tipos de variables


(atributos o datos miembro):
 Variables de instancia
 Variables de clase
 Las clases pueden definir 2 tipos de métodos:
 Métodos de instancia
 Métodos de clase
 Nos centraremos en los de instancia
 En caso de variables y métodos de clase: la clase
Math contiene la variable de clase PI y el método de
clase round. PI y round están asociados con toda la
clase Math, no con una instancia de dicha clase
1. Introducción a la Orientación a Objetos

 Las variables de instancia (atributos o datos


miembro) especifican los datos que un objeto puede
almacenar, los cuales almacenan valores particulares
para cada objeto
 Ejemplo: si tenemos una clase Persona que contiene una
variable de instancia nombre, entonces cada objeto de dicha
clase almacenará un valor respectivo para su nombre
 Los métodos de instancia especifican el
comportamiento que un objeto puede exhibir
 Ejemplo: si tenemos una clase Persona que contiene el
método de instancia imprimir( ), entonces cada objeto de
la clase Persona podrá imprimir sus datos particulares
2. OO en Java
 En Java, un programa consistirá de una clase que
contenga el método principal main() (clase principal)
y cero o más clases que contengan atributos y
métodos
 Las clases pueden ser creadas por nosotros, ser parte
de la biblioteca de Java o creadas por terceros
 Es importante saber cómo tener un marco de trabajo
ordenado para los programas orientados a objetos
2. OO en Java
Código del Programa Diagrama del Estado
public class AplicacionVentana { de Memoria
public static void main(String[] args){
myWindow
JFrame myWindow;
myWindow = new JFrame( );
: JFrame
myWindow.setSize(300, 200);
myWindow.setTitle width 300
(“Mi Primer Prog”);
height 200
myWindow.setVisible(true);
title Mi Primer Prog

}
} visible true
2. OO en Java
Representación de la Clase JFrame en UML

Diagrama de Clases de UML


JFrame
width
height
title
visible

JFrame()
setSize(int x, int y)
setTitle(String titulo)
AplicacionVentana setVisible(Boolean vis)
2. OO en Java
 Si la clase será accesible por el público, se utilizará
el modificador de acceso public
 Se recomienda crear un archivo .java con el
mismo nombre que la clase que contiene
 Recomendación: nombre de clase con Mayúscula
inicial
2. OO en Java - Plantilla de Clases
Sentencias Import

Comentarios

public class { Nombre de Clase

Datos Miembro
(Atributos)

Métodos
(incl. Constructor)

Note que aquí no tenemos un método public static void main()


Ese método sólo estaría en la clase Principal!!!
2. OO en Java - Sintaxis
//NombreClase.java
public class <NombreClase> [<clase base e interfaces>]{
private <atributos privados>
protected <atributos protegidos>
public <atributos públicos>

private <métodos privados>


protected <métodos protegidos>
public <métodos públicos>
}
//Aplicacion.java
public class Aplicacion{
public static void main(String[] args){
NombreClase objeto1 = new NombreClase();
objeto1.nombreMetodo();
}
}
2. OO en Java
Declaración de Variable de Instancia (Datos Miembro o Atributos)

<modificadorAcceso> <tipo de dato> <nombre> ;

Modificador Tipo de Dato Nombre

private String nombreDuenio ;

Nota: Solo hay un modificador en este ejemplo.


2. OO en Java
Declaración de Métodos:

<modificador> <tipo retorno> <nombre metodo> ( <parametros> ){


<sentencias>
}

Nombre
Modificador Tipo Retorno Parámetro
Método

public void setNombreDuenio( String elNombre ) {


nombreDuenio = elNombre; Sentencia
}

El tipo de retorno void hace algo, pero no retorna un valor.


2. OO en Java
2. OO en Java
miLibro
Diagrama de
estado de
memoria : LibroCalificaciones

Diagrama de LibroCalificaciones
Clases de UML

AplicacionLibroCalificaciones
2. OO en Java – set y get

 Existen dos tipos de métodos básicos:


 Accesores (leen)
 Mutadores (escriben)

 Un accessor (también llamado método get) es un método


que retorna la información de un objeto
 Un mutator (también llamado metodo set) es un método
que establece/cambia los datos de un objeto
2. OO en Java – set y get
public class Persona{

private int edad;

public void setEdad(int e){


edad=e;
}

public int getEdad(){


return edad;
} main():
}
Persona per1 = new Persona();
per1.setEdad(18);
int suEdad=per1.getEdad();
System.out.println(per1.getEdad());
2. OO en Java – set y get

per1

: Persona

edad
18
2. OO en Java – set y get
 Los parámetros de los métodos son variables
locales al método
 Los atributos existen mientras exista el objeto al
que pertenecen
 Los atributos son generalmente private y se
declaran fuera de todo método
 public: accesible por métodos dentro y fuera de la clase
del objeto
 private: accesible sólo por métodos de la clase del objeto
 Se accede a los atributos por medio de los métodos
set (para establecer el valor del atributo) y get
(para obtener el valor del atributo)
2. OO en Java – set y get
 EJERCICIO: Basado en el ejemplo del
LibroCalificaciones, modificar las clases para que se
cree el objeto miLibro, luego que muestre el valor de la
variable de instancia nombreCurso usando su accesor,
luego establecer un valor para dicha variable de
instancia usando su mutador, a continuación que
imprima en pantalla el valor de la misma variable
usando el método correspondiente mostrarMensaje()
2. OO en Java – set y get
2. OO en Java – set y get
EJERCICIO:
Crear diagrama de clases y programa que cree 2 objetos
de la clase Bicicleta para un sistema de préstamo de
bicicletas, donde cada bicicleta tiene un dueño asignado y
la cantidad de días de préstamo, que me muestre los
datos de cada bicicleta
UML, La Estructura del Programa y
el Código Fuente.
Depende de / Hace uso de

AplicacionPrestamoBicicleta Bicicleta

Existen dos código


fuente. Cada definición
de clase es guardada en
un archivo distinto.
AplicacionPrestamoBicicleta.java Bicicleta.java

Para correr el programa: 1. Bicicleta.java (compile)


2. AplicacionPrestamoBicicleta.java (compile)
3. AplicacionPrestamoBicicleta.java (run)
Definición de la clase Bicicleta
public class Bicicleta{
//variables de instancia, datos miembro - atributos
private String nombreDuenio;
private int diasPrestamo;
//metodos
public void setNombreDuenio(String elNombre){
nombreDuenio = elNombre;
}
public String getNombreDuenio( ){
return nombreDuenio;
}

public void setDiasPrestamo(int dias){


diasPrestamo = dias;
}
public int getDiasPrestamo( ){
return diasPrestamo;
}
}
public class AplicacionPrestamoBicicleta{

Primer Ejemplo: Utilizando la clase Bicycle


public static void main(String[] args){
Bicicleta bici1, bici2;
String cliente1, cliente2;

bici1 = new Bicicleta( ); //Crea y asigna valores a bici1


bici1.setNombreDuenio("Keiko");
bici1.setDiasPrestamo(4);

bici2 = new Bicicleta( ); //Crea y asigna valores a bici2


bici2.setNombreDuenio("Oyanta");
bici2.setDiasPrestamo(7);
cliente1 = bici1.getNombreDuenio( ) + " tiene " +
bici1.getDiasPrestamo( );
cliente2 = bici2.getNombreDuenio( ) + " tiene " +
bici2.getDiasPrestamo( );
System.out.println(cliente1);
System.out.println(cliente2);
}
}
 Una vez que la clase Bicicleta ha sido definida,
podemos crear múltiples instancias (objetos)
bici1 bici2

Bicicleta bici1, bici2;


: Bicicleta : Bicicleta
bici1 = new Bicicleta( );
bici1.setNombreDuenio(“Keiko");
nombreDuenio NombreDuenio
bici1.setDiasPrestamo(4);
“Keiko”
“Adam “Oyanta”
Smith”
diasPrestamo diasPrestamo
bici2 = new Bicicleta( );
44 7
bici2.setNombreDuenio(“Oyanta");
bici2.setDiasPrestamo(7);

Código Ejemplo
2. OO en Java – Validación en
métodos miembro set
 Los métodos set tienen un beneficio añadido
 Permitirán validar los valores a establecer a un atributo
 El objetivo es dejar al objeto en un estado consistente
según reglas del dominio del problema
 Ejemplo:
• nombre de curso de máximo 27 caracteres
• número de día según mes
• número de mes, etc
2. OO en Java – Métodos Booleanos
 Métodos booleanos
 Revisan la verdad o falsedad de alguna condición
 Siempre retornan un valor boolean
 Normalmente empiezan con la palabra "is" o "es"

 Ejemplo: método isMenor  Acá se utiliza el método isMenor


determina si la edad de un objeto en el main:
Persona es < 18:
public boolean isMenor(){ Persona mickey = new Persona();
...
if (edad < 18)
if (mickey.isMenor() == false)
return true;
System.out.println("Mayor de edad");
else
return false; if (!mickey.isMenor())
} System.out.println("Mayor de edad");
2. OO en Java – constructores

 Un constructor es un método especial que es ejecutado


cuando una nueva instancia de la clase es creada con el
operador new()
public <nombre clase> (<parámetros> ){
<sentencias>
}

Modificador Nombre Clase Parámetros

public Bicicleta ( ) {
nombreDuenio = “ “ ;

diasPrestamo = 0;
Sentencias
}
2. OO en Java – constructores

 Es posible tener más de un constructor en una


clase. Estos constructores son llamados
constructores sobrecargados (overloaded)
2. OO en Java – toString

 Existe un método que tienen todas las clases en


Java
 toString() es un método que retorna la
información COMPLETA de un objeto en un String
 Es invocado automáticamente cuando utilizamos el
nombre del objeto sólo (sin métodos)
 Dicho método puede ser sobreescrito
EJERCICIO:
Crear un diagrama de clases de UML y un programa que
cree 2 objetos de la clase Alumno, que el usuario ingrese
los valores por teclado y que me muestre los datos en
formato: “apellido, nombre = promedio”. Usando
toString()
3. Diagrama de Clases de UML
 UML:
 Lenguaje de Modelado Unificado
 Es un lenguaje que permite modelar clases, objetos y
relaciones entre ellos
 Es un estándar de la industria del software para el modelado
OO
 Ejemplo:
 Diagrama de Clases para la clase LibroCalificaciones:
LibroCalificacion
LibroCalificaciones  Nombre de clase
es
Atributos /
.  Variables

mostrarMensaje( ) Métodos/

mostrarMensaje() Operaciones
3. Diagrama de Clases de UML

LibroCalificaciones

AplicacionLibroCalificaciones
3. Recordar: Variables de referencia

MiLibro

Objeto#1

Diagrama de Estado
de Memoria
2. OO en Java
3. Diagrama de Clases de UML

LibroCalificaciones
LibroCalificaciones  Nombre de clase

nombreCurso: String
nombreCurso : String 
Atributos / Variables

mostrarMensaje( )
mostrarMensaje()  Métodos/ Operaciones

setNombreCurso()
3. Diagrama de Clases de UML

LibroCalificaciones
nombreCurso : String

mostrarMensaje()
setNombreCurso()
AplicacionLibroCalificaciones
main()
3. Diagrama de Clases de UML

MiLibro

Objeto#1

Diagrama de Estado nombreCurso Fundamentos de


Programacion 2

de Memoria
3. Diagrama de Clases de UML
 Ejemplo:
 Realizar el diagrama de clases y el programa en que
se simulan cuentas de ahorros donde podemos
depositar y retirar
 Requerimientos:
 Sólo trabaja con Soles

 También deberá brindar la funcionalidad de


consultar el saldo de la cuenta
 Probar el programa con 2 cuentas, depositar,
retirar y que vaya mostrando sus datos
 Nota: verificar que no se pueda retirar si el saldo
no alcanza, mostrar mensaje
3. Diagrama de Clases de UML

Cuenta
saldo : double

depositar()
retirar()
mostrar()
AplicacionCuenta
main()
Otro Ejemplo:
Contacto

MiFaceBook

La clase Contacto

private: símbolo (-)


public: símbolo (+)
public class miFaceBook {
public static void main(String[] args) {
Contacto c1, c2;

c1 = new Contacto( ); //Crea y asigna valores a c1


c1.setNombre("Sofia");
c1.setEdad(18);
c1.setEstadoCivil("Es Complicado”);

c2 = new Contacto( ); //Crea y asigna valores a c2


c2.setNombre("Lucia");
c2.setEdad(25);
c2.setEstadoCivil("Soltera")

System.out.println(c1.getNombre() + " es tu nuevo contacto");


System.out.println(c2.getNombre() + " es tu nuevo contacto");
}
}
 Una vez que la clase Contacto ha sido definida, podemos
crear múltiples instancias (objetos u ocurrencia)
c1 c2

Contacto c1, c2;


: Contacto : Contacto
c1 = new Contacto( );
c1.setNombre("Sofia");
nombre nombre
c1.setEdad(18);
“Sofia”
“Adam “Lucia”
Smith”
edad edad
c2 = new Contacto( );
c2.setNombre("Lucia"); 184 25
c2.setEdad(25);

Código Ejemplo
public class Contacto {
//datos miembro - atributos
private String nombre;
private int edad;
private String estadoCivil;

// constructor
public Contacto( ) {
}
//metodos
public void setNombre(String elNombre) {
nombre = elNombre;
}

public void setEdad(int laEdad) {


edad = laEdad;
}

public void setEstadoCivil(String estado) {


estadoCivil = estado;
}
public String getNombre( ) {
return nombre;
}

public int getEdad( ) {


return edad;
}

public String getEstadoCivil( ) {


return estadoCivil;
}
}
UML, Estructura del Programa y el
Código Fuente

MiFaceBook Contacto

Existen dos código fuente.


Cada definición de clase es
guardada en un archivo
distinto.
MiFaceBook.java Contacto.java

Para correr el programa: 1. Contacto.java (compile)


2. MiFaceBook.java (compile)
3. MiFaceBook.java (run)
 Utilizando Contacto y Comentario (MiFaceBook2)
public class MiFaceBook2 {
//Este ejemplo utiliza las clases Contacto y Comentario
public static void main(String[] args) {
Contacto c1;
Comentario com1;

c1 = new Contacto( );
c1.setNombre("Sofia");
c1.setEdad(18);
com1 = new Comentario( );
com1.setComentario("En el cine");
com1.setStatus("publico");
//Mostrando alguna informacion
System.out.println(c1.getNombre() + "puso un comentario”):
System.out.println(com1.getComentariol() );
}
}
 Crear el UML del programa y la clase
Comentario (con algún constructor)
Contacto

MiFaceBook2

Comentario

MiFaceBook2.java Contacto.java Comentario.java


La Clase Comentario
public class Comentario {
private String comentario;
private String status;
public Comentario( ) {
comentario = " ";
status = " ";
}
public void setComentario(String com) {
comentario = com;
}
public void setStatus( String st) {
status = st;
}
public double getStatus( ){
return status;
}

. public String getComentario( ) {


return comentario;
}
}
3. Diagrama de Clases de UML
 Ejemplo:
 Realizar un programa donde se simule el crecimiento
de ratones recién nacidos para experimentos en un
laboratorio de Biología. Cada ratón crece día a día y
aumenta de peso, también día a día, usando la
fórmula:

pi=pi-1+0,1*tasa de Crecimiento*edad

El peso está en gramos y siempre empiezan en 1 gramo


y la edad está en días.
La tasa de crecimiento es un porcentaje.
También deberá brindar la funcionalidad de mostrar los
datos del ratón.
Probar el programa con 2 ratones, hacerlos crecer y
que vayan mostrando sus datos
Gracias