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

U.T.N.

– Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas


Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 1

INTRODUCCIÓN A LA COMPLEJIDAD JAVA

Fuentes:

Java Tutorial (Sun): http://java.sun.com/docs/books/tutorial/


The Really Big Index: http://java.sun.com/docs/books/tutorial/reallybigindex.html
API de J2SE http://java.sun.com/j2se/1.4.2/docs/api/

Características de Java

§ Simple: sin unions, structs, typedefs, preprocesors, aritmética de punteros, sobrecarga de operadores, herencia
múltiple, goto, funciones.
§ Orientado a Objetos, puro.
§ Tipado estáticamente: chequeo de tipos en tiempo de compilación.
§ Compilado e interpretado: primero compilado a “byte-codes”, después interpretado por intérprete Java.
§ Independiente de la Arquitectura y Portable
§ Garbage collected: libera al programador de desasignar memoria.

§ Robusto: intérprete controla todos los accesos al sistema, no hay crash del sistema. Las excepciones pueden ser
trapeadas.
§ Seguro: verifica todos los accesos a Mp. No hay acceso a áreas del sistema no autorizadas.
§ Multi-threaded: los programas pueden contener múltiples threads de ejecución, lo que permite la concurrencia de
tareas. Ejemplo: programa muestra una animación de una imagen mientras continúa aceptando entradas desde
el teclado.
§ Extensible: soporta métodos nativos (métodos implementados en otro lenguaje). Son dinámicamente linkeados a
la aplicación Java.

§ Java puede ser usado en tres formas:


§ Aplicaciones stand-alone.
§ Applets (aplicaciones que corren en un browser) ⇒ Un Applet es una aplicación que se encuentra embebida
en código HTML y es enviada junto con una página Web a
un usuario.
§ Servlets (aplicaciones que corren en un servidor).

La plataforma Java

• Una plataforma es el ambiente de


hardware o software en el cual un
programa corre.
• Con el compilador, primero traducimos
un programa en lenguaje Java a un
programa en código intermedio llamado
Java bytecodes (un código
independiente de la plataforma
interpretado por el intérprete Java sobre
la plataforma Java).
• El intérprete analiza y corre cada instrucción en bytecode.
• La compilación ocurre sólo una vez (sin errores); la interpretación ocurre cada vez que el programa es ejecutado.

• La plataforma Java tienen dos componentes:


• La Java Virtual Machine (JVM)
• La Java Application Programming Interface (Java API)
• La Java API es una gran colección de componentes de software
listas para ser usadas que proveen muchas utilidades. Se
encuentran agrupadas en paquetes.
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 2

JVM
• Podemos pensar en los bytecodes de Java
como las instrucciones de código de máquina
para una máquina particular: la Máquina
Virtual Java (JVM).
• Cada intérprete Java es una implementación
de la JVM.
• El bytecode de Java nos ayuda a hacer
posible la idea de “escribir una vez, ejecutar
donde quiera”.

Ediciones de la plataforma Java 2

J2SE (Java 2 Standard Edition)


• Para obtener J2SE (Java 2 Platform, Standard Edition) ir a : http://java.sun.com/j2se
• Downloads: J2SE SDK (Java Software Development Kit) ⇐
J2SE JRE (Java Runtime Environment)

J2SE SDK (Java 2 Software Development Kit)


• SDK
• Herramientas para desarrollo de aplicaciones, applets y componentes que corren en una plataforma Java.
• Para ser usadas en la línea de comando.
• Herramientas:
• Javac, compila código Java en bytecode.
• Java, interpreta (ejecuta) bytecode Java.
• Appletviewer, visualiza Applets.
• Jre, interpreta (ejecuta) bytecode Java.
• Jdb, busca y corrige bugs en programas Java.
• Javap, desensambla archivos compilados de Java (.class).
• Javadoc, genera documentación en formato HTML a partir del código fuente Java.

JRE (Java Runtime Environment)


• Es parte integral del SDK.
• Provee el mínimo de requerimeintos para poder ejecutar una aplicación Java:
• JVM
• Java APIs
• Otros componentes necesarios para ejecutar applets y aplicaciones escritas en Java.

Entornos Integrados de Desarrollo (IDEs) para Java


• IBM Visual Age for Java
• Sun Java Studio
• Borland JBuilder
• eclipse (www.eclipse.org) ⇐
“La plataforma eclipse es un IDE para todo y para nada en particular”. Provee un plug-in IDE para Java que
permite al usuario escribir, compilar, probar, depurar y editar programas escritos en lenguaje Java.
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 3

Sintaxis Tipos de Datos Primitivos Ejemplos de literales


y sus tipos correspondientes

Sintaxis Caracteres Especiales

Sintaxis Operadores
x = 10 * 15 - 0.5f; // debe ser variable de punto flotante // suma
X = (int)(10 * 15 - 0.5f); // cast X entera
int r = 3 / 2; // efectúa división entera ++i;
float result = 3 / 2; // efectúa división entera i++;
float result = 3f / 2f; // efectúa división correcta i+=3;
float result = 3f / 2; // efectúa división correcta
r = r % 2; // módulo //instancia de

(i instanceOf Integer)
Precedencia de Operadores
Operadores sufijo [ ], ( ), exp++, exp--
Operadores unarios ++exp, --exp,!exp
Creación o tipo new Clase( )
Multiplicadores *, /, %
Suma-Resta +, -
Desplazamiento <<, >>, >>>
Relacionales <, >, <=, >=, instanceOf
Igualdad ==, !=
Bitwise AND &
Bitwise exclusive OR ^
Bitwise inclusive OR |
AND lógico &&
OR lógico ||
Condicional ?
Asignación =, +=, -=, /=, %=, ^=, &=, |=, <<=, >>=, >>>=

Sintaxis de sentencias
• if (x == 1) y = 1; • num=1; • for(int x=0; x<10; ++x) ….
else if (x == 2) y = 2; while(num<10) ++num;
else if (x == 3) y = 3; • for(int x=5; x<=50; x+=5) …
else y = 0; • num=0;
do ++num;
• switch(x) { …
case 1: y = 1; break; while (num<10);
case 2: y = 2; break;
case 3: y = 3; break;
default y = 0; }
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 4

Sintaxis

• Case sensitive
String no es lo mismo que string
MAIN no es lo mismo que main
• Palabras reservadas en minúsculas
Ej. public, class, static, void
• Convenciones de Codificación: http://java.sun.com/docs/codeconv/

Convenciones de Nombres

• Aparte de unas pocas palabras reservadas, como por ejemplo if, while, etc., Java no impone restricciones
sobre los nombres que podemos usar para los identificadores. Sin embargo, existe un convención estándar para
los nombres:
• Los métodos, variables y objetos comienzan con una letra minúscula: next, push(), index, etc.
• Las clases comienzan con una letra mayúscula: String, StringBuffer, Vector, Calculator, etc.
• Las constantes son todas en mayúsculas: final double PI = 3.1415926;
• La separación de palabras en los identificadores es hecha empezando con mayúscula las palabras después de
la primera, excepto para las constantes donde se usa underscore como separador de palabras.
toString(), addMouseListener(), UNA_CONSTANTE

Una aplicación simple: “Hello Word”

Nombre del código fuente: Hello.java


• El archivo debe llamarse Hello.java (por el
nombre de la clase pública).
public class Hello{ • El comando javac invoca al compilador Java
public static void main(String[] args){ sobre el archivo fuente Hello.java
System.out.println(“ Hello World !!! ”); • Si todo va bien, creará un archivo llamado
} Hello.class, el cual contiene el código
} para la JVM.
• El comando java invoca al intérprete Java
En línea de comando: para correr el código para la clase Hello.
• En una aplicación Java, la primera cosa que
C:\javac Hello.java ( compilación crea Hello.class ) se ejecuta es el método llamado main de la
C:\java Hello (Ejecución sobre la JVM local) clase indicada (en este caso Hello). Se
pueden tener funciones main en todas las
clases que se desee.
Clases y Objetos

• La Clase es la estructura fundamental en Java. ⇒ Clase = tipo de dato


• Un Objeto es una instancia de una clase.
• Se puede crear un objeto usando el operador new y un constructor de la clase. El operador new retorna una
referencia al objeto que fue creado. Se puede asignar la referencia a una variable o usarlo directamente.

• Ejemplo de una clase vacía (inútil pero válida):


class MyClass {
}

• Ejemplo de instanciación de un objeto


MyClass myObject;
myObject = new MyClass(); //se instancia el objeto myObject
También
MyClass myObject = new MyClass();

• Ejemplo de instanciación de un objeto anónimo


obj1.met1(new MyClass()); //objeto anónimo de clase MyClass
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 5

Constructor de una clase


• Debe tener el mismo nombre que la clase.
• Inicializa variables de instancia de un objeto de la clase.
• Es llamado cuando el programa instancia un objeto de esa clase.
• Puede tener argumentos, pero no tiene un tipo explícito de retorno (ya que siempre retorna una ref. a un objeto
de la clase).
• Una clase puede tener varios constructores (sobrecarga => diferentes listas de parámetros)

Miembros de Instancia y de Clase


• Variable de Instancia: Cada objeto mantiene su valor propio para la variable. Propia de cada objeto.
• Variable de Clase: Todos los objetos mantienen el mismo valor en todo momento. Cuando cambio en un objeto,
todos cambian. Común a todos los objetos.
• Método de Instancia: Métodos que llevan a cabo un cierto comportamiento basado en los datos del objeto.
• Método de Clase: Métodos que llevan a cabo un cierto comportamiento independiente de un objeto particular
sino dependiente de la clase.

Variables y Métodos de Instancia


public class Dog{
private String name,eyeColor;
private int age;
private boolean hasTail;
public Dog(String aName, String anEyeColor, int anAge ){
name = aName;
eyeColor = anEyeColor;
age = anAge;
}
public Dog(String aName) {
name = aName;
}
public void speak() {
System.out.println("arf, arf!");
}
}
• Para acceder a un miembro público de instancia desde afuera de una clase usamos:
nombreDelObjeto.nombreDelMiembro
Dog myDog = new Dog(“Bruna”); //instanciación
myDog.speak(); //acceso al método público speak.

• Los miembros privados sólo pueden ser accedidos dentro de la clase y no necesitan ser precedidos por el
nombre del objeto (excepto cuando exista sobrecarga con un parámetro, en cuyo caso se lo precede por el
objeto “this”).
public Dog(String aName){ public Dog(String name){
name = aName; this.name = name;
} }

Variables y Métodos de Clase - Modificador “static”


public class Window {
public static Size defaultSize; // Variable de Clase
public Size mySize; // Variable de Instancia
public static int numberOfInstances(){ // Método de Clase
...
}
• Para acceder a un miembro estático (de clase) y público de una clase usamos
NombreDeLaClase.nombreDelMiembro (También podemos usar un objeto de la clase)

Window.numberOfInstances() //mét.de clase de la clase Window


Window.defaultSize // vble.de clase de la clase Window
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 6

Variables y Métodos - Modificador “final”


class MyClass {
final int INCREMENTO = 20;
static final Color ROJO = new Color (1.0, 0.0, 0.0);
static final Color AZUL = new Color(0.0, 0.0, 1.0);

/* Método no re-definible en subclases */


final void myMethod(){
...
}
}

Métodos y Clases “final”


• Métodos “final”
• No pueden ser redefinidos
• Métodos “private” son implícitamente “final”
• Métodos “static” son implícitamente “final”

• Clases “final”
• No pueden ser superclases.
• Los métodos en una clase “final” son implícitamente “final”
• Ej: clase String

this y this()
• this, cuando es usada sin parámetros, actúa como un variable de instancia que hace referencia al objeto
mismo. Generalmente usada para distinguir un parámetro formal o una variable local de una variable de instancia
que tiene el mismo nombre.
this.variableName
• Se puede llamar un constructor de una misma clase usando el método this() y enviándole los parámetros
requeridos si los hubiere. Generalmente usado cuando se crea más de un constructor, y no se quiere duplicar el
código en común.

Referencias
• Toda variable en Java es una referencia/puntero (excepto las variables de tipos primitivos).
• Probando Igualdad:
El operador de Igualdad (“==“) retorna true si ambos operandos tienen el mismo valor.
• Funciona bien para los tipos primitivos.
• Solamente compara los valores de las variables referencia, no los objetos referenciados:
Integer i1 = new Integer("3");
Integer i2 = new Integer("3");
Integer i3 = i2;
i1 == i1 && i1 != i2 && i2 == i3

Pasaje de Parámetros
• Pasaje por Valor ⇒ En Java, sólo los parámetros de tipos primitivos son pasados por valor.
• Pasaje por Referencia ⇒ En Java, sólo los objetos son pasados por referencia.
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 7

Finalizador de una Clase


• En Java no existen los destructores de las Clases.
• Existen los finalizadores.
• Redefinir método finalize de clase Object.
⇒ No tiene parámetros
⇒ Retorna void
• Tareas que quiero que se ejecuten al momento de la destrucción del objeto (cuando corra el Garbage
Collector).
• Garbage Collector: thread de baja prioridad. No se puede predecir su ejecución.

Declarando y Creando Arrays


• Los arreglos son objetos que ocupan memoria.
• Son creados dinámicamente con la palabra clave new (como cualquier otro objeto).
int c[] = new int[12];
• Equivalente a :
int c[]; // declara variable arreglo
c = new int[12]; // crea arreglo
• También podemos crear arreglos de objetos.
String b[] = new String[100];
MyClass[] a = new MyClass[4];

Usando Arrays
• Inicializadores de Arrays
• Items encerrados entre llaves ({}), separados por comas
int n[] = {10,20,30,40,50};
Crea un arreglo de 5 elementos
Los índices del arreglo van del 0 al 4.
• En este caso, no necesitamos del new.

Usando Arrays - Pasaje de Parámetros


• En Java, los arreglos son objetos, por lo tanto, son pasados por referencia.
• Para pasar un arreglo como parámetro
Por ejemplo, el arreglo “temperaturaPorHora” es declarado
int temperaturaPorHora = new int[24];
Se llama al método especificando el nombre del arreglo sin corchetes
modifyArray(temperaturaPorHora);
El parámetro formal es declarado sin un tamaño fijo
modifyArray(int arr[]);

Arreglos Multidimensionales
Creación de arrays multidimensionales dinámicamente
Array de 3 por 4 int b[][];
b = new int[ 3 ][ 4 ];
Las Filas pueden tener distintos números de columnas.
int b[][];
b = new int[ 2 ][ ]; // asigna 2 filas
b[ 0 ] = new int[ 5 ]; // asigna fila 0
b[ 1 ] = new int[ 3 ]; // asigna fila 1

Uso de listas de inicializadores


int b[][] = {{1,2},{3,4}}; 1 y 2 inicializan b[0][0] y b[0][1]
3 y 4 inicializan b[1][0] y b[1][1]
int b[][] = {{1,2},{3,4,5}}; fila 0 contiene elementos 1 y 2
fila 1 contiene elementos 3, 4 y 5
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 8

La Clase String
• El operador + está sobrecargado en los Strings para la concatenación.
• Se puede concatenar cualquier cosa a un String. Java automáticamente lo convierte a un String.
• Los tipos primitivos tales como los números son convertidos en forma obvia.
• Los objetos son convertidos llamando a sus métodos toString()
String s = “hello” , t = “world”;
System.out.println(s + 12*100 + 34 + ", " + t); // imprime "hello120034, world"
• La clase Strings cuenta con una gran cantidad de métodos útiles.
String s = "whatever", t = "whatnow";
s.charAt(0); // 'w'
t.substring(4); // "now" (posiciones 4 hasta el final)
t.substring(4,6); // "no" (posiciones 4 y 5, pero no 6)
s.compareTo(t); // un valor menor que cero
t.indexOf('t'); // 3
t.indexOf("now"); // 4
t.lastIndexOf('w'); // 6
t.endsWith("now"); // true y otras mas…

La Clase Integer
Cada tipo numérico tiene su propia clase de objetos. Así el tipo int tiene el objeto Integer.
Clase asociada
java.lang.Integer. Es una clase "final", es decir, no puede heredarse de ella.
Constructores
Integer(int num): crea un objeto Integer en base al entero que se le pasa a su argumento.
Integer(String num): ídem anterior pero pasándole un entero almacenado en forma de String. Si el
argumento no es un número almacenado en una String se lanza una NumberFormatException
Algunos métodos
• static int parseInt(String num): convierte en un entero la cadena de texto que se le pasa al argumento.
Si la cadena no es un número se produce una NumberFormatException.
• static int parseInt(String num, int base): ídem anterior, pero indicando en el segundo argumento el
sistema de numeración (base) en el que se expresa el primer argumento.
• static Integer valueOf(String num): crea un objeto Integer en base a la cadena de texto que se le
pasa. Si la cadena no es un número se produce una NumberFormatException.
• static String toHexString(int num): devuelve una cadena de texto cuyo contenido es el entero
expresado en hexadecimal del entero expresado en decimal que se le pasa al argumento.
• static String toOctalString(int num): ídem, pero ahora el contenido es un entero expresado en octal.
• static String toBinaryString(int num): ídem, pero ahora el contenido es un entero expresado en
binario.
• int intValue(): devuelve el entero asociado al contenido de un objeto Integer. Los métodos anteriores, al
ser estáticos, no precisan de un objeto Integer sobre el que aplicarlos; en cambio, este método sí.

Conversión Implícita
Las reglas de conversión implícita en una operación son las siguientes:
• Los operandos tipo byte y short son convertidos a int
• Si un operando es tipo double entonces los otros operandos pasan a double
• En otro caso, si un operando es tipo float entonces los otros operandos pasan a float
• En otro caso, si un operando es tipo long entonces los otros operandos pasan a long
• En otro caso, los operandos pasan a tipo int
• "" + numero convierte a String

PAQUETES
• Grupo de clases e interfaces relacionadas.
• Ayudan a manejar la complejidad de los componentes de una aplicación.
• Facilitan el reuso de software.
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 9

• Podemos importar paquetes en un programa. La palabra clave import le dice al compilador que queremos
usar ciertas clases de un cierto paquete.
import java.applet.*; //importa todas las clases
public class Hello extends Applet {
. . .
}

Paquetes de la Biblioteca Estándar


• El lenguaje Java es realmente bastante pequeño y simple. Sin embargo, viene con una gran y constantemente
creciente biblioteca de clases. Esas clases se encuentran agrupadas en paquetes.
• Un conjunto de más de 130 paquetes, llamados la API de la Plataforma Java 2 viene junto con el lenguaje.
• Algunos ejemplos de paquetes:
• java.lang contiene la parte escencial del lenguaje, como por ejemplo el soporte para Strings.
• java.io contiene soporte para manejo de entrada/salida.
• java.util contiene algunas estructuras de datos como por ejemplo listas, tablas de hash, etc.
• Podemos crear paquetes
package myPackage;
public class Hello extends java.applet.Applet {
public void init() {
add(new java.awt.Label("Hello World Wide Web!"));
}
} // end class
• y luego usarlo (importarlo)
import myPackage.*;

// in the Graphic.java file


public abstract class Graphic {...}
// in the Circle.java file
public class Circle extends Graphic implements Draggable {...}
// in the Rectangle.java file
public class Rectangle extends Graphic implements Draggable {...}
// in the Draggable.java file
public interface Draggable {...}

Deberíamos agrupar esas clases y la interface en un paquete porque:


• Se puede fácilmente determinar que esos tipos están relacionados.
• Se puede saber dónde encontrar los tipos que proveen funciones relacionadas con gráficos.
• Los nombres de los tipos no entrarán en conflicto con los nombres de tipos de otros paquetes porque el paquete
crea un nuevo espacio de nombres.
• Podemos permitir que los tipos en el paquete tengan accesos irrestrictos entre sí aún cuando hayan accesos
restringidos para aquellos fuera del paquete.

Ambito de una Clase

• Los miembros de la clase (variables y métodos) son accesibles desde todos los métodos de la clase.
• Las variables locales a un método, sólo dentro del método.
• Los miembros pueden ser referenciados desde afuera, dependiendo de los modificadores de acceso:
nombreDeObjeto.nombreDeMiembro

Modificadores de Acceso para variables y


métodos
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 10

Herencia
• Es la posibilidad que tiene una clase de definir su comportamiento y su estado como un superconjunto de otra
clase.

• Relación jerárquica:
superclase-subclase;
padre-hijo;
base-derivada

• En Java todas las clases heredan o extienden otra clase. Si no lo hacen


explícitamente, heredan implícitamente de la clase Object.

• Java soporta solamente herencia simple.

• Herencia múltiple no
soportada.

• Herencia múltiple puede simularse con interfaces (herencia de


comportamiento)

• Subclase hereda estado y comportamiento de la superclase.

• Subclase puede agregar nuevas variables de estado y/o nuevo


comportamiento.

• Subclase puede redefinir miembros heredados.

• Beneficios de herencia:
⇒ Especialización
⇒ Re-uso de código
⇒ Clases abstractas
Ø Definen comportamientos genéricos
Ø Parcialmente definida y parcialmente
implementada
Ø No instanciables.
Ø Siempre superclases.

Ejemplos de Herencia
Superclase Subclases
Estudiante EstudianteGraduado
EstudianteNoGraduado
Figura Círculo
Triángulo
Préstamo PréstamoParaAuto
PréstamoParaVivienda
Mamífero Perro
Hombre
CuentaBancaria CuentaCorriente
CajaDeAhorro

Ejemplo de jerarquía multinivel


U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 11

Herencia – Ejemplo

package mamiferos;
Mamifero
-colorOjo : String public class Mamifero {
-edad : int private String nombre,colorOjo;
-nombre : String private int edad;
+cambiarColor() : void
+cambiarEdad() : void public Mamifero(String unNombre, String unColor,
+cambiarNombre() : void int unaEdad){
+mostrarDatos() : void nombre = unNombre;
colorOjo = unColor;
edad = unaEdad;
}

public void cambiarNombre(String unNombre){


Perro Hombre
nombre = unNombre;
-tieneCola : boolean -estaCasado : boolean }
+tengoCola() : void +estoyCasado() : void
public void cambiarColor(String unColor) {
colorOjo = unColor;
}

public void cambiarEdad(int unaEdad) {


edad = unaEdad;
}

public void mostrarDatos(){


Class cl = getClass();
String n = cl.getName();
System.out.println("Soy un " +
n.substring(n.indexOf(".")+1) +
"\nMi nombre es " + nombre +
"\nMis ojos son de color "+ colorOjo+
"\nTengo " + edad + " años");
}
}

package mamiferos;

public class Perro extends Mamifero {


private boolean tieneCola;

public Perro(String unNombre, String unColor, int unaEdad,


boolean tieneCola) {
super(unNombre, unColor, unaEdad);
this.tieneCola = tieneCola;
}

public void tengoCola(){


if (tieneCola) System.out.println("tengo cola");
else System.out.println("no tengo cola");
}

public void mostrarDatos(){


super.mostrarDatos();
tengoCola();
}
}

package mamiferos;

public class Hombre extends Mamifero {


private boolean estaCasado;

public Hombre(String unNombre, String unColor,


int unaEdad, boolean estaCasado){
super(unNombre, unColor, unaEdad);
this.estaCasado= estaCasado;
}
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 12

public void estoyCasado(){


if (estaCasado) System.out.println("estoy casado");
else System.out.println("no estoy casado");
}

public void mostrarDatos(){


super.mostrarDatos();
estoyCasado();
}
}

package mamiferos;

public class UsaMamiferos {

public static void main(String[] args) {

Mamifero mam = new Mamifero("XX", "negro", 23);


mam.mostrarDatos();
System.out.println();
Perro perro = new Perro("Bruna", "canela", 1, true);
perro.mostrarDatos();
System.out.println();
Hombre h = new Hombre("Juan", "verde", 15, false);
h.mostrarDatos();
}
}

Relaciones entre Objetos en una Jerarquía de Herencia


§ Caso 1: Asignar una referencia a una superclase en una variable de
tipo superclase.
§ Llamadas solo a métodos de la superclase.
§ Llamadas a métodos de subclase => error.

§ Ejemplo:

Mamifero mam = new Mamifero("XYZ","negro",23);


mam.mostrarDatos();
mam.tengoCola(); //error: método indefinido

§ Caso 2: Asignar una referencia a una subclase en una variable de tipo subclase.
Llamadas a métodos de la subclase y de la superclase (si hay redefinición => uso de super.nombreMetodo).

Ejemplo:
Perro perro = new Perro("Bruna", "canela", 1, true);
perro.mostrarDatos(); //llama al método de la subclase
perro.cambiarEdad(2); //llama a un método de la superclase
//dentro de clase Perro
public void mostrarDatos(){
super.mostrarDatos(); //llama al método de la superclase
tengoCola();
}

§ Caso 3: Asignar una referencia a una superclase en una variable de tipo subclase.
Error de compilación, la subclase tiene miembros que no están en la superclase.
Ejemplo:
Perro perro = new Mamifero("XX", "negro", 23); //error
§ Caso 4: Asignar una referencia a una subclase en una variable de tipo superclase.
Llamadas sólo a métodos de superclase.
Si método redefinido en la subclase responde el de la subclase
Llamadas a métodos de subclase => error.
Ejemplo: Mamifero mam = new Perro("Bruna", "canela", 1, true);
// llama al método de la super.y responde el de la subclase
mam.mostrarDatos();
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 13

// llamada a método de la superclase


mam.cambiarEdad(2);
// llamada a método de la subclase
mam.tengoCola(); //error: método indefinido para Mamifero
((Perro)mam).tengoCola(); // cast, valido siempre que mam apunte a un objeto Perro sino
// dará error en tiempo de ejecución

Herencia - Polimorfismo
§ “Programar en general”
§ Nos permite tratar todos los objetos de una jerarquía de clase como si fueran todos superclase, es decir, no
necesitamos conocer el tipo exacto del objeto dentro de la jerarquía.
§ Cualquier operación definida para la superclase puede ser realizada por una subclase.
§ Una referencia a una superclase puede apuntar a objetos de sus subclases (caso 4).
Ejemplos:
§ Rectangulo deriva de Cuadrilatero
- Rectangulo más específico que Cuadrilatero
- Cualquier operación sobre Cuadrilatero puede ser hecha sobre Rectangulo (por ej., perimetro, area)
§ Video game
- Superclase ObjetoDelEspacio
o Subclases Marciano, NaveEspacial, RayoLaser
o Contiene metodo dibujar
- Para refrescar la pantalla
o Enviar mensaje dibujar a cada objeto
o El mismo mensaje tiene “muchas formas” de resultados.
- Fácil de agragar nueva subclase Terricola
o Extender ObjetoDelEspacio
o Proveer su propia implementación para dibujar
o Programador no necesita cambiar el código para refrescar pantalla
o Se llama dibujar sin importar el tipo del objeto.

Clases Abstractas
§ Clases no abstractas
- Pueden ser instanciadas
- Implementan todos los métodos que declaran
- Proveen soluciones específicas
§ Clases Abstractas
- Son superclases
- No pueden ser instanciadas
- Se las declara anteponiendo la palabra clave abstract
abstract class ObjetoDelEspacio
- Incompletas
Tienen uno o más métodos abstractos (sin implementación, deben ser redefinidos por una subclase).
public abstract void dibujar();
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 14

Interfaces
§ Declaran solamente constantes y métodos abstractos.
§ Miembros sin modificadores de acceso.
§ constantes implícitamente públicas, estáticas y finales.
§ métodos implícitamente públicos y abstractos.
§ Pueden extender una o más interfaces.
§ No implementan ningún método. Las clases que las implementan deben implementar sus métodos.
§ Una clase que implementa una interface está de acuerdo con implementar todos los métodos definidos en la
interface, y por lo tanto acuerda tener un cierto comportamiento.
§ Una interface puede ser implementada por una o más clases.
§ Una clase puede implementar múltiples interfaces pero heredar sólo de una clase.
§ Utiles para:
§ capturar similitudes entre clases no relacionadas sin forzar una relación de herencia entre ellas.
§ declarar métodos que una o varias clases necesitan implementar.
§ Modelar herencia múltiple.
Diferencias con una clase abstracta
§ Una interface no puede implementar ningún método, mientras que una clase abstracta sí.
§ Una clase puede implementar muchas interfaces pero puede tener sólo una supercalse.
§ Una interface no es parte de una jerarquía de clases. Clases no relacionadas pueden implementar la misma
interface.
public interface Coleccion {
int MAXIMO = 500;
boolean añadir(Object obj);
boolean borrar(Object obj);
boolean buscar(Object obj);
int tamaño();
}
public class Pila implements Coleccion {
...
// contendrá la implementación de los métodos
// añadir, borrar, buscar y contador
// más los métodos propios de Pila
}
public class Fila implements Coleccion {
...
// contendrá la implementación de los métodos
// añadir, borrar, buscar, contador
// más los métodos propios de Fila
}
§ Cuando definimos una nueva interface estamos definiendo un nuevo tipo. Podemos usar el nombre de la
interface en cualquier lugar que usemos otro nombre de un tipo (por ej. como parámetro de un método).
§ Sólo una instancia de una clase que implemente la interface puede ser asignada a la variable cuyo tipo es la
interface.
¿Cómo escribo en eclipse la aplicación “Hello World”?
1. Iniciar eclipse.
2. Crear un nuevo proyecto Java:
a. File->New->Project.
b. Seleccionar el wizar para "Java" en el árbol.
c. Seleccionar "Java Project" en la lista de proyectos. Pulsar “Next”.
d. Entrar un nombre de proyecto en el campo nombre, por ejemplo “Proyecto Hello World".
e. Pulsar "Finish", la perspectiva Java se abrirá.
3. Crear una nueva clase de Java en el proyecto:
a. Pulsar el botón “New Java Class" en la barra de herramientas.
b. Entrar "HelloWorld" en el campo nombre.
c. Pulsar el checkbox que indica que se quiere que eclipse cree un método "public static void main(String[] args)“.
d. Pulsar "Finish".
4. Se abrirá un editor Java para el archivo HelloWorld.java. Entrar el programa.
5. Grabar usando Ctrl-s. Esto automáticamente compila HelloWorld.java.
6. Pulse el menú "Run" en la barra de menú y elija “Run As...”, luego elija “Java Application”.
7. El programa Hello World se ejecutará. La consola se mostrará “Hello World". Para ver la consola pulse la
lengüeta “Console”.

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