viernes, 1 de julio de 2011

POLIMORFISMO

TEMA 8
- Nuevas consideraciones sobre la generalización
   - Por qué olvidar el tipo de un objeto
- El secreto
   - Acoplamiento de las llamadas a métodos
   - Especificación del comportamiento correcto
   - Ampliabilidad
   - Error: "sustitución" de métodos private
   - Error: campos y métodos static
- Constructores y polimorfismo
   - Orden de las llamadas a los constructores
   - Herencia y limpieza
   - Comportamiento de los métodos polimórficos dentro de 
     los constructores   
- Tipos de retorno covariantes
- Diseño de sistemas con herencia
   - Sustitución y extensión
   - Especialización e información de tipos en tiempo de
     ejecución


"En ocasiones me he preguntado, Sr. Babbage, si introduce en la máquina datos erróneos, ¿podrá suministrar las respuestas correctas? Debo confesar que no soy capaz de comprender qué tipo de confusión de ideas puede hacer que alguien plantee semejante pregunta". Charles Babbage (1791-1871)

El polimorfismo, la abstracción de datos y la herencia son las tres características esenciales de un lenguaje de programación orientado a objetos.

miércoles, 22 de junio de 2011

EJERCICIOS TEMA 7

Por fin tenéis listos los ejercicios del tema 7, son 24, bueno alguno más porque he hecho dos versiones de alguno de ellos. Esta vez no he utilizado Netbeans sino que los he hecho con gedit, el editor de textos de Linux y los he compilado y ejecutado desde la consola. Espero que os sean de utilidad y si tenéis alguna duda o sugerencia, por favor no dudéis en hacerlo. Para ver los ejercicios pinchad en el siguiente enlace:

Ejercicios Tema 7

martes, 7 de junio de 2011

REUTILIZACIÓN DE CLASES

TEMA 7

- Sintaxis de la composición
- Sintaxis de la herencia
   - Inicialización de la clase base
- Delegación
- Combinación de la composición y de la herencia
   - Cómo garantizar una limpieza apropiada
   - Ocultación de nombres
- Cómo elegir entre la composición y la herencia
- protected
- Upcasting (generalización)
   - ¿Por qué "upcasting"?
   - Nueva comparación entre la composición y la herencia
- La palabra clave final
   - Datos final
   - Métodos final
   - Clases final
   - Una advertencia sobre final
- Inicialización y carga de clases
   - Inicialización con herencia


Una de las características más atractivas de Java es la posibilidad de reutilizar el código. Pero para ser verdaderamente revolucionario es necesario ser capaz de hacer mucho más que simplemente copiar el código y modificarlo.

sábado, 14 de mayo de 2011

EJERCICIOS TEMA 6

Aquí tenéis los ejercicios del Tema 6, Control de acceso. Ha sido bastante complicada la realización de los ejercicios, tanto por falta de tiempo, como por algunos problemas con Netbeans y la dificultad de alguno de ellos. Eso sí, vais a aprender mucho haciendo estos ejercicios, tratad de hacerlos sin mirar la solución porque aprenderéis cosas muy útiles.
Podéis descargarlos desde:

Ejercicios Tema 6

Si utilizáis el bloc de notas para realizar los ejercicios, tratáis de compilar los ejercicios descargados y os da un error raro de compilación, guardad el archivo cambiando la codificación de caracteres, es una opción que os sale en Archivo - Guardar como.
Por favor, si tenéis alguna sugerencia o no estáis de acuerdo con la resolución de alguno de los ejercicios no dudéis en comentarlo.
Un saludo.

miércoles, 4 de mayo de 2011

IMPORTACIÓN ESTÁTICA DE MIEMBROS

El ejercicio 3 dice:

Cree dos paquetes: debug y debugoff, que contengan una clase idéntica con un metodo debug(). La primera versión debe mostrar su argumento String en la consola, mientras que la segunda no debe hacer nada. Utilice una linea static import para importar la clase en un programa de prueba y demuestre el efecto de la compilacion condicional.

Como vemos, el ejercicio pide que se utilicen importaciones estáticas, vamos a explicar un poco qué es esto. En Java, tenemos una clase Math, con varias constantes y métodos estáticos. Por ejemplo, tenemos la constante PI:
   public static final double PI = 3.14159265358979323846;

La palabra final significa que este valor es constante y no varía. Al ser esta constante estática, para referirnos a ella desde cualquier otra clase sin necesidad de importar la clase Math, tendríamos que escribir:
   System.out.println("Numero PI: "+Math.PI);

Como vemos hay que utilizar el nombre de la clase para referirnos a la constante. Hay una forma de evitar esto, podemos importar la variable:
   import static java.lang.Math.PI;

jueves, 28 de abril de 2011

CLASSPATH Y PACKAGE EN NETBEANS

Vamos a ver cómo he hecho el ejercicio 1 del Tema 6 con Netbeans. El enunciado del ejercicio dice:

Crea una clase dentro de un paquete. Crea una instancia de esa clase fuera de dicho paquete.
En primer lugar vamos a crear un proyecto nuevo, como estamos en el Tema 6 lo voy a llamar Tema_6:



CLASSPATH Y PACKAGE EN LINUX Y WINDOWS

Para explicaros de una forma sencilla la variable CLASSPATH y la creación de paquetes, vamos a hacer el ejercicio 1 de este tema con el jdk a través de la consola o terminal. El ejercicio 1 dice:

Cree una clase dentro de un paquete. Cree una instancia de esta clase fuera de dicho paquete.

Voy a crear dos clases, la clase Ejer_1 es la que se va a ejecutar y, por tanto, va a contener el método main. Esta clase la voy a crear en la carpeta:

/home/arween/Documentos/Java/PiensaEnJava/EjerciciosPiensaEnJava4/Tema_6
El código de esta clase es:
// Clase Ejer_1.java
import tema6.*;

public class Ejer_1{

   public static void main(String args[]){       
      Lib1 lib1=new Lib1();
   }
   
}