Professional Documents
Culture Documents
Repaso
Orientación a Objetos y Herencia
Índice
1
1. ¿De qué estamos hablando?
Notepad
Herramientas
de Desarrollo Grasp JDK
- Netbeans (JDK) Código
Bytecode
- Visual J++ Java
- Visual .Net Otros
- Visual Café fichero.java fichero.class
- Java Workshop
- J Builder
- Visual Age
javac fichero.java
Otros
2
Una Aplicación Básica en Java
// Aplicación de ejemplo
// “Hola Mundo”
// 1 2
class HolaMundo{
public static void main(String args[]){
System.out.println(“Hola Mundo”); HolaMundo.class
}
}
HolaMundo.java
Hola Mundo
1. Compilamos: javac HolaMundo.java
// Aplicación de ejemplo
// “Hola Mundo”
//
class HolaMundo{
public static void main(String args[]){
System.out.println(“Hola Mundo”);
}
}
Comentarios (3 tipos)
// Para comentar una línea
/*Para comentar
una línea o más*/
/**Para documentación usando javadoc*/
3
Anatomía de una aplicación
// Aplicación de ejemplo
// “Hola Mundo”
//
class HolaMundo{
public static void main(String args[]){
System.out.println(“Hola Mundo”);
}
}
Declaración de la clase
El nombre de la clase (que debe ser igual que el del
fichero fuente HolaMundo.java) se utiliza para crear
el fichero class en el mismo directorio en el que se
compila la aplicación.
// Aplicación de ejemplo
// “Hola Mundo”
//
class HolaMundo{
public static void main(String args[]){
System.out.println(“Hola Mundo”);
}
}
Método main
• Es el método que busca el intérprete para
ejecutar en primer lugar.
• Se le pasa como argumento un array de
objetos String llamado args.
4
Anatomía de una aplicación
// Aplicación de ejemplo
// “Hola Mundo”
//
class HolaMundo{
public
public static void main(String args[]){
System.out.println(“Hola Mundo”);
}
}
public
• Indica la accesibilidad del método. Un método
público puede ser llamado por cualquiera
incluyendo el intérprete java.
// Aplicación de ejemplo
// “Hola Mundo”
//
class HolaMundo{
public static
static void main(String args[]){
System.out.println(“Hola Mundo”);
}
}
static
• Indica al compilador que main es un método de
clase, es decir se refiere a toda la clase y no a
ninguna instancia en particular. Si alguien
instancia esta clase el método main no se
instanciaría.
5
Anatomía de una aplicación
// Aplicación de ejemplo
// “Hola Mundo”
//
class HolaMundo{
public static void
void main(String args[]){
System.out.println(“Hola Mundo”);
}
}
void
• Indica que el método main no devuelve ningún valor.
• Es importante indicar el valor de retorno porque java
hace una comprobación estricta de tipos.
• Los constructores son los únicos métodos sin valor
de retorno.
// Aplicación de ejemplo
// “Hola Mundo”
//
class HolaMundo{
Stringargs[]){
public static void main(String args[]
System.out.println(“Hola Mundo”);
}
}
String args[]
• Es la declaración de un array de Strings
• Son los argumentos que se pasan por la línea
de comandos.
6
Anatomía de una aplicación
// Aplicación de ejemplo
// “Hola Mundo”
//
class HolaMundo{
public static void main(String args[]){
System.out.println(“Hola Mundo”);
}
}
Funcionalidad
• Utiliza el método println de la clase out que
está en el paquete System.
• El método println toma como argumento una
cadena (String) y la saca por la salida estándar
(es decir por pantalla).
Java Runtime
Sistema Operativo
Hardware
java fichero
14
7
2. Java es un lenguaje de
programación orientado a objetos
¿Qué es un objeto?
8
Tipos de abstracción
Definición de objetos
9
Encapsulación
Acceso a variables
Un objeto tiene
•Estado: representado por los valores de sus variables/atributos
•Comportamiento definido por sus métodos
Normalmente:
• Los métodos son públicos
• Las variables son privadas
• Puede haber métodos privados
• Es peligroso tener variables públicas
20
10
¿Qué es una clase?
11
Interacciones entre objetos
Paso de Mensajes
Interfaz Pública
Implementación
Arrancar
12
Declaración de una clase
25
Identificadores
• Por convenio:
– Los nombres de variables, métodos y objetos comienzan
por minúscula.
– Los nombres de las clases comienzan por mayúscula
– Si contienen varias palabras se unen evitando subrayado
y separando palabras con mayúsculas deEsteModo
13
Palabras reservadas
Reservadas:
abstract double int static
boolean else interface super
break extends long switch
byte final native synchronized
case finally new this
catch float null throw
char for package throws
class goto private transient*
const * if protected try
continue implements public void
default import return volatile
do instanceOf short while
Reservadas aunque no se utilizan:
cast future generic inner
operator outer rest var
Variables
• Son las entidades sobre las que actúan los
programas
• Declarar una variable es decir su nombre y
tipo
• Usar una variable es insertarla en una
sentencia
• Podemos encontrar variables en:
– como miembros de la clase (dentro de una
clase)
– como variables locales (dentro del código de
un método)
– como parámetro de un método.
14
Declaración de variables
public class Coche{
//Declaración de atributos
String color;
int velocidad;
//Declaración de métodos
// (arrancar, parar, etc.)
}
Sintaxis Coche.java
tipo nombre; Estilo
tipo nombre1, nombre2, nombre3; • Nombres intuitivos
tipo nombre = valor; • 1ª letra minúscula
• Sin espacios en blanco ni guiones
• Las palabras se separan con
Inicialización de la mayúsculas: miVariable
variable a un valor • Indentación
29
15
Tipos primitivos
Tipos de referencia
16
Constantes
• Son valores invariantes de los tipos básicos
(primitivos más el String), que pueden asignarse a
variables o usarse en operaciones
Tipo Constantes Descripción
(Números enteros)
byte, short , int , long 37 37 en notación decimal
045 37 en notación octal (base 8)
0x25 37 en notación hexadecimal (base 16)
(Números en punto flotante)
float , double 3.14159f número pi en notación coma flotante
314159E-1 número pi con base y exponente
(Otros tipos)
char ‘a’ letra a
‘\n’, ‘\\’,’\’’’,’”’ nueva línea, \, ‘ y “
boolean true, false verdadero, falso
String “hola” la cadena de caracteres hola
Variables
Valores por defecto:
• Hay que distinguir: números = 0
– variables de instancia byte = 0
boleanos = false
– variables de clase
char= ‘\0’
– variables automáticas String = null
• Las variables referencias = null
– pueden inicializarse en la declaración
– pueden declararse sin inicializar
– Sin inicialización tienen un valor por defecto
salvo las automáticas
• Constantes (variables que no se pueden modificar):
– usar la palabra clave final
– inicializarla obligatoriamente en la declaración
17
Declaración de variables
Objetos como atributos
public class Coche{
//Declaración de atributos
String color;
int velocidad;
Equipamiento equipamientoSerie;
//Declaración de métodos
// (arrancar, parar, etc.) Estilo
} • Recordad que las clases (tipo)
Coche.java se nombran con mayúscula y
Sintaxis los identificadores
(nombreObjeto) con minúscula
NombreClase nombre;
NombreClase nombre1, nombre2;
NombreClase nombre = new Equipamiento();
Declaración de un objeto Creación de un objeto
similar a variables, donde antes poníamos el ¡¡¡Las variables se inicializan
tipo ahora ponemos el nombre de la clase Los objetos se crean!!!
Ámbito
18
Métodos
Declaración de métodos
public class Coche{
//Declaración de atributos
private String color;
private int velocidad;
//Declaración de métodos
public void arrancar(){
//codigo para el metodo arrancar
}
public void avanzar(int velocidad){
//codigo para el método avanzar
} Estilo
public String queColor(){
//codigo para averiguar el color • Nombres intuitivos
return color; • 1ª letra minúscula
} • Sin espacios en blanco ni
} guiones
• Las palabras se separan con
Coche.java mayúsculas miMetodo()
• Indentación
19
Declaración de métodos
public class Coche{
//...
public void avanzar(int velocidad){
//codigo para el método avanzar
}
//...
} Coche.java
parámetros
Método Resultado
(param1, param2)
Declaración de métodos
public class Coche{
//...
public String queColor(){
//codigo para averiguar el color
return color;
}
//... Coche.java
}
parámetros
Método Resultado
(param1, param2)
(modificadores) tipoRetorno NombreMetodo(tipo1 param1, tipo2 param2) {
//código del método
return expresion;
}
20
Declaración de métodos
• Los métodos
– tienen 0, 1 o más argumentos (parámetros)
– definen el tipo de resultado en su
declaración (¡salvo los constructores!)
– pueden tener variables locales
• En el cuerpo de un método no se pueden
declarar otros métodos.
• Si el método devuelve un resultado la
última sentencia debe ser un return
Métodos constructores
• Cuando se crea un objeto sus miembros se inicializan
con un método constructor
• Los constructores:
– llevan el mismo nombre que la clase
– no tienen tipo de resultado
• Conviene que haya al menos un constructor
• Si no existe, Java crea un constructor por defecto que
inicializa las variables a su valor por defecto
• Pueden existir varios que se distinguirán por los
parámetros que aceptan (sobrecarga)
42
21
El método principal (main)
Ejemplo (I)
Declaración de atributos y métodos
22
Ejemplo (II)
Invocación de atributos y métodos
Acceso a miembros
Modificadores de acceso
Miembros (Variables y métodos)
(friendly) Accesible sólo desde clases que estén en el mismo paquete
public Accesible para todas las clases
private Accesible sólo en la propia clase
protected Accesible para la propia clase y todas las que hereden de ella.
Otros Modificadores
• abstract
• static
• final
23
Acceso a miembros
Accesos a clases
Acceso a miembros
Accesos a elementos de una clase
(Elementos: variables o métodos de una clase)
• Friendly
• Public Las que
utilizaremos
• Private de momento
– Nadie puede acceder a los elementos privados
de una clase, excepto ella misma (ni siquiera las
clases del mismo paquete)
• Protected
– Similar a private, pero permite el acceso a
clases derivadas de ésta.
– Además, también es friendly (permite acceso a
clases del mismo paquete)
24
Acceso a miembros
Constantes definidas por el usuario
class Circunferencia {
private static final float PI = 3.14159;
private float radio;
private float area;
public Circunferencia (float radio) {
area= 2 * PI * radio;
}//constructor
} //class OperadoreUnario
Acceso a miembros
Miembros estáticos
• 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
• 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
Acceso a miembros
Algunas reglas
26
Ejemplo (III)
Modificadores de acceso
Ejemplo (IV)
Invocación cuando hay modificadores de acceso
27
Ejemplo (V):
Uso de constructores
Ejemplo (VI):
Método main
28
Resumen
Programa
Clases (ficheros.java)
Miembros
Atributos Métodos
Constructor Main
Arrays Objetos
29
Herencia
30
Ejemplo (VII):
Clase derivada
Ejemplo (VIII):
Otra clase derivada
31
Ejemplo (IX):
Método main
Ocultación de variables
(shadowing)
• Si definimos en una subclase una variable
del mismo nombre y tipo que en la
superclase, la de la superclase queda oculta
• Podemos acceder a la variable de la
subclase o de la superclase utilizando this y
super
– Ej: “coche” extiende de “vehiculo” y “vehiculo”
extiende de transporte
– Definimos en las tres clases la variable String
nombre
– ¿Cómo sabemos si nos estamos refiriendo al
nombre del transporte, al nombre del vehículo o al
nombre del coche?
32
Ocultación de variables
(shadowing)
clase “abuela" transporte String nombre = "terrestre"
Redefinición (overriding)
33
¿Para qué sirve?
Recurso Recurso
•nombre •nombre
•descripcion •descripcion
•decirNombre() •decirNombre()
•decirDescripcion() •decirDescripcion()
Modificador Final
• En métodos:
– Las clases derivadas no podrán sobrescribir el
método
– Además aporta eficiencia: el compilador convierte
llamadas al método en llamadas “inline”
34
Modificador Final (2)
• En clases:
– Impido la extensión de la clase (no es posible
“heredar” de ella)
final class Dinosaurio {
void andar() {
…
};
}
class Velociraptor extends Dinosaurio {}
¡¡Error!!
Sobrecarga (overloading)
35
¿Para qué sirve?
• Sintaxis: (tipo)identificador
• Dos tipos de casting:
– widening: Una subclase se utiliza como instancia
de la superclase (ej: llamamos a un método de la
clase padre que no ha sido sobreescrito). Es
implícito.
– narrowing: 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
36
Clases abstractas
37
Interfaces
Aula Ordenador
Todas las clases que implementen •descripcion •sistemaOperativo
Recurso tienen que tener todos los •localizacion •decirSistemaOp()
métodos de Recurso donde •decirNombre() •decirNombre()
•decirDescripcion() •decirDescripcion()
pongamos el código
•decirLocalizacion()
38
Paquetes
Paquetes
package MiPropioPaquete;
78
39
OO: Resumen I
• Clase (concreta)
– tiene todos los métodos implementados
• Clase abstracta
– Sólo algunos métodos implementados
– modificador abstract
• Interfaz
– Ningún método implementado
– palabra reservada: interface
OO: Resumen II
40