Este documento presenta una introducción a la programación orientada a objetos y al lenguaje Java. Se discuten los conceptos clave de la programación orientada a objetos, las ventajas del paradigma OO, y las características principales del lenguaje Java como su compilación a bytecode, máquinas virtuales Java, y entornos de desarrollo. También se presenta un primer programa "Hola Mundo" en Java como ejemplo.
2. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Tema 1: Introducción a la OOP y el lenguaje Java
1. Programación orientada a objetos
2. El lenguaje Java
3. Compilación, bytecode y JVMs
4. Entornos de desarrollo Java
5. Java vs otros lenguajes OO
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 2 Diciembre, 2010
3. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Programación orientada a objetos
•Aparece a finales de los 60, pero es a principios de los 80 cuando con el lenguaje
Smalltalk comienza un interés claro hacia este paradigma.
•La programación orientada a objetos es el paradigma de programación y análisis y
diseño de aplicaciones claramente dominante en la actualidad.
•Hoy prácticamente no se concibe un lenguaje de programación sin características
de orientación a objetos: Eiffel, C++, Java, C#, etc.
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 3 Diciembre, 2010
4. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Programación orientada a objetos
Las ventajas del paradigma OO son múltiples:
•Es intuitiva, describe un problema en términos similares a los que utiliza la mente
humana.
•Permite construir soluciones más seguras y con un mantenimiento más sencillo.
•Fomenta la reutilización y el trabajo en equipo. Escalabilidad de las aplicaciones.
Las características principales del paradigma OO:
•Incorpora los conceptos de abstracción, ocultación de información y encapsulación
heredados de los tipos de datos abstractos.
•Incorpora mecanismos específicos y extremadamente poderosos como son la
•herencia, el polimorfismo y la ligadura dinámica
•Admite de manera muy natural en algunos lenguajes el soporte de genericidad
(patrones) y la definición de operadores. No soportados por Java.
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 4 Diciembre, 2010
5. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Programación orientada a objetos
El desarrollo siguiendo el enfoque orientado a objetos es un proceso integral que
incluye métodos específicos de análisis y diseño, notación gráfica (UML) y lenguajes
de programación orientados a objetos.
Las soluciones obtenidas durante la fase de análisis y diseño no son específicas
para ningún lenguaje de programación orientado a objetos
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 5 Diciembre, 2010
6. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
El Lenguaje Java
Desarrollado en los laboratorios de Sun, es uno de los lenguajes de programación
orientado a objetos que mayor repercusión ha tenido en los últimos años.
•Basado en C++ pero simplificado, mucho más fácil de usar, de más alto nivel y
menos propenso a errores.
•Amplísima biblioteca estándar de clases predefinidas.
•Las aplicaciones Java pueden ser ejecutadas indistintamente en cualquier
plataforma sin necesidad de recompilación.
•Amplio espectro: programación tradicional, distribuida, GUI, Web, dispositivos
móviles, etc.
•Gestión avanzada de memoria mediante el uso de un recolector de basura.
•Gestión avanzada de errores, tanto en tiempo de compilación como de ejecución.
•Soporte sencillo de múltiples hebras de ejecución.
•Pueden integrarse módulos escritos en C/C++.
•Lenguaje abierto. Kits de desarrollo y documentación gratuitos en la red
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 6 Diciembre, 2010
7. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
El Lenguaje Java
Existen distintas “ediciones” de Java para el desarrollo de aplicaciones en distintos
ámbitos:
•Aplicaciones de propósito general (J2SE)
•Aplicaciones de gestión en entornos empresariales (J2EE)
•Aplicaciones para teléfonos móviles, PDAs y otros dispositivos electrónicos que
permitan aplicaciones empotradas (J2ME)
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 7 Diciembre, 2010
8. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
El Lenguaje Java
Existen dos kits diferentes que pueden ser descargados de la página oficial de Sun:
•El Java Development Kit (JDK) permite desarrollar y ejecutar aplicaciones Java
•El Java Runtime Environment (JRE) permite únicamente la ejecución
J2SE incluye bibliotecas muy extensas y completas, que permiten la implementación
de casi cualquier tipo de aplicación:
•Seguridad •Interfaz de usuario (AWT, SWING)
•EEDDs •Gráficos 2D
•Componentes (JavaBeans) •Manipulación, carga y descarga de
•Internacionalización imágenes
•E/S •Impresión
•XML •Acceso a bases de datos (JDBC)
•Redes y acceso a Internet •Gestión de preferencias y
•Programación distribuida (RMI, CORBA) configuraciones
•Matemática de precisión arbitraria
•Sonido
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 8 Diciembre, 2010
9. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Compilación, bytecode y JVMs
Java sigue un esquema no tradicional de compilación/ejecución:
•La compilación genera un ejecutable en bytecode o código intermedio
independiente.
•Para su ejecución se requiere un JRE específico de la plataforma. El JRE está
formado por una máquina virtual java (JVM) y las librerías de clases.
•La JVM interpreta el bytecode o realiza su compilación just-in-time para que su
•ejecución sea más eficiente
Java
Ventas.java
(windows)
class Ventas{
… Ventas.class
} Java
(linux)
Compilación Usuario.class
class Usuario{ Java
Archivos de clases en
… Bytecode o código (Sun OS)
} Código Fuente intermedio Ejecución Interpretada con MV especifica
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 9 Diciembre, 2010
10. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Compilación, bytecode y JVMs
Ventajas de este sistema:
•Se compila la aplicación una única vez y los ejecutables en bytecode obtenidos son
válidos para cualquier plataforma. El código fuente queda a salvo.
•Es muy robusto. La máquina virtual Java es capaz de detectar y notificar gran
cantidad de errores durante la ejecución de la aplicación (como accesos a elementos
fuera de un vector)
•El recolector de basura no ocupa espacio en el ejecutable, ya que viene integrado
en la JVM
•Los ejecutables son pequeños porque las librerías de clases vienen proporcionadas
junto a la JVM en el JRE de la plataforma concreta
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 10 Diciembre, 2010
11. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Compilación, bytecode y JVMs
Inconvenientes:
•Velocidad. Evidentemente la interpretación o incluso compilación just-in-time del
bytecode produce aplicaciones más lentas que en el caso de la ejecución directa de
un binario. El recolector de basura puede suponer una sobrecarga adicional al
procesador.
•La generalidad tiene como inconveniente que no se aprovecha totalmente la
potencia de la máquina y del sistema operativo. Por ejemplo, el aspecto de una
aplicación Java puede resultar simple y poco atractivo en comparación con las
aplicaciones nativas
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 11 Diciembre, 2010
12. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Entornos de Desarrollo Java
•JDK. El kit de desarrollo básico proporcionado por Sun. Es lo mínimo que se necesita
para desarrollar. Útil si se necesita compilar aplicaciones Java de manera esporádica
o en general para programadores con espíritu “espartano”. Puede bajarse
gratuitamente para cualquier plataforma de java.sun.com
•NetBeans. El IDE Java más popular, realizado íntegramente en Java (y por tanto
multiplataforma). Consume bastantes recursos. Tiene una arquitectura extensible
con módulos específicos para desarrollo web, aplicaciones móviles, diseño UML, etc.
Puede obtenerse gratuitamente de www.netbeans.org
•Eclipse. Junto a netBeans, el entorno de desarrollo Java gratuito más utilizado.
También permite el desarrollo en C++ y otros lenguajes de programación. Puede
descargarse en www.eclipse.org
•Borland JBuilder. Excelente entorno integrado de desarrollo Java de Borland.
Existen versiones limitadas que pueden bajarse de www.borland.com
•Microsoft Visual J++. Uno de los más populares, aunque las aplicaciones obtenidas
pueden presentar problemas de compatibilidad con el SDK oficial de Java.
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 12 Diciembre, 2010
13. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
El primer programa Hola.java
Es de consenso que el entorno JDK no es el más adecuado para el desarrollo de
aplicaciones Java, debido a funcionar única y exclusivamente mediante comandos de
consola, ya que hoy en día la programación se suele ayudar de entornos visuales, como
JBuilder, JCreator o muchos otros, que facilitan enormemente la tarea.
Sin embargo, puede ser un entorno bastante útil para aprender el lenguaje, ya que
aunque los entornos visuales nos hagan mucho trabajo siempre es necesario ir al
código para modificarlo y obtener el comportamiento deseado, lo cual quiere decir que
necesitamos dominar el lenguaje y es más fácil llegar a este dominio escribiendo
códigos completos en un entorno “hostil” que no nos ayuda, que simplemente
remodelando códigos ya generados por entornos visuales.
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 13 Diciembre, 2010
14. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
El primer programa Hola.java
/**
* @fileName Hola.java
* @author Oscar Roa
*/
class Hola{
public static void main(String args[]){
System.out.println(“Hola Mundo desde Java!”);
}
}
Para compilar el ejemplo:
Javac. Es el comando compilador de Java. Su sintaxis es:
#javac Hola.java
La entrada de este comando ha de ser necesariamente un fichero que contenga
código escrito en lenguaje Java y con extensión .java. El comando nos creará un
fichero .class por cada clase que contenga el fichero Java. Los ficheros .class
contienen código bytecode, el código que es interpretado por la máquina virtual Java.
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 14 Diciembre, 2010
15. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
El primer programa Hola.java
Para ejecutar el ejemplo:
Java. Es el intérprete de Java. Permite ejecutar aplicaciones que previamente hayan
sido compiladas y transformadas en ficheros .class. Su sintaxis es:
#java Hola
No es necesario aquí suministrar la extensión del fichero, ya que siempre ha de ser
un fichero .class
Algunos Ejercicios de practica.
•Calcular la suma de 2 números.
•Calcular el Área de un circulo.
•Calcular la suma de n números.
•Calcular la suma de n números impares.
•Calcular el factorial de un numero dado.
•Obtener el código Ascii.
•Calcular la seria Fibonnaci.
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 15 Diciembre, 2010
16. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Tema 2: Programación Orientada a Objetos en Java
1. Introducción 15. Herencia múltiple
2. Clases de objetos 16. Polimorfismo
3. Protección de miembros 17. Ligadura dinámica
4. Protección de clases 18. Información de clases en tiempo de
5. Inicialización y finalización ejecución
6. Creación de objetos 19. Otros temas de interés en Java
7. Trabajando con objetos
8. Relaciones entre objetos
9. Clases anidadas e interiores
10. Autoreferencias
11. Aplicaciones orientadas a objetos
12. Herencia
13. Adición, redefinición y anulación
14. Protección y herencia
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 16 Diciembre, 2010
17. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Clases
Las clases de objetos representan conceptos o entidades significativos en un
problema determinado.
Una clase describe las características comunes de un conjunto de objetos,
mediante dos elementos:
Atributos (o variables miembro, variables de clase). Describen el estado
interno de cada objeto
Operaciones (o métodos, funciones miembro). Describen lo que se
puede hacer con el objeto, los servicios que proporciona
Nombre de la Clase
Cuenta
número: String
Atributos titular: String
saldo: Float
interesAnual: Float
ingreso(cantidad: Floatl)
Operaciones
reintegro(cantidad: Floatl)
ingresoInteresMes()
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 17 Diciembre, 2010
18. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Clases
●Durante la ejecución de la aplicación se producirá la instanciación de la clase, es
decir, la creación de los objetos que representan cada uno de los individuos con sus
características propias, es decir, valores específicos para sus atributos.
a : Cuenta
Cuenta número = “00982”
titular = “Luis Cruz”
número: String Saldo = 2500.00
interesAnual = 0.23
titular: String
saldo: Float
interesAnual: Float
ingreso(cantidad: Floatl) número = “00922”
Objetos titular = “Maria ”
reintegro(cantidad: Floatl) Saldo = 1500.00
ingresoInteresMes() interesAnual = 1.23
Clase número = “0282”
titular = “Oscar”
Saldo = 12500.00
c : Cuenta interesAnual = 0.02 b: Cuenta
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 18 Diciembre, 2010
19. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Clases
La implementación de esta clase en Java se realizaría en un fichero con nombre
Cuenta.java, y su contenido sería el siguiente:
class Cuenta {
long numero;
String titular;
float saldo;
float interesAnual;
void ingreso(float cantidad) { }
void reintegro(float cantidad) { }
void ingresoInteresMes() { }
boolean enRojos() { }
float leerSaldo() { }
}
Los atributos pueden ser de cualquiera de los tipos básicos de Java:
boolean, char, byte, short, int, long, float y double, referencias a otros objetos o
arrays de elementos de alguno de los tipos citados:
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 19 Diciembre, 2010
20. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Clases
Al contrario que C++, Java realiza la definición e implementación de la clase en el
mismo lugar, en un único fichero .java
class Cuenta {
long numero;
String titular;
float saldo;
float interesAnual;
void ingreso(float cantidad) {
saldo += cantidad;
}
void reintegro(float cantidad) {
saldo = cantidad;
}
void ingresoInteresMes() {
saldo += interesAnual * saldo / 1200;
}
boolean enRojos() { return saldo < 0; }
float leerSaldo() { return saldo; }
}
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 20 Diciembre, 2010
21. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Clases
El acceso a los atributos de la clase desde la implementación de las operaciones se
realiza de forma directa.
Los atributos u operaciones estáticas (static) no son afectados por el proceso de
instanciación de objetos a partir de la clase.
De un atributo estático no se genera una copia por cada objeto que se crea. Existe
una única copia compartida y accesible desde todos los objetos de la clase.
Una operación estática únicamente puede acceder a miembros estáticos
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 21 Diciembre, 2010
22. INSTITUTO DE COMPUTACIÓN Y ELECTRÓNICA “DEHESA”
PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA 2
Clases
El atributo nOp mantiene una cuenta global del número de operaciones realizadas
en las cuentas del banco, para la realización de estadísticas.
La operación leerNOperaciones() permite leer este contador.
La operación eurosAPesetas() es una operación auxiliar de la clase Cuenta para ser
usada cuando sea necesaria una conversión de moneda
class Cuenta {
long numero;
String titular;
float saldo;
float interesAnual;
// Contador de operaciones
static int nOp = 0;
static int leerNOperaciones() { return nOp; }
// Operación estática auxiliar de conversión
static long eurosAPesetas(float euros) { return euros * 166.386f; }
void ingreso(float cantidad) { saldo += cantidad; ++nOp; }
void reintegro(float cantidad) { saldo = cantidad; ++nOp; }
}
I.S.C. Oscar Eduardo Roa Vela | Programación Básica con Java 2 22 Diciembre, 2010