Java
Introducción
    Principales razones de su éxito:
  1. Es totalmente Orientado al Objeto
  2. Es independiente de la plataforma
  3. Sus capacidades para desarrollar programas distribuidos
La programación orientada al objeto (OOP) hace que los programas seam más fáciles de construir, modificar, y reusar. Ojo no es para tanto! Se pueden escribir programas FORTRAN en cualquier lenguaje de programación.

La independencia de la plataforma: Una vez compilados, los programas Java producen código byte Java (Java bytecode ) que corre en cualquier computador con interprete Java o una Máquina Virtual Java (JVM).
Algunos proveedores incluyen compilación "justo a tiempo" (just-in-time compilation) del código byte en código nativo de máquina. Así se incrementa la velocidad de ejecución.

Componentes de Java

  1. Lenguaje de programación Java: OOP, clases para manejo de I/O, strings, Multi hilos, soporte para programación de interfaces gráficas, y manejo de excepciones.
  2. Compilador Java: Transforma programas Java en código byte (bytecode).
  3. Máquina Virtual Java: Interpreta y ejecuta código byte.
  4. Clase Java Applet: Facilita la creación de applets.
  5. Visualizador Applet: Prueba y muestra Java applets.
  6. Generador de documentación Java: Produce automáticamente, desde código fuente Java, documentación de las APIs en formato HTML.
  7. JAR (Java Archive): Empaqueta y desempaqueta archivos para fácil y eficiente tranferencia a través de una red.
  8. RMI (Remote Method Invocation) Permite el acceso a objetos Java residentes en un computador remoto a través de la red.
  9. JNI (Java Native Interface) Provee una forma de mezclar programas Java con código C y C++.
  10. Otros ....
Qué es OOP?

La idea central es construir programas usando objetos de software. Un objeto es una entidad autocontenida con su propios datos y  programación propia. Ej. menu, ventana, carpeta de archivos. También: un registro de cuenta de agua, cuenta bancaria, motor de un auto.
"Cada programa es en realidad una simulación de alguna parte del mundo real"

Un lenguage es OOPL si:

Los objetos poseen datos (mienbros datos del objeto ) que describen el estado del objeto y código (miembros de función también llamados métodos o mensajes) que gobierna cómo el objeto trabaja internamente y cómo interactúa con los otros objetos.

¿Qué es un Objeto?
Un objeto se caracteriza por:

  1. Una Identidad: Propiedad que lo distingue de otros. Ej: nombres Eduardo, x,y; referencias este, ese, *p.
  2. Un estado: los atributos de un objeto y su valor actual.

  3. Ej: struct book {
            string titulo;
            Autor autor;
            ISBN isbn;
            int edicion;
            int year;
            Publisher editorial;
        };
    Tiene estado?
  4. Comportamiento: es cómo el objeto actúa y reacciona ante operaciones sobre él. Éste es descrito en términos de mensajes y métodos.

  5. Objetos diferentes pueden responder al mismo mensaje con diferentes métodos. Ej.Yo envío del mensaje  "Envíe flores a mi madre" a un florista, mi esposa, una secretaria.
¿Qué es una Clase?
Todos los objetos son instancias de una clase. Clases y objetos son familiares a conceptos de programación tradicionales
 
OOPL Lenguages tradicionales
objeto
identidad
estado
clase
mensaje
método
enviar un mensaje
variable, constante
nombre, dirección,
valor
tipo
declaración de función
cuerpo de la función
invocación de función

Clases versus tipos
    En lenguajes de programación tradicionales cada variabe (objeto) es una instancia de exactamente un tipo (clase). En OOPL, cada objeto (variable) puede ser una instancia de varias clases (tipos) relacionadas.
    Éste ocurre porque las clases pueden estar relacionadas vía herencia. La herencia captura una relación del tipo "es un".

Ejemplo Programa Java simple:

///////    Lowercase.java    ///////
import java.io.*;    // Use java.io package

// basic ASCII character I/O

class Lowercase
{
    public static void main(String[] args)
        throws IOException
    {  int i;
       while ( (i = System.in.read()) != -1 )  // input char
       {    i = Character.toLowerCase( (char) i);
            System.out.write(i);
       }
    }
}
 

Material Java