Programacion Orientada AObjetoscursov 1
Programacion Orientada AObjetoscursov 1
Programacion Orientada AObjetoscursov 1
Facultad de Ingenierías
Proyecto de Programación Orientada a Objetos
Resp :Diosdado Asumu NDONG ANDEME
• Objetivo:
– Ser capaz de declarar una clase con un conjunto de características
(atributos) y comportamientos (métodos)
– Ser capaz de crear objetos de una clase dada y modificar o restringir el
acceso a su estado y su comportamiento
• Plan de trabajo:
Curso académico 2022 - 2023
– Memorizar la nomenclatura básica de la programación orientada a objetos
– Practicar el modelado de objetos con ejemplos sencillos para distinguir entre una
clase, un objeto, su estado y su comportamiento
– Repasar la sintaxis java para declarar clases, atributos, constructores y métodos
– Recordar el mecanismo y la sintaxis para paso de mensajes entre objetos
3 Objetivos
OBJETIVOS
❖ Clases y objetos
❖ Encapsulación de objetos
❖ Abstracción funcional
❖ Abstracción de datos
❖ Miembros de una clase (atributos y métodos)
❖ Paso de mensajes
❖ Sobrecarga de métodos
Curso académico 2022 - 2023
❖ Constructores
❖ Modificadores y acceso
¿Qué es un objeto?
5
Estado
Constructor
Comportamiento
Ejercicio 1
• Implementa la clase Bicicleta, que tiene tres atributos,
velocidadActual, platoActual y piñonActual, de tipo
entero y cuatro métodos acelerar( ), frenar(),
cambiarPlato(int plato), y cambiarPiñon(int
piñon), donde el primero dobla la velocidad actual, el segundo
reduce a la mitad la velocidad actual, y el tercero y cuarto ajustan
el plato y el piñón actual respectivamente según los parámetros
recibidos. La clase debe tener además un constructor que inicialice
todos los atributos.
Normalmente:
► Los métodos son públicos
► Los atributos son privados
► Puede haber métodos privados
► Es peligroso tener atributos públicos
Interfaz Pública
Implementación
Arrancar
• Un objeto envía un mensaje a otro
– Esto lo hace mediante una llamada a sus atributos o métodos
• Los mensajes son tratados por la interfaz pública
del objeto que los recibe
– Eso quiere decir que sólo podemos hacer llamadas a aquellos atributos
o métodos de otro objeto que sean públicos o accesibles desde el
objeto que hace la llamada
• El objeto receptor reaccionará
– Cambiando su estado: es decir modificando sus atributos
– Enviando otros mensajes : es decir llamando a otros atributos o
métodos del mismo objeto (públicos o privados) o de otros objetos
(públicos o accesibles desde ese objeto)
Curso académico 2022 - 2023
Ejemplo
Clase Rueda
Paso de
mensajes
19Sobrecarga (Overloading)
¿Para qué sirve?
Clase Objetos
Sobrecarga
Son métodos distintos porque
aunque tengan el mismo nombre
tienen distintos argumentos.
Tienen distinta funcionalidad
Curso académico 2022 - 2023
Ejercicio 2
20
21Constructores
• Cuando se crea un objeto sus miembros se inicializan con un
método constructor
• Los constructores:
– llevan el mismo nombre que la clase
Curso académico 2022 - 2023
– No tienen tipo de resultado (ni siquiera void)
• Conviene que haya al menos 1 constructor
• Pueden existir varios que se distinguirán por los parámetros que
aceptan (sobrecarga)
• Si no existen se crea un constructor por defecto sin parámetros
que inicializa las variables a su valor por defecto.
• Si la clase tiene algún constructor, el constructor por defecto deja
de existir. En ese caso, si queremos que haya un constructor sin
parámetros tendremos que declararlo explícitamente.
Sobrecarga de constructores
23
Curso académico 2022 - 2023
Ejercicio 3
• Modificador static
• Sólo existen una vez por clase, independientemente del
número de instancias (objetos) de la clase que hayamos
creado y aunque no exista ninguna.
• El método o el atributo se comportan siempre de la
misma manera
• Se puede acceder a los miembros estáticos
utilizando el nombre de la clase.
• Un método estático no puede acceder a miembros no
estáticos directamente, tiene que crear primero un objeto
25
Curso académico 2022 - 2023
Modificadores y acceso
Static (miembros estáticos)
Atributo estático
Otros ejemplos
Atributos estáticos
=> -231
=> 231-1
26Modificadores y acceso
Static. Algunas reglas
27
import java.math.BigDecimal;
Paquetes
• ¿Cómo crear mis propios paquetes?
– Almaceno mis clases en un directorio con el nombre del paquete
– Pongo al principio de todas las clases que
pertenezcan al paquete la instrucción
package MiPropioPaquete;
import MiPropioPaquete.Clase1
35
Profesor
Bedel
Atributos Métodos
nombre imprime
apellidos
anyoNacimiento
grupo ponGrupo
horario imprimeGrupo
Clase Alumno
Curso académico 2022 - 2023
Herencia
40
• protected accesible
desde las subclases
• super acceder a
atributos o métodos de
la superclase
Herencia 42
43
Curso académico 2022 - 2023
Herencia
¿ Qué pasa si…?
• Herencia de la interfaz
• La parte pública de la clase derivada contiene la parte
pública de la clase base. La clase Alumno contiene el
método imprime()
• Herencia de la implementación
• La implementación de la clase derivada
contiene la de la clase base. Al invocar los
métodos de la clase base sobre el objeto de la clase
derivada (unAlumno.imprime()) se produce el
comportamiento esperado
Ejercicio 5
Herencia
46
Object
Bedel Profesor
48 Herencia
Curso académico 2022 - 2023
Reescritura (o sobrescritura)
atributos
Atributos Métodos
nombre imprime()
Alumno a = new Alumno(...);
apellidos
System.out.println(a.nombre);
anyoNacimiento
Persona p = a;
Heredados de la clase Persona
System.out.println(p.nombre);
nombre ponGrupo(String s)
Clase Alumno
Curso académico 2022 - 2023
Reescritura I (Shadowing)
50
class Persona {
public String nombre = "Juan";
}
class Alumno extends Persona {
public int nombre = 10003041;
}
class Test {
public static void main (String[] args) {
Alumno a = new Alumno ();
Persona p = a;
System.out.println(p.nombre); Imprime “Juan”
System.out.println(a.nombre)
;
} }
Imprime 10003041
Curso académico 2022 - 2023
Reescritura I (Shadowing)Ocultación de
51
atributos
atributos
Recurso Recurso
•nombre •nombre
•descripcion •descripcion
•decirNombre() •decirNombre()
•decirDescripcion() •decirDescripcion()
error
no
¿ metodo(parametros)?
Object
no
¿ metodo(parametros)
Otro
Otro ancestro
ancestro
no
¿ metodo(parametros)
Superclase
no
mensaje ¿ metodo(parametros)
objeto Subclase
instancia
metodo(parametros)
class Persona {
public String nombre = "Juan";
public void imprimir() {
System.out.println("Persona: " + nombre);
}
}
class Alumno extends Persona {
public String nombre = "JuanGarcía";
public void imprimir() {
System.out.println("Alumno: " + nombre);
}
}
class Test2 {
public static void main (String[] args) {
Alumno a = new Alumno();
Persona p = a;
a.imprimir();
p.imprimir();
} Ambas imprimen:
} “Alumno: JuanGarcia”
2. Indicándolo explícitamente
• super
– referencia al objeto actual como si fuera una instancia de su
superclase
– A través de la referencia a super se puede acceder
explícitamente a métodos de la superclase
– Para reescribir métodos (no sólo el constructor), puede ser
útil usar la referencia a super
71
72
Curso académico 2022 - 2023
Programación ORIENTADA a Objetos (II)
Contenidos
73
Sintaxis y tipos
• Sintaxis:(tipo) identificador
• Dos tipos de casting:
– Widening o upcasting: Una subclase se utiliza
como instancia de la superclase. Es implícito.
– Narrowing o downcasting: La superclase se
utiliza como instancia de una subclase.
Conversión explícita.
• Sólo se puede hacer casting entre clases
padre e hija no entre clases hermanas
Curso académico 2022 - 2023
Casting (conversión)
75
Widening o upcasting
1. Compatibilidad hacia arriba
(upcasting)
– Un objeto de la clase derivada siempre se
podrá usar en el lugar de un objeto de la
clase base (ya que se cumple la relación
“es-un”)
Persona p = new Alumno();
Ejemplo
Persona p2 = new Persona(); Una persona no
Alumno a3; siempre es un
//conversión descendente implícita – no funciona alumno. No
podemos asumir
a3 = p2; //da error de compilación
implicitamente
funciona a veces que lo sea
//conversión descendente explícita – no
//lanzará la excepción ClassCastException
//porque p2 no es de la clase Alumno Una persona a
veces es un
a3 = (Alumno) p2; //error
alumno pero si
no lo es (no lo
hemos creado
como tal) no
//conversión descendente implícita – no funciona podemos tratarlo
Alumno a4 = new Persona(); //error como si lo fuera,
ni siquiera
}
aunque se lo
} digamos
Una persona no siempre es un alumno. No podemos explicitamente
asumir implicitamente que lo sea
Curso académico 2022 - 2023
Casting (conversión)
79
El operador instanceOf
• Sintaxis:
objeto instanceOf clase
– Comprueba si un objeto es realmente de la
clase derivada
• Ejemplo:
public Alumno comprueba (Persona p) {
Alumno a = null;
if (p instanceOf Alumno)
a = (Alumno) p;
return a;
}
¿Qué son?
Características
83Clases abstractas
¿Para qué sirven?: Implementaciones parciales
Interfaces
Declaración
• Sintaxis:
public interface nombreInterfaz {
static final tipo CONSTANTE = valor;
tipoDevuelto nombreMetodo(listaParam);
}
Interfaces
Implementación
• Si una clase implementa una interfaz, quiere decir que
implementa todos los métodos abstractos de esa interfaz
• Esto se representa con la palabra reservada
implements:
Class C
Curso académico 2022 - 2023
• En Java una clase hereda de una única superclase
o No existe la herencia múltiple
• Pero puede implementar varios interfaces
Interfaces
¿Cómo se usan?
Figura Dibujable
• area() •dibujar()
extends implements
Círculo Rectángulo
• area() • area()
• dibujar() • dibujar()
Ejercicio 9
• Implementa la interfaz Imprimible, la cual
contiene el método imprime() que no
devuelve ningún valor.
Ejercicio 10