Вы находитесь на странице: 1из 90

Java – Módulo 1

Introducción y Fundamentos del


lenguaje de programación Java
Contenido

 Introducción
 Características del lenguaje.
 Variables y Tipos de Datos.
 Estructuras de Control
 Ciclos iterativos.
 Introducción a la POO.
Introducción
Introducción (I)‫‏‬
 Creado en 1991 por Sun Microsystems (James
Gosling) para dispositivos electrónicos:
calculadoras, microondas y la televisión
interactiva.
 Escasa potencia de cálculo
 Poca memoria
 Distintas CPUs
 Consecuencias:
 Lenguaje sencillo que genera código reducido
 Lenguaje que independiente de la plataforma
Introducción (II)‫‏‬
 Lenguaje de progamación para
computadores/internet desde 1995.
 Sun describe Java como “ un lenguaje simple,
orientado a Objetos, distribuido, interpretado,
robusto, seguro, de arquitectura neutral,
portable, de alto rendimiento, multihilos, y
dinámico”
 Ejecución de Java como:
 Aplicación independiente
 Applet (dentro del navegador al cargar la página Web)‫‏‬
 Servlet (ejecutado en servidor de internet, sin interfaz
gráfica).
Introducción (III)‫‏‬
 JDK (Java Development Kit): programas y librerias para
desarrollar, compilar y ejecutar programas Java.
 Versiones:
 Java 1.0: 212 clases organizadas en 8 paquetes
 Java 1.1: 504 clases, 23 paquetes. Mejoras a la JVM.
 Java 1.2 (Java 2): 1520 clases, 59 paquetes. Plataforma
muy madura . Apoyado por grandes empresas: IBM,
Oracle, Inprise, Hewtlett-Packard, Netscape, Sun.
 Java 1.3 (Java Enterprise Edition). Java comienza a
ser una plataforma de desarrollo profesional
 ??? Java MicroEdition
Características de Java
Características de Java I
 Lenguaje de fácil uso orientado a objetos
 Lenguaje compilado e interpretado
 Facilita un entorno interpretado:
 Velocidad de desarrollo (no de ejecución)‫‏‬
 Portabilidad del código
 Ejecución multitareas
 Cambios dinámicos en tiempo de ejecución
 Seguridad del código.
La máquina Virtual Java - JVM (I)‫‏‬
 Es una máquina hipotética que emula por software una
máquina real. Es definida por una especificación.
 Conjunto de instrucciones de máquina
(C.O.) + Operandos
 Pila
 Memoria
 ...
 El compilador genera bytecodes (instrucciones de código
maquina para la JVM)‫‏‬
 El interprete tarduce y ejecuta los bytecodes para cada
máquina específica.
Compilador e intérprete de
Java (I)‫‏‬
 El compilador analiza la sintaxis del código fuente (con
extensión .java). Si no hay errores, genera bytecodes
> javac <Nombre>.java

 El intérprete es la Máquina Virtual de Java que ejecuta


los bytecodes (*.class) creados por el compilador.
> java <Nombre> (sin extensión)‫‏‬
> java <Nombre> arg1 arg2 …
Compilador e intérprete de Java (II)‫‏‬
Codigo fuente
compilar

javac HelloWorld.java
HelloWorld.java

java HelloWorld HelloWorld.class

ejcutar bytecode
Garbage Collection
 La memoria reservada dinámicamente que No se vaya a
usar más debe ser liberada.
 En otros lenguajes, esta liberación debe realizarla el propio
programador.
 La JVM dispone de un proceso que rastrea las operaciones
de memoria: el Garbage Collector.
 Verifica y libera la memoria que no se necesita
 Se ejecuta automáticamente
 Puede variar según la implementación de la JVM.
Seguridad del Código
 La JVM verifica los bytecodes asegurando que:
 El código se ajusta a las especificaciones de la JVM.
 No hay violaciones de acceso restringido.
 Los tipos de los parámetros son correctos para todo el
código.
 No existen conversiones ilegales de datos (ej. de
enteros a apuntadores).
Formato de los archivos fuente
 Declaración de paquete (opcional)‫‏‬
 package <nombrePaquete>
 Instrucciones de importación(opcional)‫‏‬
 import <nombrePaquetes>
 Declaración de clase o interfaz
 [<mod>] class <NombreClase> {.....}
Un programa Simple

public class ProgramaSimple


{
public static void main(String[] args)
{
System.out.println("Este es” + ”un programa simple");

System.exit(0);
}
}
Elementos del Lenguaje
Elementos del lenguaje
 Caracteristicas del lenguaje
 Declaraciones
 Tipos de Datos
 Operadores
 Estructuras de control
 Clases y Objetos
 Paquetes
Caracteristicas del lenguaje

 Sensible a mayúsculas/misnúsculas
 Comentarios
 Lenguaje de formato libre
 Identificadores
 Palabras reservadas
 Variables y constantes
 Convenciones de nomenclatura
 Tiene reglas sobre los tipos de datos
Sensible a
mayúsculas/minúsculas

 Se distingue entre mayúsculas y


minúsculas.
 Los identificadores Papa, papa y PAPA
son diferentes.
 Todas las palabras reservadas del lenguaje
van en minúsculas.
Comentarios
// comentario
Los caracteres desde // hasta el final de la línea son
ignorados.
/* comentario */
Los caracteres entre /* y */ son ignorados
/** comentario */
Los caracteres entre /** y */son ignorados y se
incluyen en la generación autómatica de la
documentación.
Lenguaje de formato libre
 La disposición de los elementos dentro del código es libre
 Instrucciones: línea simple de código terminada en ;
 Bloque de código: Conjunto de sentencias agrupadas entre
llaves.
{
X = x + 1;
Y = y + 1;
}
 Java permite espacios en blanco entre elementos del código
X1 = y * delta;
X2 = (y-1) * delta;
Palabras Reservadas
 Palabras con un significado especial para el compilador
 Ejemplos:
 Nombres de tipos básicos: boolean, char, double, int, …
 Indicadores de controls: do, if, else, for, while, …
 Class, interface, extends, implements
 package, import
 this, super
 Modificadores de acceso: public, private, protected
 Constantes: true, false, null
 Etc…
Variables y Constantes

 Variable: Zona de memoria cuyos valores van a


cambiar durante la ejecucuión.
 Declaración:
 <tipo> <variable>;
 <tipo> <var1>, <var2>, ..., <varn>;
 <tipo> <var1> = <valor>;
Variables y Constantes
 Ejemplos de declaración de variables:
 int x,y,z;
 int x = 9;
 boolean terminar = false;
 Cliente c1 = new Cliente();
 Constantes: Zona de memoria cuyos valores no
cambian
 Declaración:
 final <tipo> <variable> = <valor>;
 Ejemplo: final double PI = 3.14159;
Asignaciones
 Se utiliza el operador de asignación =
 <tipo> <variable> = <valor>;
 <tipo> <variable>;
<otras instrucciones>...
<variable> = <valor>;
 La parte izquierda siempre debe ser una variable
 La parte derecha puede ser un literal, una
variable, una expresión, una función o una
combinación de todos.
 int x = 4; //Declaracion con asignación
 x = 9; //Se asume que x está definida
Tipos de Datos y Operadores
Tipos de Datos
 Java define dos tipos de datos
 Tipos primitivos
 Tipos referencia
 Los tipos primitivos son ocho agrupados en
cuatro categorías:
 Lógico: boolean
 Texto: char
 Entero:byte, short, int, long
 Real: float, double
 Los tipos referencia son apuntadores a objetos.
Tipos de Datos

 Tipos primitivos:
 boolean true o false
 char unicode! (16 bits)‫‏‬
 byte entero de 8 bits con signo.
 short entero de 16 bits con signo.
 int entero de 32 bits con signo.
 long entero de 64 bits con signo.
 float,double IEEE 754 floating point
Tipos de datos Referencia
 Un tipo referencia guarda un apuntador a la dirección
donde se ubica el objeto (32 bits).
 Sólo puede almacenar objetos de su propio tipo.
 Ejemplo:
Cuadrado cuad1, cuad2;
Circulo circ1;
cuad1 = new Cuadrado();
circ1 = cuad1; // Error de compliación
cuad2 = cuad1’; // Ok
 Todas las clases son de tipo referencia.
 El valor que toma por defecto una variable de tipo
referencia es null.
Cadenas de Caracteres
 La clase String permite manejar cadenas de caracteres.
 El literal string debe ir entre comillas dobles “”.
 Se puede crear una cadena de caracteres de dos formas:
 String nombre = new String(“Pepe”);
 String nombre = “Pepe”;
 Para concatenar dos cadenas se usa el operador +.
 No se guarda el carácter fin de cadena.
Conversiones de tipos
 La conversión de tipos (casting) debe realizarse entre
tipos de la misma naturaleza: numéricos o referencia.
 Al convertir un tipo a un tamaño más pequeño se puede
perder la información del los bits de mayor peso.
 No hay conversión automatica con el tipo boolean!
 La sintaxis es: (<tipo>) <expresion>
 Ejemplo: int i = (int) 1.345;
Operadores (I)‫‏‬
 Unarios: +. -
 Aritméticos: +, -, *, /, % (resto de la división).
 De Asignación: =, +=, -=, *=, %=
<var> += <exp> ó <var> = <var> + <exp>
 Operadores incrementales: ++, --
 Precediendo a la variable: ++<var>, --<var>
 siguiendo la variable: <var>++, <var>--
 relacionales: ==. !=, <, >, <=, >=, …
Operadores (II)‫‏‬
 Operadores relacionales: == (igual). != (distinto), <, >,
<=, >=, …
 Operadores booleanos: && (AND), || (OR), ! (NOT), &
(AND), | (OR).
 && y || realizan evaluación perezosa
 & y | siempre evalúan los dos operadores

 El operador instanceof: <objeto> instanceof


<clase> determina si un objeto pertenece a una clase.
Operadores (III)‫‏‬
 Operador condicional: ?
<expBooleana> ? <valor1> : <valor2>
permite bifurcaciones condicionales sencillas.
 Operadores a nivel de Bits: &, |, ^, ~, <<, >>, >>>
 op1 >> n, desplaza los bits de op1 (con signo) a la derecha n
posiciones.
 op1 >>> n, desplaza los bits de op1 (sin signo) a la derecha n
posiciones.
 op1 ^ op2, O exclusivo.
 ~op1 , NOT a nivel de bit (complemento).
Precedencia de operadores
• Los operadores binarios se evalúan de izaquierda a derecha,
excepto los operadores de asignación.
1. Sufijos: . [] ()
2. Unarios: ++ -- ! ~
3. Creacion y casting: new (tipo)exp
4. Multiplicativos: * / %
5. Aditivos: + -
6. Desplazamientos: << >> >>>
7. Relacionales: < > <= >= == !=
8. Bits: & ^ |
9. Lógicos: && ||
10. Condicional: ? :
11. Asignación: = op= (*= /= %= += - etc.)‫‏‬
Estructuras de control
Estructuras de Control
 Las estructuras de control del flujo de ejecución
permiten tomar decisiones y realizar un bloque de
instrucciones repetidas veces.
 Hay 2 tipos principales:
 Condicionales: if , switch
 Lazos: for, while, do while
 Otras instrucciones que permiten interrumpir el flujo
normal de ejecución son break y continue.
La instrucción if
 Ejecuta un conjunto de instrucciones en función de la
expresión de comparación (booleana)‫‏‬
if (<exprBooleana>) <instruccion1>;
[else <instrucción2>];
if ( exprBooleana ) <bloque1>;
[else <bloque2>];
 Ejemplo: if (a>b) x = a;
else x = b;
 El else es opcional
if ( x[i] > max ) max = x[i];
La instrucción switch
 Comparación de igualdad múltiple con la misma
variable.
switch(<variable>) {
case literal1:[<cjtoInstrucc1>;]
[break;]
case literal2:[<cjtoInstrucc2>;]
[break;]

case literaln:[<cjtoInstruccn>;]
[break;]
[default: <cjtoInstrucc>;]
}
Ejemplo switch
switch(opcion) {
case 1:AbrirArchivo();
break;
case 2:ImprimirArchivo();
break;
case 3:ImprimirDatos();
break;
case 4:CerrarArchivo();
break;
case 5:
default: terminarPrograma();
}
El lazo for
 Permite la ejecución repetida de un grupo de
instrucciones con mayor control
for ( <inicialización>;
<expBooleana>; <actualización> )
{ <grupo de instrucciones> ; }
 <inicialización>, asignación de valores iniciales de
las variables que intervienen en la expresión
 <expBooleana>, condición boolena
 <actualización>, asignación de un nuevo valor de las
variables de <inicialización>
El lazo While

 El grupo de instrucciones se ejecuta


mientras se cumpla la expresión booleana.
while ( expBooleana )
{
<grupoInstrucciones> ;
}
Equivalencia for-while
for ( <inicialización>; <expBooleana>; <actualización> )
{
<grupo de instrucciones> ;
}

 Equivale a:
<inicialización>
while ( expBooleana )
{
<grupoInstrucciones> ;
<actualización>;
}
Ejemplo
for( k=0; k<n; k++ ) { <s>; }
K=0
while ( k<n )
{
<s> ;
k++;
}

Realizan el las instrucciones en la secuencia de


instrucciones s, n veces.
El lazo Do-While
 El conjunto de instrucciones se ejecuta mientras se
cumpla la expresión booleana
do
{
<grupoInstrucciones> ;
}
while ( expBooleana )‫‏‬

 El conjunto de instrucciones se ejecuta al menos 1 vez.


Las instrucciones break y
continue.
 La instrucción break causa la terminación
inmediata de un lazo o instrucción switch (sin
ejecutar el resto de las instrucciones).
 Válido para for, while, do while y switch
 La sentencia continue causa la terminación
inmediata de una iteración de un ciclo.
 Válido para for, while y do while
Programación Orientada a
Objetos
Paradigmas de programación
 Paradigma estructurado o procedural: Los programas se dividen
en procedimientos independientes con acceso total a los datos
comunes.
Algortimos + Estructuras de Datos = Programas
 Paradigma orientado a objetos: Los datos se consideran la parte
más importante del programa. Los objetos modelan las
características de los problemas del mundo real, su
comportamiento ante estas caracteristicas y su forma de interactuar
con otros elementos
Objetos + mensajes = Programas
Ejemplo: Tomarse un café en
la panadería
 Procedural:  OO:
 El cliente entra el la  El cliente entra en la
panadería panadería
 El cliente pasa detrás  El cliente pide un café
de la barra al “cafetero”
 El cliente prepara la  El “cafetero” prepara
cafetera el café.
 El cliente se sirve el  El “cafetero” sirve el
café café al cliente.
 El cliente se bebe el  El cliente se bebe el
café. café.
Conceptos de la Orientación a
Objetos
 Clases: Patrones que indican como construir objetos
 Objetos: Instancias de las clases en tiempo de
ejecución.
 Miembros de la clase:
 Atributos: Características o propiedades de los objetos
(o clases). Pueden ser variables de tipos simples o
referencias a otros objetos
 Métodos: Comportamientos de los objetos. Son
funciones que operan sobre los atributos de los objetos.
Características de la OO
 Cada objeto tiene características reconocibles.
Ejemplo: un empleado tiene Nombre, CI, sueldo, …
 Cada objeto es único. Ejemplo: el empleado1 es Juan
Pérez, con CI 1.456.786 gana 890.000 Bs.
 Los objetos almacenan información (sus
características)‫‏‬
 Los objetos realizan operaciones sobre sus atributos.
Definición de Clase
 Sintaxis
Class <NombreClase> {
// Declaracion de atributos
<tipo> <var>;
// Declaración de métodos
<tipo> <nombreMetodo> ( <argumentos> )‫‏‬
{ … }
}
 El nombre del archivo debe coincidir con el de la
clase definida en él.
 Se recomienda definir una clase por cada archivo
Java.
Ejemplo de Clase
public class Circulo {
// Atributos
double radio;
String color;
// Metodos
void asigRadio( ){ … }
double area( ){…}
}
Creación de un objeto

 Se usa la palabra reservada new


<refObjeto> = new <NombreClase>();

 Ejemplo:
Circulo miCirculo;
miCirculo = new Circulo();
Acceso a los miembros de un
Objeto
 A través del operador punto (.) se puede acceder tanto
a los atributos como a los métodos.
<refObjeto>.<atributo>
<refObjeto>.<metodo>()
Ejemplo:
Circulo miCirculo = new Circulo();
miCirculo.radio = 10;
miCirculo.color = azul;
miCirculo.area();
Métodos
 Son el equivalente a los procedimientos de los lenguajes no
OO. Un método es un bloque de código definido dentro de
una clase que proporciona un mecanismo para realizar una
acción.
 Un método tiene acceso a todos los atributos de su clase.
 Un método puede invocar otros métodos
 En Java no se puede definir un método dentro de otro.
 La ejecución de todos los programas se inicia en el método
main.
Definición de métodos (I)‫‏‬
 Sintaxis para la definición de un método:
<tipoRetorno> <nombreMetodo>(< parametros >...)
{ <instrucciones>...}

 La declaración de un método tiene cuatro partes básicas:


 El tipo del valor de retorno del método (tipo). Si no devuelve
ningun valor debe ser void.
 El nombre del método (nombreMetodo)‫‏‬
 Una lista de parámetros (parametros). Casa parámetro tiene la
forma <tipo> <argumento>. Se separan con comas.
 El cuerpo del método (instrucciones).
Definición de métodos (II)‫‏‬
<instrucciones>, Conjunto de instrucciones que
implementan la tarea que debe realizar el método.
 Si devuelve un valor debe finalizar con la sentencia
return
return <valor>;
<valor> Debe ser del mismo <tipoRet> con que se ha
declarado el método.
 El código se ejecuta hasta alcanzar la instrucción return (si
devuelve un valor) o hasta el final del método.
 Se pueden declarar variables locales si son necesarias.
Ejemplos de Métodos
public class Circulo
{
// Atributos
double radio;
String color; double obtRadio( ){
// Metodos return radio;
void asigRadio( }
){ … } void asigRadio(int nuevoRadio){
double area( ){…} radio = nuevoRadio;
} }
public double Area( ) {
return radio*radio*Math.PI;
}
Parametros
 Las variables en la lista de parámetros se separan con
comas.

 Los parametros de la lista en la especificación del


método, son llamados parámetros formales.

 Cuando un método es llamado, estos parámetros


formales son reemplazados por los parámetros
actuales.

 Los parámetros actuales deben ser equivalentes en


tipo, orden y número a los parametros formales.
Paso de parametros por valor
 Cuando es invocado un método con un
parámetro de tipo primitivo, tal como “int”, el
valor del parámetro actual es pasado al método.
 El valor actual de la variable fuera del método
no es afectado, independientemente de los
cambios hechos al parámetro formal dentro del
método.
Parametros por valor - Ejemplo
class PruebaPasoPorValor {
public static void main(String[] args) {
int times = 3;
System.out.println(“Antes del llamado, la variable
times es”+times);
nPrintln(“Bienvenido a Java!”,times);
System.out.println(“Despues del llamado, la variable
times es” + times);
}
static void nPrintln(String mensaje, int n) {
while (n > 0) {
System.out.println(“n = “+n);
System.out.println(mensaje);
n--;
}
}
}
Paso de parametros por
referencia
 Se pueden pasar objetos a métodos como
parámetros actuales
 Cuando se pasa un objeto al método la referencia
del objeto es pasado al parámetro formal
 Cualquier cambio al objeto local que ocurra
dentro del método afectará al objeto original que
fue pasado como argumento.
Parametros por referencia -Ejemplo
class PruebaPasoPorReferencia {
public static void main(String[] args){
Circulo miCirculo;
miCirculo = new Circulo(5.0, "blanco");
imprimeCirculo(miCirculo);
colorCirculo(miCirculo, "negro");
imprimeCirculo(miCirculo);
}
public static void colorCirculo( Circulo c, String color)
{
c.color = color;
}
public static void imprimeCirculo(Circulo c) {
System.out.println("El área del circulo de radio " +
c.getRadio( ) + " es " +c.Area());
System.out.println("El color del Circulo es " +c.color);
}
}
Parametros por referencia –Ejemplo (cont.)‫‏‬
class Circulo {
private double radio;
String color;

public Circulo(double r, String c){


radio = r;
color = c;
}
public double getRadio( ){
return radio;
}
public double Area( ){
return radio*radio*Math.PI;
}
}
Alcance de las variables (I)‫‏‬
 En java se dispone de tres tipos de variables:
 Las variables miembro pertenecientes a una clase.
 Argumentos de un método de la clase.
 Variables locales de un método de la clase.
 Los argumentos trabajan como variables locales.
class Ejemplo {
int x; // variable miembro
metodo (int y){ // argumento
int z; // variable local
x = y + z;
}
}
Alcance de las variables (II)‫‏‬
 Las variables miembros son visibles desde
cualquier parte de la clase.
 Los argumentos y variables locales solo son
visibles dentro del método al que pertenece, dejan
de existir al finalizar el método.
 Dentro de un método, si coincide el identificador
de un argumento o variable local con el de una
variable miembro, sólo se accede a la variable del
método.
Ejemplo

class A { …main…
int x; {
void metodo (int y){ int arg = 4;
int x=2; A obj = new A();
y = 3*x + y - x; obj.x = 1;
…println(y); obj.metodo(arg);
} …println(arg);
} …println(obj.x);
}
La referencia this

 Se emplea para referirse al objeto actual


dentro de un método.

 Con this se hace accesible una variable


miembro cuyo identificador coincide con una
variable local.
Constructores (I)‫‏‬
 Un constructor es un tipo especial de método que
permite construir un objeto de una clase.
 Ejemplo:
class Circulo {
public Circulo(){…}
public Circulo(double r){…}
public Circulo(double r, String c){…}

 Se utilizan junto con la palabra reservada new


Circulo c1 = new Circulo(27);
Constructores (II)‫‏‬
 Los constructores se pueden sobrecargar y
son opcionales
 Si no se define ningún constructor, Java
proporciona uno por defecto.
 Si se define un constructor con argumentos
se pierde el constructor por defecto
 Normalmente en el constructor se
inicializan las variables miembro.
Destructores
 En Java no hay destructores como en C++

 El garbage collector es el encargado de liberar la


memoria.
 Cuando se detecta objetos no referenciados
 Al final de un bloque que haya utilizado objetos.
Getters/Setters
Son métodos de acceso, lo que significa que
generalmente son una interfaz pública para
cambiar miembros de clases privadas.

Los métodos getter y setter se utilizan para


definir una propiedad.

A los métodos getter y setter se accede como


propiedades situadas fuera de la clase,
aunque las defina dentro de la clase como
métodos.
Getters/Setters
Ventajas :

Posibilidad de crear miembros con


funcionalidad sofisticada a los que puede
acceder como propiedades.
Permiten crear propiedades de sólo
lectura o sólo escritura.
Getters/Setters
Desventajas :

Pueden dificultar el mantenimiento del


código en determinadas situaciones.

Proporcionan acceso a la implementació


n de la clase, como miembros públicos( En
OOP, no se aconseja el acceso directo a
las propiedades de una clase)
Getters
Devuelven el valor de los atributos. Cada
método accedente devuelve un atributo.

Clase Disco Método Precio


- Título Devuelve el valor de precio
- Artista
- Precio
Setters
- Permiten cambiar el valor de los atributos.

Clase Socio Método Casado


- Nombre Cambia el valor de casado
- Apellidos
- Casado
Características de la POO
Más conceptos de OO
 Encapsulamiento: Permite la protección de
ciertas partes de un objeto del acceso desde
otros objetos externos
 Herencia: Jerarquía de clases basada en la
agrupación de atributos o métodos comunes
 Polimorfismo: Tratamiento generalizado a
todas las clases pertenecientes a una jerarquía
de herencia.
Encapsulamiento
 El encapsulamiento consiste en la agrupación de
datos y su tratamiento en una misma estructura.
 Permite la proteccdión de la manipulación externa
de algunas partes de los objetos.
 Un objeto suele tener datos y métodos privados,
de acceso restringido.
 Fuerza al usuario a usar una interfaz para acceder
a los datos.
 Hace que el código sea más fácil de mantener
Modificadores para restringir
el acceso (I)‫‏‬
 La definición de los miembros de una clase se
puede ampliar añadiendo modificadores al
principio.:
[modificador]<tipo> <identificador>;
[modificador]<tipo> <nombre>(<args>)‫‏‬
{...}

 Los modificadores permiten acceder a los


datos o métodos de manera restringida
Modificadores para restringir
el acceso (II)‫‏‬
public. El miembro de la clase es accesible desde
cualquier parte del código.
private. El miembro de la clase sólo es accesible
desde código perteneciente a la propia clase.
protected(o friendly). Sólo las subclases de la
clase y nadie más pueden acceder a las variables y
métodos.
Herencia (I)‫‏‬
 Jerarquia de clases basada en agrupar atributos
y/o métodos comunes
 Las clases descendientes se llaman subclases.
 Las clases ascendientes se llaman superclases.
 Las subclases heredan características y métodos
de las superclases (excepto los constructores)‫‏‬
Herencia (II)‫‏‬
 Supongamos que tenemos la clase Jefe y la clase
Secretaria definidas como:
 Jefe {<int><numEmpleado>, <String><nombre>,
<int><numDepart>, <int><numSupervisados>}
 Secretaria {<int><numEmpleado>, <String><nombre>,
<int><numDepart>, <Jefe><trabajaPara>}
 Las partes comunes se pueden agrupar en una
misma clase, manteniendo las otras dos con las
partes no comunes y heredando de esta nueva clase
con la palabra reservada extends.
Ejemplo herencia
public class Articulo { // clase padre
public float precio=0;
...
public void setPrecio(float elPrecio) {
precio = elPrecio;
}
...
public float getPrecio() {
return precio;
}
}

//los métodos y atributos de Articulo son heredados a Pelicula

public class Pelicula extends Articulo {// clase hijo

public void setDescripcion(String descrip) {


descripcion = descrip;
}
...
public String getDescripcion() {
return descripcion;
}
}
Relación de Contenido
 Una clase puede tener referencias a objetos de
otras clases.

 Se diferencia de la herencia en que es necesario


instanciarlos por separado.

 Responde afirmativamente a la pregunta:


<contenedor> tiene un <contenido>?
Métodos virtuales
 Una subclase puede modificar los métodos
que ha heredado de las superclase,
manteniendo los mismos nombres, tipos de
retorno y listas de argumentos.
class Empleado {
int calcularVacaciones() {...}
}
class Jefe extends Empleado {
int numSupervisados,
int calcularVacaciones() {...}
}
Polimorfismo
 Un método con el mismo nombre, tipo de retorno
y lista de parámetros puede ser aplicado a objetos
de diferentes clases.
 Uso, trabajar con la clase más general:
 Parámetros polimórficos
 Colecciones heterogéneas
Empleado e1 = new Empleado();
Empleado e2 = new Jefe();
Empleado e1 = new Secretaria();

e2.numSupervisados = 15; // ERROR


((Jefe)e2).numSupervisados = 15;

Вам также может понравиться