Você está na página 1de 9

Introducción a la Programación – IPF1501 Unidad I – Clase Nº 1

DuocUC

¿Qué es Java?

No es solo un lenguaje de programación, si no que una “PLATAFORMA” para el


desarrollo de aplicaciones.
Es completamente orientado a objetos (OO). Usa una sintaxis conocida, tomando
sus estructuras sintácticas del lenguaje C++, además, omite algunos conceptos
complejos de programación como el manejo de memoria a bajo nivel (Punteros),
eliminando de raíz la fuente de muchos problemas en las aplicaciones, problemas
casi siempre de un muy alto costo de corrección debido a su complejidad.

La plataforma Java se compone de los siguientes elementos:

- Un lenguaje de programación orientado a objetos (POO). Su sintaxis es


similar a la de C++.
- Un ambiente de desarrollo capaz de transformar un programa en lenguaje
Java en un programa en código Java denominado Java Byte Code. El Byte
Code no corresponde al lenguaje de una máquina en particular, sino que a
un código intermedio independiente de la plataforma en la que se ejecutará
la aplicación (JDK, refiérase Arquitectura Java).
- Un ambiente de ejecución, al que se le denomina Maquina Virtual de Java o
Java Virtual Machine (JVM). En esencia la aplicación corre sobre la JVM y es
esta es la que se preocupa que conversar con el SO correspondiente. Es la
encargada de implementar las bibliotecas estándares o librerías (JRE,
refiérase Arquitectura Java).

La plataforma de Java otorga un ambiente de desarrollo multiplataforma, gracias a


la JVM, en el que las aplicaciones se escriben y prueban en una única máquina,
para luego migrarlas o transportarlas, sin necesidad de modificaciones, entre
distintos SO (Write once, run anywhere).

La simplicidad de Java

Java es un lenguaje moderno completamente OO, lo que permite a los


programadores hacer un uso en forma natural de las nuevas técnicas de análisis y
diseño de aplicaciones. Utilizando la experiencia aprendida de sus predecesores (C
y C++) Java ha eliminado las complejidades que constituyen un riesgo para el
desarrollo de aplicaciones.
- Java no posee aritmética de punteros, práctica que constituye el origen de
muchos errores de programación, además de ser muy difíciles de detectar y
corregir.
- Java posee un recolector de basura o Garbage Collector (GC), perteneciente
a la JVM, que tiene la responsabilidad de liberar la memoria reservada por
nuestras aplicaciones que ya no se esté utilizando.
- Java puede ser utilizado tanto en celulares, electrodomésticos como en
Internet (Web).
- Permite la realización de programas más grandes y complejos, con equipos
de trabajo más pequeños y en menos tiempo (No muy cercano a la realidad).

Autor: Prof. Iván Páez Mora 1 Marzo 2008


Introducción a la Programación – IPF1501 Unidad I – Clase Nº 1
DuocUC

Tipos de Java

J2SE/JSE – Java Standard Edition, orientado al desarrollo de aplicaciones de


escritorio (similares a VB) y, lo más importante, se utiliza en la creación de librería
para ser utilizadas en los distintos tipos de Java.

J2EE/JEE – Java Enterprise Edition, como su nombre lo dice está orientado al


desarrollo de sistemas empresariales, consta de una serie de normas que
determinan patrones y comportamientos, orientado fuertemente a aplicaciones
Web. Es en este tipo donde aparecen elementos como JSP, Servlet, Applet, EJB,
entre otros.

J2ME/JME – Java Micro Edition, orientado al desarrollo de aplicaciones en


dispositivos móviles como celulares, GPS, PALM, PocketPC, etc.

Autor: Prof. Iván Páez Mora 2 Marzo 2008


Introducción a la Programación – IPF1501 Unidad I – Clase Nº 1
DuocUC

Historia

Línea de tiempo
(Fuente: PC Magazine, vol. 17, No. 7, 7 Abril de 1998).

Enero 1991
Java nace como Oak, con el objetivo de permitir el desarrollo de aplicaciones para
electrodomésticos. Uno de los personajes más relevantes del “Green Team” es
James Gosling.

Marzo 1993
SUN enfoca Oak hacia un proyecto de televisión interactiva de la Time Warner.
Silicon Graphics se gana la propuesta.

Agosto 1994
Se desecha el proyecto, y se pierde la propuesta.

Julio 1994
Sun orienta el potencial de Oak hacia Internet, donde se requiere correr
aplicaciones en estaciones en las que no se tiene el control sobre su configuración,
apuntando la tecnología hacia su actual funcionalidad.

Mayo 1995
Java es oficialmente presentado en la Sun World 1995. Netscape es la primera
empresa en adherirse al ambiente Java. Sun libera una versión alfa de su
navegador de Internet llamado Hot Java.

Diciembre 1995
Symantec libera el primer ambiente de desarrollo Java para Windows 95 y Windows
NT, llamado Symantec Café, el que tiene un éxito inmediato.

Enero 1996
Sun forma JavaSoft, para el desarrollo de productos basados en Java y para
trabajar con otros desarrolladores.

Enero 1996
Sun libera el ambiente de desarrollo Java 1.0 (JDK 1.0). Incluye el Java Applet
View, el compilador de Java y la primera JVM (JRE).

Febrero 1997
Sun libera JDK 1.1, que incluye la especificación para Java Beans.

Abril 1997
Sun anuncia Personal Java orientado a desarrollar aplicaciones en dispositivos del
hogar y oficina.

¡JAVA HA VUELTO A SU ORIGEN!

Autor: Prof. Iván Páez Mora 3 Marzo 2008


Introducción a la Programación – IPF1501 Unidad I – Clase Nº 1
DuocUC

Arquitectura

La arquitectura de Java consta de dos grandes piezas conocidas bajo las siglas JDK
(Java Development Enviroment) y JRE (Java Runtime Enviroment), quienes tienen
distintas responsabilidades a la hora de compilar y ejecutar un programa Java.

JDK
Es el encargado de proveer las herramientas necesarias para llevar a cabo la
COMPILACIÓN (Archivo.java) del código fuente Java y transformarlo en Byte Code
(Archivo.class).
Algunos incluyen otras piezas tales como editores de texto sensible y herramientas
de debug (Depuración, búsqueda de errores), estos ambientes reciben el nombre
de IDE (Integrated Development Enviroment), en este curso utilizaremos BlueJ.

JRE
Es el ambiente que provee las herramientas necesarias para llevar a cabo la
EJECUCIÓN de un Byte Code. Es donde se encuentra la JVM, además de un módulo
conocido como Cargador de Clases y un Intérprete de Java.

Programa Cargador de
Fuente en clases
Java (.java)

Intérprete de
Compilador de Java
Java (JDK)

JDK JRE

JVM
Programa
Compilado en
Java Byte
Sistema Operativo
Code (.class) (SO)

Autor: Prof. Iván Páez Mora 4 Marzo 2008


Introducción a la Programación – IPF1501 Unidad I – Clase Nº 1
DuocUC

Programación Orientada a Objetos

La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un


paradigma de programación que usa objetos y sus interacciones para diseñar
aplicaciones y programas computacionales. Está basado en varias técnicas,
incluyendo herencia, abstracción, polimorfismo, y encapsulamiento. Su uso se
popularizó a principios de la década de 1990. Actualmente son muchos los
lenguajes de programación que soportan la orientación a objetos entre ellos Java.

Conceptos

Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya


conocidos. Entre ellos destacan los siguientes:

Objeto: Entidad provista de un conjunto de propiedades o atributos y de


comportamiento o funcionalidad conocidos como métodos. Corresponden a los
objetos reales del mundo que nos rodea, o a objetos internos del sistema o
programa. Corresponde a una instancia de una clase.

Clase: Definiciones de las propiedades y comportamientos de un tipo de objeto


concreto. La instanciación es la lectura de estas definiciones y la creación de un
objeto a partir de ellas.

Propiedad o atributo: Contenedor de un tipo de datos asociados a un objeto (o a


una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se
define como sus características predeterminadas, y cuyo valor puede ser alterado
por la ejecución de algún método.

Método: Algoritmo asociado a un objeto (que se define en las clases), cuya


ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de
vista del comportamiento, es lo que el objeto puede hacer. Un método puede
producir un cambio en las propiedades del objeto, o la generación de un "evento"
con un nuevo mensaje para otro objeto del sistema.

Evento: Un suceso en el sistema (tal como una interacción del usuario con la
máquina, o un mensaje enviado por un objeto). El sistema maneja el evento
enviando el mensaje adecuado al objeto pertinente. También se puede definir como
evento, a la reacción que puede desencadenar un objeto, es decir la acción que
genera.

Mensaje: Una comunicación dirigida a un objeto, que le ordena que ejecute uno de
sus métodos con ciertos parámetros asociados al evento que lo generó.

Estado interno: Es una propiedad invisible de los objetos, que puede ser
únicamente accedida y alterada por un método del objeto, y que se utiliza para
indicar distintas situaciones posibles para el objeto (o clase de objetos).

Autor: Prof. Iván Páez Mora 5 Marzo 2008


Introducción a la Programación – IPF1501 Unidad I – Clase Nº 1
DuocUC

Características

Hay un cierto desacuerdo sobre exactamente qué características de un método de


programación o lenguaje le definen como "orientado a objetos", pero hay un
consenso general en que las características siguientes son las más importantes:

Abstracción: Es el proceso de generalización o agrupamiento de objetos, es decir,


es el proceso en el cual se intenta mirar el modelo de objetos desde un nivel más
alto buscando un objeto que contenga de forma generalizada a otros.
Por ejemplo, imaginemos que estamos en casa sentados viendo TV de pronto
nuestra atención se centra en nuestros perros (para este caso de nombre Pillin y
Camila), vamos a aplicar el concepto de abstracción e intentemos llevar a Pillin y
Camila a un diagrama OO.
Pillin y Camila son objetos (tienen características distintas, como color, tamaño,
etc.) si quisiéramos representar a Pillin y Camila en un nivel más abstracto
deberíamos decir que son de la clase Perro, ahora si queremos subir un nivel de
abstracción más podríamos decir que la clase Perro y la clase Gato (que es una
abstracción de las mascotas de mi vecino llamados Luna y Estrella) corresponden a
la clase Mamífero y si quisiéramos generalizar aún más subiendo otro nivel de
abstracción podríamos decir que la clase Mamífero extiende (extends) de la clase
Animal.

El diagrama quedaría así:

Animal
Nivel Abstracción: 3

Reptil Mamífero Ave


Nivel Abstracción: 2

Perro Gato
Nivel Abstracción: 1

Nivel Abstracción: 0 Pillin Camila Luna Estrella

Autor: Prof. Iván Páez Mora 6 Marzo 2008


Introducción a la Programación – IPF1501 Unidad I – Clase Nº 1
DuocUC

Herencia: Como en la vida real, la herencia es el legado o cualidad que nos dejan
nuestros antecesores o personas mayores (en la mayoría de los casos), en Java
sufre una leve modificación y se dice que es el mecanismo en el cual “un Padre
hereda (extends) cualidades a un Hijo” y esas cualidades son nada más que
atributos o métodos, en otras palabras código Java, por esta razón la herencia se
utiliza para ordenar nuestro esquema de clases y para la reutilización de código.
Por ejemplo recordemos el esquema anterior basándonos en la herencia y se podría
traducir de la siguiente manera:

La clase Perro extiende de la clase Mamífero, quien a su vez extiende de la clase


Animal.

Eso quiere decir que todas los atributos y métodos que tiene implementada la clase
Animal se encuentran, también, en la clase Mamífero y que a su vez todas las
propiedades y métodos de la clase Mamífero se encuentran en la clase Perro.

¿La clase Perro posee atributos y métodos de la clase Animal?


R: Si, al hacer herencia se heredan todos los atributos y métodos inclusive los ya
heredados anteriormente.

La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a


los objetos ser definidos y creados como tipos especializados de objetos
preexistentes.

Autor: Prof. Iván Páez Mora 7 Marzo 2008


Introducción a la Programación – IPF1501 Unidad I – Clase Nº 1
DuocUC

Encapsulamiento: Es el término utilizado en la POO que describe la acción en la


cual se definen métodos y propiedades (como definición, no sus valores) especificas
de una clase, que las caracteriza en el mundo real. Está íntimamente relacionada
con el Principio de ocultación de información, definiendo que partes estarán ocultas
y cuales visibles.
Por ejemplo, tenemos la clase Ampolleta y vamos a aplicar la encapsulación para
poder definir su estructura de clase (definir atributos y propiedades, y sus
respectivas visibilidades):

Atributos o valores IMPORTANTES de una Ampolleta

- Estado (si esta encendida o apagada) (Privado)

Métodos IMPORTANTES de una Ampolleta

- Encender (Público)
- Apagar (Público)
- Energizar la ampolleta (Privado)
- Desenergizar la ampolleta (Privado)

En relación a la visibilidad de los atributos, recordemos que los atributos son


variables que contienen datos o valores y en Java SIEMPRE los datos son privados.
A menos que explícitamente te definan lo contrario, el manejo de los valores de los
atributos de Java SIEMPRE debe ser a través de métodos de la clase y nunca
directamente utilizando los atributos.
Ahora, en los métodos encontramos algunos públicos y otros privados y esto
depende del aislamiento que se quiera tener en los sistemas, solo los métodos
públicos podrán ser accesados desde otros objetos, mientras que los métodos
privados solo se podrán invocar desde la misma clase.
En este caso se declararon dos métodos públicos que corresponde al conocimiento
natural de las acciones que realiza una ampolleta Encender y Apagar estos pueden
ser invocados desde otros objetos de nuestra aplicación, quienes a su vez (y de
forma interna, en la misma clase) invocan a los métodos privados Energizar y
Desenergizar.

Autor: Prof. Iván Páez Mora 8 Marzo 2008


Introducción a la Programación – IPF1501 Unidad I – Clase Nº 1
DuocUC

Polimorfismo: Se dice que dos objetos son polimórficos cuando poseen una
interfaz común (generalmente una clase abstracta) pero que al momento de
heredar y sobrescribir los métodos tienen un comportamiento distinto.
Este término es el más complicado de entender y generalmente se le da menos
importancia, pero es uno de los más poderosos ya que permite tener una alta
cohesión y un bajo acoplamiento de los modelos de clases.
Por ejemplo, tenemos una clase abstracta llama Figura que tiene un método
implementado llamado Dibujar Contorno, de esta clase extienden dos llamadas
Triangulo y Cuadrado en ambas se sobrescribe el método de la clase padre y se
implementa el necesario para cumplir con el objetivo: Dibujar la figura
correspondiente. A simple vista nos damos cuenta que ambas clases son
polifórmicas ya que ambas heredan de la clase Figura, ambas sobrescribieron el
método Dibujar Contorno y al llamar al mismo método pero en clases distintas
producen resultado completamente distintos (en este caso un triángulo y un
cuadrado respectivamente).

Cohesión: Que todas las clases tengan un fin en común y lógico, por ejemplo en
una clase Auto se debería implementar atributos y métodos que me permitan
acelerar, frenar, doblar (Izq. y Der.) y NO que se preocupe de los datos
pertenecientes al seguro. Un buen diseño siempre busca mantener una ALTA
COHERSIÓN.

Acoplamiento: Es la interdependencia que existe entre clases, esto ocurre


normalmente cuando una clase necesita saber demasiados detalles internos de otra
clase para su buen funcionamiento, es decir rompe con el esquema del
encapsulamiento y produce que la mantención del sistema sea tediosa y complicada
(no es el principio de Java). En un buen diseño mientras más BAJO ACOPLAMIENTO
mejor.

Principio de ocultación: Cada objeto está aislado del exterior, es un módulo


natural, y cada tipo de objeto expone una interfaz a otros objetos que específica
cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las
propiedades de un objeto contra su modificación por quien no tenga derecho a
acceder a ellas, solamente los propios métodos internos del objeto pueden acceder
a su estado. Esto asegura que otros objetos no pueden cambiar el estado interno
de un objeto de maneras inesperadas, eliminando efectos secundarios e
interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso
directo a los datos internos del objeto de una manera controlada y limitando el
grado de abstracción. La aplicación entera se reduce a un agregado o
rompecabezas de objetos.

Autor: Prof. Iván Páez Mora 9 Marzo 2008

Você também pode gostar