Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
de Datos
Semana 2
Razón social
00.00.2015
Logro de la sesión
2
Agenda
• Una situación parecida a la vida real – Introducción a la
POO
• Tips para el diseño de clases
• Construir y probar objetos
• Ejercicios
3
Una situación parecida a la vida real – Introducción a la POO
¿Cómo los objetos pueden cambiar nuestras vidas?
Érase una vez en un área de desarrollo de software, a dos programadores se les asignó una especificación y
se les dijo que la "construyeran". El gerente de proyecto realmente molesto, obligó a dos programadores a
competir prometiendo que quien lo entregue primero obtendrá un premio.
reproducirSonido(numForma){ Ameba
//if la forma no es una ameba rotar(){
//usar numForma para encontrar //código para rotar
//cual sonido AIF reproducir y //una ameba
//reproducirlo }
//else reproducirSonido(){
//reproducir el sonido .aif de //código para tocar el
//archivo AIF para la
//la ameba
//ameba
} }
6
Una situación parecida a la vida real – Introducción a la POO
“Larry” acabó primero otra vez por muy poco. Pero la sonrisa 1) determina el rectángulo que
en la cara de Larry se derritió cuando el gerente del proyecto rodea la forma
dijo (con ese tono de decepción): "Oh, no, no es así como se 2) Calcule el centro de ese
supone que gira la ameba ..." Resulta que ambos rectángulo y gire la forma
programadores habían escrito su código de rotación así: alrededor de ese punto.
7
Una situación parecida a la vida real – Introducción a la POO
Lo que la última especificación olvidó mencionar Programación OO Ameba
convenientemente
int xPunto
Sin perder el ritmo, Brad modificó el Int yPunto
método de rotación, pero solo en la rotar(){
clase Ameba. Nunca tocó el código //código para rotar
la forma de la ameba debe girar
alrededor de un punto en un extremo,
compilado, probado y en //una ameba usando
como una manecilla de reloj funcionamiento para las otras partes //los puntos x,y
del programa. Para darle a la ameba un }
punto de rotación, agregó un atributo reproducirSonido(){
que todas las amebas tendrían. //código para tocar el
Modificó, probó y entregó (de forma //archivo AIF para la
inalámbrica) el programa revisado en //ameba
poco tiempo }
No tan rápido. Larry encontró BRAD: Oh, supongo que no viste el diseño final. Déjame
8
mostrarte cómo funciona la herencia OO, Larry.
una falla en el enfoque de Brad
Una situación parecida a la vida real – Introducción a la POO
Cuadrado Circulo Triangulo Ameba 01
rotar()
Miré lo que las cuatro clases
rotar() rotar() rotar()
reproducirSonido() reproducirSonido() reproducirSonido() tienen en común
reproducirSonido()
Forma
Son formas y todos giran y suenan. Así que abstraje las
02 características comunes y las puse en una nueva clase
rotar()
reproducirSonido()
llamada forma
Forma
rotar()
reproducirSonido()
03 Luego vinculé las cuatro clases de
formas con la nueva clase “Forma”,
en una relación llamada herencia
Ameba
superclase de las otras cuatro
Cuadrado Circulo Triangulo
clases. Las otras cuatro son las
subclases de Forma. Las subclases
heredan los métodos de la superclase.
En otras palabras, si la clase Forma
Puede leer esto como "El cuadrado hereda de forma", "El círculo tiene la funcionalidad, entonces las
hereda de forma", etc. Eliminé rotar() y reproducirSonido() de las otras subclases obtienen automáticamente esa
formas, así que ahora solo hay una copia para mantener.
misma funcionalidad. 9
Una situación parecida a la vida real – Introducción a la POO
Superclase (más ¿Qué pasa con la rotación de la Ameba [rotar()]?
abstracta) Hice que la clase Ameba sobreescribiera los
Forma métodos rotar() y reproducirSonido() de la
Subclases (más
rotar()
reproducirSonido()
04 superclase Forma.
Sobreescribir sólo significa que una
específico) subclase redefine uno de sus métodos
heredados cuando necesita cambiar o
extender el comportamiento de ese método
Las cosas que un objeto sabe sobre sí mismo se llaman variables de instancia, Representan el
estado de un objeto (los datos) y pueden tener valores únicos para cada objeto de ese tipo.
Las cosas que un objeto puede hacer son llamadas métodos
Cuando diseña una clase, piensa en los datos que un objeto necesitará saber sobre sí mismo, y también
11
diseñe los métodos que operan sobre esos datos.
Tips para diseño de clases - Ejercicio
Complete lo que un objeto de televisión podría necesitar conocer acerca
de si mismo y lo que hace - se hace con el objeto.
Television
Variables de
instancia
métodos
12
¿Cuál es la diferencia entre una clase y un objeto?
Una clase no es un objeto. (pero se usa para construirlos)
Una
Perro clase • Una clase es un plano para un objeto. Le dice
a la máquina virtual cómo hacer un objeto de
raza ese tipo en particular. Cada objeto hecho de
tamaño esa clase puede tener sus propios valores para
nombre las variables de instancia de esa clase. Por
ladrar() ejemplo, puede usar la clase Botón para hacer Clase
docenas de botones diferentes, y cada botón
Varios puede tener su propio color, tamaño, forma,
objetos etiqueta, etc.
Míralo de esta manera
Un objeto es como una entrada en su libreta de direcciones.
Una analogía para los objetos es un paquete de tarjetas como se muestra en la
figura (clase Agenda). Cada tarjeta tiene los mismos campos en blanco (las
variables de instancia). Cuando completa una tarjeta, está creando una instancia
(objeto), y las entradas que llena en esa tarjeta representan su estado. Los
métodos de la clase son las cosas que le haces a una tarjeta en particular;
getName (), changeName (), setName () podrían ser métodos para la clase Agenda.
Por lo tanto, cada tarjeta puede hacer lo mismo (getName (), changeName (),
etc.), pero cada tarjeta conoce cosas únicas de esa tarjeta en particular. 13
Construyendo nuestro primero objeto
01 Escribe tu clase ¿Qué se necesita para crear y usar un objeto?
Class Perro{
variables de • Necesitas dos clases. Una clase para el tipo
instancia
int tamaño; de objeto que desea usar (Perro, Despertador,
Perro Televisión, etc.) y otra clase para probar la
String raza;
String nombre; raza nueva clase. La clase de prueba es donde se
Un método
tamaño pone el método “main”, y en ese método main ()
void ladrar(){ creas y accedes a objetos de tu nuevo tipo de
System.out.println(“gua gua”);
nombre
clase. La clase de prueba tiene un solo
} ladrar()
trabajo: probar los métodos y las variables
}
del objeto de su nuevo tipo de clase.
titulo
Objeto uno genero
rating
titulo
genero
Objeto dos
rating
titulo
genero
Objeto tres 15
rating
Rápido! Sal del método main()
Está bien que un programa de prueba se ejecute dentro del método
principal, pero en una verdadera aplicación OO, necesita objetos que se
comuniquen con otros objetos
Una aplicación real de Java no es más que objetos
Los dos usos de main: que hablan con otros objetos. En este caso, hablar
• Para probar tu clase significa objetos que invocan métodos entre sí. A
• Para lanzar/iniciar su aplicación continuación un ejemplo de cómo podría comportarse
en Java una aplicación real en Java
El juego de adivinanzas
Implementar un programa Orientado a Objetos, que simule un juego de adivinanza, donde tres
jugadores deben intentar adivinar un número aleatorio entre 0 y 9 generado por el programa.
Los tres jugadores también deben intentar adivinar de forma aleatoria (no se debe ingresar
por teclado).
16
El juego de adivinanzas
La lógica:
1) La clase GameLauncher es donde comienza la aplicación; tiene el método main().
2) En el método main(), se crea un objeto GuessGame y se llama a su método startGame().
3) El método startGame() del objeto GuessGame es donde se desarrolla todo el juego. Crea tres
jugadores, luego "piensa" en un número aleatorio (el objetivo para que los jugadores adivinen).
Luego le pide a cada jugador que adivine, verifica el resultado e imprime información sobre los
jugadores ganadores o les pide que adivinen nuevamente.
El juego de adivinanzas
Involucra un objeto "juego" y tres objetos jugador". El juego
genera un número aleatorio entre 0 y 9, y los 3 objetos GuessGame
jugador intentan adivinarlo. Variables de
p1
instancia para
el número que los 3 jugadores p2
el jugador Player
GameLauncher p3
adivinó
number startGame()
método para
crea un objeto
adivinar
Main(String[] args) GuessGame y le
guess()
dice que inicie
17
el juego
El juego de adivinanzas - Solución
La clase GuessGame:
18
El juego de adivinanzas - Solución
La clase GuessGame:
obtenga la respuesta de cada jugador (el
resultado de la ejecución de su método guess())
accediendo al valor del atributo o variable de
instancia “number” de cada objeto
19
El juego de adivinanzas - Solución Salida:
La clase GameLauncher:
La clase Player:
20
Ejercicio – Ser el compilador
Cada uno de los archivos Java en esta diapositiva representa un archivo fuente completo. Su trabajo es jugar al compilador y
determinar si cada uno de estos archivos se compilará. Si no compilan, ¿cómo los arreglarías?.
A B
21
Ejercicio - Rompecabeza
Su trabajo es tomar fragmentos de código de la piscina y colocarlos en las líneas en blanco del código. Puedes usar el mismo
fragmento de código más de una vez, y no necesitará usar todos los fragmentos.
Pregunta extra Nota: ¡Cada fragmento del grupo se puede usar más de
Si la última línea de una vez!
salida fuera 24 en
lugar de 10, ¿cómo
completarías el
rompecabezas?
22
Ejercicio – ¿Quién soy?
Complete los espacios en blanco al lado de la oración con los nombres de uno o más de las opciones disponibles.
24
Resumen
• La programación orientada a objetos nos permite extender un programa
sin tener que tocar el código previamente trabajado y probado.
(Herencia)
• Todo el código java es definido en una clase (Jerarquía)
• Una clase describe como construir un objeto de esa clase. Una clase es
como un plano.
• Un objeto puede cuidarse solo; no tiene que saber o importarle cómo el
objeto lo hace. (encapsulación)
• Un objeto sabe y hace cosas. Las cosas que un objeto sabe sobre si
mismo se llaman variables de instancia. Representan el estado de un
objeto.
• Las cosas que hace un objeto se llaman métodos. Representan el
comportamiento de un objeto. 25
FIN
26