1. Actividad 2: Programación orientada a
objetos
UD – Lenguajes y Herramientas de
Desarrollo de Software
2. Introducción
El contenido de la siguiente presentación es íntegramente el
contenido del curso Java Programming Language, Java SE 6 de
Oracle, con algunos agregados propios de Iberotec.
Se utiliza el material oficial de Oracle, por ser Iberotec
miembro del Oracle Academy.
3. Actividad 2: Programación orientada a
objetos
1. Ingeniería de Software
2. Declaración de Clases en Java
3. Declaración de Atributos
4. Declaración de Métodos
5. Acceso a los miembros del objeto
6. Forma de ocultar la información
7. Encapsulación
8. Declaración de Constructores
4. Actividad 2: Programación orientada a
objetos
9. Organización de los archivos fuentes
10. Paquetes de Software
11. Sentencia package
12. Sentencia import
13. Disposición de los directorios y los paquetes
14. Implementación
15. Resumen de la terminología
16. Uso de la documentación sobre el API de Java
5. Ingeniería de Software
Ingeniería de Software
o La ingeniería de software es una disciplina compleja y, a
menudo, difícil de controlar. Durante la segunda mitad del siglo
anterior, los informáticos, ingenieros de software y
diseñadores de sistemas dedicaron sus esfuerzos a crear
sistemas de software más sencillos mediante el uso de código
reutilizable. En la siguiente figura se ofrece una breve historia
de la ingeniería de software.
7. Ingeniería de Software
Al principio dedicaron sus esfuerzos a crear lenguajes que
ocultaran la complejidad del lenguaje máquina y agregaron
llamadas a procedimientos en el sistema operativo para
manejar operaciones comunes tales como la apertura,
lectura o escritura de archivos.
Otros desarrolladores agruparon en diferentes bibliotecas
conjuntos de funciones y procedimientos comunes que
abarcaban desde el cálculo de la cargas estructurales para
ingeniería (NASTRAN), hasta la transmisión de caracteres y
flujos de bytes entre los equipos conectados a una red
(TCP/IP), el acceso a los datos a través de un método de
acceso secuencial indexado (ISAM) o la creación de ventanas
y otros objetos de interfaz de usuario en un monitor gráfico
(X-Windows y Open Look).
8. Ingeniería de Software
Muchas de estas bibliotecas manejan los datos en forma de
estructuras de registros abiertas, como es el caso de las
estructuras struct del lenguaje C. El principal problema de las
estructuras de registros es que el diseñador de la biblioteca
no puede ocultar la implementación de los datos utilizada en
los procedimientos.
Esto dificulta la tarea de modificar la implementación de la
biblioteca sin tocar el código cliente porque ese código
normalmente está ligado a los aspectos específicos de las
estructuras de datos.
9. Ingeniería de Software
A finales de los 80, la programación orientada a objetos se
popularizó con la llegada de C++. Una de las grandes ventajas
de la programación OO era su capacidad para ocultar
determinados aspectos de la implementación de la
biblioteca para que las actualizaciones no afectasen al código
cliente (suponiendo que no se produjesen cambios en las
interfaces). Otra ventaja importante era que los
procedimientos estaban asociados a la estructura de datos.
La combinación de atributos de datos y procedimientos
(llamados métodos) se conoce como clase.
10. Ingeniería de Software
En la actualidad, el equivalente de las bibliotecas de
funciones son las bibliotecas de clases o los kits de
herramientas (toolkits). Esas bibliotecas proporcionan clases
para realizar muchas de las operaciones que realizan las
bibliotecas de funciones, pero, gracias al uso de las subclases,
los programadores del código cliente pueden ampliar estas
herramientas con facilidad para utilizarlas en sus propias
aplicaciones. Las infraestructuras de programación
proporcionan interfaces (API) que los distintos proveedores
pueden implementar para brindar la cantidad de flexibilidad
y rendimiento que necesite cada desarrollador en sus
aplicaciones.
11. Ingeniería de Software
La tecnología Java es una plataforma que se mantiene en
continua expansión a través de diferentes API e
infraestructuras de programación tales como Java Foundation
Classes/Swing (J.F.C./Swing) y sus bibliotecas, la arquitectura
de JavaBeans (arquitectura de componentes de Java) y el API
JDBC (Java DataBase Connectivity). La lista de API de Java es
larga y sigue en aumento.
12. Ingeniería de Software
Fase de Análisis y Diseño
o Un proyecto de desarrollo de software se compone de cinco
fases fundamentales: definición de los requisitos, análisis,
diseño, implementación y pruebas. Todas ellas son
importantes, pero es fundamental dedicar el tiempo suficiente
para las fases de análisis y diseño.
13. Ingeniería de Software
Fase de Análisis y Diseño
o Durante la fase de análisis se define qué objetivos debe
perseguir el sistema. Esto se consigue definiendo todos los
elementos implicados (usuarios, dispositivos y otros sistemas
que interaccionan con el sistema propuesto) y las actividades
que dicho sistema debe llevar a cabo. En esta fase se
identifican también los objetos de dominio (tanto físicos como
conceptuales) que el sistema propuesto manejará, así como el
comportamiento de tales objetos y las interacciones entre ellos.
Estos comportamientos implementan las actividades de las que
el sistema propuesto debe hacerse cargo. La descripción de
estas actividades debería ser lo bastante detallada como para
crear los criterios que se tomarán como base en la fase de
pruebas.
14. Ingeniería de Software
Fase de Análisis y Diseño
o Durante la fase de diseño se define cómo alcanzará el sistema
esos objetivos. En esta fase se crea un modelo de los
elementos implicados, las actividades, los objetos y los
comportamientos del sistema propuesto. Para esta parte
utilizará la herramienta de modelado UML (Unified Modeling
Language).
15. Ingeniería de Software
Ejemplo de Análisis y Diseño
o En este módulo se utiliza como ejemplo una aplicación de una
empresa de transporte. Deben tomarse en consideración un
conjunto básico de requisitos:
El software debe aplicarse a una sola compañía de transporte.
La compañía cuenta con una flota de vehículos que transporta
cajas.
El peso de las cajas es el único factor importante que debe
tenerse en cuenta al cargar un vehículo.
La empresa posee dos tipos de vehículos: camiones y barcazas de
transporte fluvial.
Las cajas se pesan utilizando el kilogramo como unidad de
medida, pero los algoritmos para calcular la potencia de motor
necesaria deberá contabilizar la carga total del vehículo medida
en newtons. Un newton es una medida de fuerza (o peso)
equivalente a 9,8 veces la masa del objeto en kilogramos.
16. Ingeniería de Software
Ejemplo de Análisis y Diseño
Deberá utilizar una interfaz gráfica para hacer el seguimiento de
las cajas que se van agregando a los vehículos.
También deberá generar varios informes a partir de los registros
de fletes.
o Tomando estos requisitos como base, puede crear un diseño de
alto nivel:
Los objetos siguientes deben estar representados en el sistema:
una empresa y dos tipos de vehículos.
Una compañía es la suma de múltiples objetos que son los
vehículos.
También existen otros objetos funcionales: los informes y las
pantallas de la interfaz gráfica.
17. Ingeniería de Software
Abstracción
o El diseño de software ha ido avanzado desde construcciones de
bajo nivel, como es la escritura en código máquina, hasta
niveles mucho más altos.
o Existen dos fuerzas interrelacionadas que han impulsado este
proceso: la simplificación y la abstracción.
18. Ingeniería de Software
Abstracción
o La simplificación tuvo lugar cuando los primeros diseñadores de
lenguajes de programación crearon construcciones de alto nivel
tales como las sentencias condicionales IF y los bucles FOR a
partir del lenguaje de máquina.
o La abstracción es el mecanismo que oculta los datos privados
de la implementación tras las interfaces públicas.
o El concepto de abstracción condujo al uso de subrutinas
(funciones) en lenguajes de alto nivel y, posteriormente, al
emparejamiento de funciones y datos en objetos. A niveles más
altos, la abstracción dio lugar al desarrollo de infraestructuras
de programación y API.
19. Ingeniería de Software
Clases como prototipos de objetos
o Al igual que un diseñador crea prototipos de dispositivos que
podrán utilizarse en repetidas ocasiones para construir los
dispositivos reales, una clase es un prototipo de software que
puede utilizarse para instanciar (es decir crear) muchos objetos
diferentes. La clase define el conjunto de elementos (atributos)
que definen los objetos, así como el conjunto de
comportamientos o funciones (llamados métodos) que
manejan el objeto o ejecutan las interacciones entre objetos
relacionados. Juntos, los atributos y métodos se denominan
miembros. Por ejemplo, un objeto vehículo en la aplicación de
transporte debe llevar el control de su carga máxima y su carga
real y utilizar métodos para agregar una caja (de un cierto peso)
al vehículo. El lenguaje Java incorpora tres conceptos clave de la
Programación Orientada a Objetos (POO): encapsulación,
herencia y polimorfismo.
20. Actividad 2: Programación orientada a
objetos
1. Ingeniería de Software
2. Declaración de Clases en Java
3. Declaración de Atributos
4. Declaración de Métodos
5. Acceso a los miembros del objeto
6. Forma de ocultar la información
7. Encapsulación
8. Declaración de Constructores
21. Declaración de Clases en Java
La declaración de clases en Java adopta la forma siguiente:
<modificador>* class <nombre_clase> {
<declaración_atributo>*
<declaración_constructor>*
<declaración_método>*
}
o <nombre_clase> es el nombre de la clase que se va a declarar y
puede ser cualquier identificador admitido.
o Hay varias palabras clave que pueden usarse como
<modificador>, pero, por ahora, utilice únicamente public. Este
modificador declara que la clase es pública, es decir, de acceso
universal.
o El cuerpo de la clase declara el conjunto de atributos,
constructores y métodos asociados a la clase.
22. Declaración de Clases en Java
Ejemplo de declaración de una clase
public class Vehiculo {
private double cargaMax;
public void setCargaMax(double valor) {
cargaMax = valor;
}
}
23. Actividad 2: Programación orientada a
objetos
1. Ingeniería de Software
2. Declaración de Clases en Java
3. Declaración de Atributos
4. Declaración de Métodos
5. Acceso a los miembros del objeto
6. Forma de ocultar la información
7. Encapsulación
8. Declaración de Constructores
24. Declaración de Atributos
La declaración de atributos de los objetos se realiza de la
forma siguiente:
<modificador>* <tipo> <nombre> [= <valor_inicial>];
o <nombre> es el nombre del atributo que se va a declarar y
puede ser cualquier identificador admitido.
o Es posible usar varios valores como <modificador>, pero, por
ahora, utilice sólo public o private. La clave private indica que
sólo pueden acceder al atributo todos los métodos
pertenecientes a esta clase.
o El <tipo> de atributo puede ser cualquier tipo primitivo (int,
loat, etc.) o cualquier clase.
25. Declaración de Atributos
Ejemplo:
public class Ejemplo {
private int x;
private float y = 10000.0F;
private String name = "Hotel Mediodía";
}
26. Actividad 2: Programación orientada a
objetos
1. Ingeniería de Software
2. Declaración de Clases en Java
3. Declaración de Atributos
4. Declaración de Métodos
5. Acceso a los miembros del objeto
6. Forma de ocultar la información
7. Encapsulación
8. Declaración de Constructores
27. Declaración de Métodos
Para definir los métodos, el lenguaje Java utiliza un enfoque
similar al de otros lenguajes, en concreto C y C++. La
declaración adopta el siguiente formato básico:
<modificador>* <tipo retorno> <nombre> (<argumento>*){
}
o El <nombre> puede ser cualquier identificador admitido, con
algunas restricciones derivadas de los nombres que ya se están
utilizando.
o El segmento <modificador> es opcional y puede tener
numerosos valores, entre ellos, public, protected y private. El
modificador de acceso public indica que es posible llamar a este
método desde otro código. El método private indica que sólo
pueden acceder a él otros métodos de la clase. El método
protected se describe más adelante en este curso.
28. Declaración de Métodos
o <tipo_retorno> indica el tipo de valor que devuelve el método.
Si el método no devuelve ningún valor, debe declararse void. La
tecnología Java es estricta en lo que se refiere a los valores de
retorno. Si la declaración indica que el método debe devolver,
por ejemplo, un entero (int), el método debe devolver un
entero desde todas las rutas de retorno posibles y sólo acepta
llamadas en contextos que esperen el tipo int. Para devolver un
valor dentro de un método debe utilizarse la sentencia return.
o La lista <argumentos> permite pasar argumentos al método.
Los elementos de la lista deben ir separados por comas y cada
elemento debe constar de un tipo y un identificador.
29. Declaración de Métodos
Ejemplo
public class Perro {
private int peso;
public int getPeso() {
return peso;
}
public void setPeso(int newPeso) {
if ( newPeso > 0 ) {
peso = newPeso;
}
}
}
30. Declaración de Métodos
El código muestra dos métodos para la clase Perro.
o El método getPeso devuelve el valor del atributo peso y no
utiliza parámetros. Los valores de los métodos se devuelven
utilizando la sentencia return.
o El método setPeso modifica el valor de peso con el parámetro
newPeso. No devuelve ningún valor. Este método utiliza una
sentencia condicional para impedir que el código cliente defina
el peso de Perro con un número negativo o con cero.
31. Actividad 2: Programación orientada a
objetos
1. Ingeniería de Software
2. Declaración de Clases en Java
3. Declaración de Atributos
4. Declaración de Métodos
5. Acceso a los miembros del objeto
6. Forma de ocultar la información
7. Encapsulación
8. Declaración de Constructores
32. Acceso a los miembros del objeto
En el ejemplo siguiente verá la siguiente línea de código en el
método Prueba Perro.main:
d.setPeso(42);
Esta línea indica al objeto d (en realidad una variable, d, que
contiene una referencia a un objeto del tipo Perro) que
ejecute su método setPeso. Esto se denomina notación de
punto.
El operador punto (.) permite acceder a los atributos y
métodos que componen los miembros no privados de una
clase.
Dentro de la definición de los métodos, no es necesario usar
la notación de punto para acceder a los miembros locales.
Por ejemplo, el método setPeso de la clase Perro no utiliza la
notación de punto para acceder al atributo peso.
33. Acceso a los miembros del objeto
En el Código se muestra el comportamiento de los métodos
de Perro. Cuando se crea el objeto Perro, se inicializa la
variable de la instancia peso con el valor 0. Por tanto, el
método getPeso devuelve 0.
Asimismo en este código se establece el peso en 42, que es
un argumento válido, y el método setPeso define el valor de
la variable peso.
No obstante, no se admite el valor -42 como peso, así que el
método setPeso no modifica la variable peso.
34. Acceso a los miembros del objeto
Ejemplo
public class PruebaPerro {
public static void main(String[] args) {
Perro d = new Perro();
System.out.println("El peso del perro d es + d.getPeso());
d.setPeso(42);
System.out.println("El peso del perro d es “ + d.getPeso());
d.setPeso(-42);
System.out.println("El peso del perro d es “ + d.getPeso());
}
}
La salida es:
El peso del perro d es 0
El peso del perro d es 42
El peso del perro d es 42
35. Actividad 2: Programación orientada a
objetos
1. Ingeniería de Software
2. Declaración de Clases en Java
3. Declaración de Atributos
4. Declaración de Métodos
5. Acceso a los miembros del objeto
6. Forma de ocultar la información
7. Encapsulación
8. Declaración de Constructores
36. Forma de ocultar la información
Imagine que tiene una clase llamada MyDate que incluye los
atributos siguientes: day, month y year. La Figura contiene un
diagrama de una posible implementación de la clase MyDate.
Una implementación sencilla permite el acceso directo a
estos atributos, por ejemplo:
public class MyDate {
public int day;
public int month;
public int year;
}
37. Forma de ocultar la información
Por tanto, el código cliente accede directamente a estos
atributos y genera errores, por ejemplo (d se refiere al objeto
MyDate):
d.day = 32;
// día no válido
d.month = 2; d.day = 30;
// posible pero incorrecto, 30 de febrero
d.day = d.day + 1;
// no hay comprobación de comportamiento cíclico (wraparound)
38. Forma de ocultar la información
Para resolver el problema, oculte los datos de atributos
haciéndolos privados y proporcione otros métodos de acceso
como getXyz(), a veces denominados getters, y setXyz(), a
veces llamados setters. En la siguiente Figura se ilustra otro
diagrama UML de la clase MyDate donde se ocultan las
variables de instancia detrás de los métodos de acceso get y
set.
39. Forma de ocultar la información
Forma de ocultar las
variables de
instancia de la clase
MyDate
40. Forma de ocultar la información
Estos métodos permiten a la clase modificar los datos
internos, pero, sobre todo, verificar la validez de los cambios
solicitados. Por ejemplo:
MyDate d = new MyDate();
d.setDay(32);
// día no válido, devuelve false
d.setMonth(2); d.setDay(30);
// posible pero incorrecto, setDay devuelve false
d.setDay(d.getDay() + 1);
// esta línea devuelve false si se produce comportamiento cíclico
41. Actividad 2: Programación orientada a
objetos
1. Ingeniería de Software
2. Declaración de Clases en Java
3. Declaración de Atributos
4. Declaración de Métodos
5. Acceso a los miembros del objeto
6. Forma de ocultar la información
7. Encapsulación
8. Declaración de Constructores
42. Encapsulación
La encapsulación es la forma de ocultar ciertos elementos de
la implementación de una clase y, al mismo tiempo,
proporcionar una interfaz pública para el software cliente. Es
una forma más de ocultar los datos, ya que la información de
los atributos es un elemento significativo de la
implementación de las clases.
Por ejemplo, el programador de la clase MyDate podría optar
por volver a implementar la representación interna de una
fecha como el número de días transcurridos desde el
comienzo de una determinada época. Esto podría facilitar las
comparaciones de fechas y el cálculo de los intervalos entre
fechas. Como el programador ha encapsulado los atributos
dentro de una interfaz pública, puede realizar este cambio sin
que afecte al código cliente.
43. Encapsulación
La encapsulación aporta mayor flexibilidad para representar
los datos.
44. Actividad 2: Programación orientada a
objetos
1. Ingeniería de Software
2. Declaración de Clases en Java
3. Declaración de Atributos
4. Declaración de Métodos
5. Acceso a los miembros del objeto
6. Forma de ocultar la información
7. Encapsulación
8. Declaración de Constructores
45. Declaración de Constructores
Un constructor es un conjunto de instrucciones diseñadas
para inicializar una instancia. Los parámetros del constructor
se pasan de la misma forma que los de los métodos. La
declaración básica tiene el siguiente formato:
[<modificador>] <nombre_clase> ( <argumentos>* ) {
<sentencia>*
}
El nombre del constructor siempre debe ser idéntico al de la
clase. Si se utilizan, los únicos modificadores válidos
(<modificador>) para los constructores son public, protected
y private.
La lista de <argumentos> es la misma que en el caso de las
declaraciones de métodos.
46. Declaración de Constructores
Los constructores no son métodos. No tienen valores de
retorno ni se heredan.
public class Perro {
private int peso;
public Perro() {
peso = 42;
}
}
La clase Perro tiene una sola variable de instancia peso. El
constructor(sin parámetros) inicializa peso con el valor 42.
También es posible declarar constructores con parámetros.
Este aspecto se trata más adelante en el curso.
47. Declaración de Constructores
Constructor Predeterminado
o Cada clase tiene al menos un constructor. Si no se escribe
ninguno, el lenguaje Java se encarga de suministrarlo. En ese
caso, el constructor no tiene argumentos y su cuerpo está
vacío.
o El constructor predeterminado permite crear instancias de los
objetos con new Xyz(). En caso de que no se utilice, es preciso
suministrar un constructor para cada clase.
o Si se agrega la declaración de un constructor a una clase que no
tenía ningún constructor explícito, se pierde el constructor
predeterminado. A partir de ese momento, y a menos que el
constructor agregado no tenga argumentos, las llamadas a new
Xyz() generarán errores de compilación.
48. Actividad 2: Programación orientada a
objetos
9. Organización de los archivos fuentes
10. Paquetes de Software
11. Sentencia package
12. Sentencia import
13. Disposición de los directorios y los paquetes
14. Implementación
15. Resumen de la terminología
16. Uso de la documentación sobre el API de Java
49. Organización de los archivos fuentes
Los archivos fuente de Java tienen el siguiente formato:
[<declaración_paquete>]
<declaración_importación>*
<declaración_clase>+
El signo más (+) indica uno o más. Para que pueda utilizarse,
un archivo fuente debe contener al menos la definición de
una clase.
50. Organización de los archivos fuentes
El orden de estos elementos es importante. Es decir, las
sentencias de importación deben preceder a las
declaraciones de clases y, si se utiliza una declaración de
paquetes, ésta debe preceder a la de clases e importaciones.
El nombre del archivo fuente debe ser el mismo que el de la
declaración de clase pública de ese archivo.
Por otra parte, el archivo fuente puede incluir varias
declaraciones de clases, pero sólo una puede declararse
como pública (public). Si un archivo fuente no contiene
ninguna declaración de clase pública, entonces no existen
restricciones en cuanto al nombre de archivo. No obstante, es
recomendable tener un archivo fuente por cada declaración
de clase y el nombre de dicho archivo debe ser idéntico al de
la clase.
51. Organización de los archivos fuentes
Por ejemplo, el archivo InformeCapacidadVehiculo.java
debería tener un contenido similar a éste:
package transporte.informes;
import transporte.dominio.*;
import java.util.List;
import java.io.*;
public class InformeCapacidadVehiculo {
private List vehiculos;
public void generarInforme(Writer output) {
// código para generar el informe
}
}
52. Actividad 2: Programación orientada a
objetos
9. Organización de los archivos fuentes
10. Paquetes de Software
11. Sentencia package
12. Sentencia import
13. Disposición de los directorios y los paquetes
14. Implementación
15. Resumen de la terminología
16. Uso de la documentación sobre el API de Java
53. Paquetes de Software
La mayoría de los sistemas de software son de grandes
dimensiones. Es habitual agrupar las clases en paquetes para
facilitar la administración del sistema. UML incluye el
concepto de paquete en su lenguaje de modelado. Los
paquetes pueden contener clases u otros paquetes que
forman una jerarquía. En la Figura puede verse un ejemplo de
una estructura de paquetes:
54. Paquetes de Software
Existen muchas formas de agrupar las clases en paquetes con
sentido lógico. No existe una forma correcta o errónea de
hacerlo, pero una técnica habitual es agrupar las clases por
similitud semántica.
Por ejemplo, un sistema de software de transporte debería
contener una serie de objetos de dominio (como la empresa,
los vehículos, las cajas, los destinos, etc.), un conjunto de
informes y un grupo de paneles de la interfaz gráfica que
sirvan para crear la aplicación de introducción de datos
principal. Los subsistemas GUI e informes dependen del
paquete dominio. Los paquetes UML pueden ser útiles para
modelar subsistemas u otras agrupaciones de elementos en
función de las necesidades. Los demás paquetes están
incluidos en el paquete de nivel superior, llamado transporte.
55. Actividad 2: Programación orientada a
objetos
9. Organización de los archivos fuentes
10. Paquetes de Software
11. Sentencia package
12. Sentencia import
13. Disposición de los directorios y los paquetes
14. Implementación
15. Resumen de la terminología
16. Uso de la documentación sobre el API de Java
56. Sentencia package
El lenguaje Java proporciona la sentencia package como una
forma de agrupar clases relacionadas. Esta sentencia se
utiliza con la siguiente sintaxis:
package <nombre_paq_superior>[.<nombre_paq_subordinado>]*;
Es posible indicar que las clases de un archivo fuente
pertenecen a un determinado paquete utilizando la sentencia
package, por ejemplo:
package transporte.dominio;
// Clase Vehiculo del subpaquete ’dominio’ que hay dentro del
// paquete ’transporte’.
public class Vehiculo {
...
}
57. Sentencia package
La declaración de paquetes, si existe, debe situarse al
comienzo del archivo fuente. Puede ir precedida de un
espacio en blanco y comentarios, pero nada más. Sólo se
permite una declaración de paquetes, que será la que
gobierne todo el archivo fuente. Si un archivo fuente Java no
contiene ninguna declaración de paquete, las clases
declaradas en el archivo pertenecerán al paquete
predeterminado (sin nombre).
58. Sentencia package
Los nombres de paquetes forman una jerarquía y se separan
mediante puntos. Lo normal es que los elementos de estos
nombres se escriban enteramente en minúsculas. Sin
embargo, el nombre de las clases suele empezar por una letra
mayúscula y se escribe en mayúscula la primera letra de cada
palabra que se agrega a fin de diferenciar las distintas
palabras dentro del nombre de clase. Éstas y otras
convenciones sobre la nomenclatura se explican en
‘‘Convenciones de codificación en el lenguaje Java“.
Si no se incluye ninguna sentencia package en el archivo,
todas las clases declaradas en ese archivo pertenecen al
paquete predeterminado(que es un paquete sin nombre).
59. Actividad 2: Programación orientada a
objetos
9. Organización de los archivos fuentes
10. Paquetes de Software
11. Sentencia package
12. Sentencia import
13. Disposición de los directorios y los paquetes
14. Implementación
15. Resumen de la terminología
16. Uso de la documentación sobre el API de Java
60. Sentencia import
Esta sentencia tiene la siguiente sintaxis:
import <nombre_paq>[.<nombre_paq_subordinado>].<nombre_clase>;
o bien
import <nombre_paq>[.<nombre_paq_subordinado>].*;
Cuando vaya a utilizar paquetes, use la sentencia import para
indicar al compilador el lugar donde se encuentran las clases.
De hecho, el nombre del paquete (por ejemplo,
transporte.dominio) forma parte del nombre de las clases
contenidas en ese paquete. Así, puede referirse a la clase
Empresa como transporte.dominio.Empresa en todo el
archivo, o bien utilizar la sentencia import junto con el
nombre de la clase Empresa.
61. Sentencia import
Las sentencias import deben preceder a cualquier
declaración de clase del archivo.
En el ejemplo siguiente se muestra un fragmento de archivo
donde se utiliza la sentencia import.
package transporte.informes;
import transporte.dominio.*;
import java.util.List;
import java.io.*;
public class InformeCapacidadVehiculo {
private Empresa empresaParaInforme;
...
}
62. Sentencia import
Cuando se declara un paquete, no es necesario importar el
paquete en sí, ni ninguno de los elementos que contiene.
Recuerde que la sentencia import se utiliza para poner las
clases de otros paquetes a disposición de la clase actual.
import indica la clase a la que se quiere acceder. Por ejemplo,
si sólo quiere incluir la clase Writer (del paquete java.io) en el
espacio de nombres actual, utilizará:
import java.io.Writer;
Si quiere acceso a todas las clases del paquete, utilice el
asterisco “*”. Por ejemplo, para acceder a todas las clases del
paquete java.io, escriba:
import java.io.*;
63. Sentencia import
La sentencia import permite utilizar los nombres de clase en
un formato abreviado dentro del código fuente, eso es todo.
Este tipo de sentencias no hacen que el compilador cargue
ningún dato adicional en la memoria de trabajo. En este
sentido, import se diferencia bastante de la sentencia
#include de C o C++. La sentencia import, con o sin carácter
comodín (*), no tiene ningún efecto en el archivo de clase de
salida, ni tampoco en el rendimiento del programa durante la
ejecución.
Asimismo, es improbable que su uso provoque diferencias de
rendimiento durante la compilación.
64. Actividad 2: Programación orientada a
objetos
9. Organización de los archivos fuentes
10. Paquetes de Software
11. Sentencia package
12. Sentencia import
13. Disposición de los directorios y los paquetes
14. Implementación
15. Resumen de la terminología
16. Uso de la documentación sobre el API de Java
65. Disposición de los directorios y los paquetes
Los paquetes se almacenan en un árbol de directorios cuyas
ramas son los nombres de los paquetes. Por ejemplo, el
archivo Empresa.class se encontrará en la estructura de
directorios que aparece en la Figura.
66. Disposición de los directorios y los paquetes
Desarrollo
o Es habitual tener que trabajar en varios proyectos de desarrollo
al mismo tiempo. Existen muchas formas de organizar los
archivos de desarrollo. En esta sección se describe una de ellas.
o En la Figura anterior puede verse un ejemplo de jerarquía de
directorios creada para un proyecto de desarrollo. El aspecto
fundamental de esta jerarquía es que los archivos fuente de
cada proyecto están separados de los archivos compilados
(.class).
68. Disposición de los directorios y los paquetes
Compilación con la opción -d
o Normalmente, el compilador de Java sitúa los archivos de clases
en el mismo directorio que los archivos fuente. Es posible
enviar los archivos de clases a otro directorio utilizando la
opción -d del comando javac. La forma más sencilla de compilar
los archivos de los paquetes es trabajar en el directorio situado
un nivel por encima del comienzo del paquete (en este
ejemplo, el directorio src).
o Para compilar todos los archivos del paquete
transporte.dominio de forma que todas las clases compiladas
vayan al directorio de paquete correcto dentro de
TransporteProy/class/, escriba lo siguiente:
cd ProyectosJava/TransporteProy/src
javac –d ../classes transporte/dominio/*.java
69. Actividad 2: Programación orientada a
objetos
9. Organización de los archivos fuentes
10. Paquetes de Software
11. Sentencia package
12. Sentencia import
13. Disposición de los directorios y los paquetes
14. Implementación
15. Resumen de la terminología
16. Uso de la documentación sobre el API de Java
70. Implementación
Implementación
o Es posible implementar una aplicación en una máquina cliente
sin modificar la variable de entorno CLASSPATH del usuario.
Normalmente, la mejor forma de hacerlo es crear un archivo
Java ejecutable (JAR). Para crear este archivo, debe crear un
archivo temporal donde se indique el nombre de la clase que
contiene el método main necesario para la ejecución, por
ejemplo:
Main-Class: mipaquete.MiClase
71. Implementación
Implementación
o A continuación, cree el archivo JAR de la forma habitual,
aunque deberá agregar una opción para que el contenido del
archivo temporal se copie en el archivo META-INF/
MANIFEST.MF. Para ello, utilice la opción “m”, como en
este ejemplo:
jar cmf tempfile MiPrograma.jar
72. Implementación
Implementación
o Por último, el programa puede ejecutarse simplemente con un
comando como éste:
java -jar /ruta/al/archivo/MiPrograma.jar
o En algunas plataformas, basta hacer doble clic en el icono de un
archivo JAR ejecutable para que se inicie el programa
correspondiente.
73. Implementación
Implementación de las bibliotecas
o Algunas veces es necesario implementar el código de las
bibliotecas en un archivo JAR. En tales casos, es posible copiar
el archivo JAR en el subdirectorio ext del directorio lib situado
bajo el directorio principal del JRE. Actúe con precaución al
hacerlo porque, si implementa las clases de esta forma,
normalmente reciben privilegios de seguridad completos.
o Esto puede ocasionar problemas durante la ejecución del
programa en el caso de que existan conflictos de nombres con
otras clases del núcleo del JDK u otras clases que se hayan
instalado de esa misma forma.
74. Actividad 2: Programación orientada a
objetos
9. Organización de los archivos fuentes
10. Paquetes de Software
11. Sentencia package
12. Sentencia import
13. Disposición de los directorios y los paquetes
14. Implementación
15. Resumen de la terminología
16. Uso de la documentación sobre el API de Java
75. Actividad 2: Programación orientada a
objetos
9. Organización de los archivos fuentes
10. Paquetes de Software
11. Sentencia package
12. Sentencia import
13. Disposición de los directorios y los paquetes
14. Implementación
15. Resumen de la terminología
16. Uso de la documentación sobre el API de Java
76. Uso de la documentación sobre el API de Java
Existen diferentes archivos en formato HTML que sirven de
documentación sobre el API suministrado. La organización de
estos documentos es jerárquica, de modo que la página
inicial muestra la lista de todos los paquetes en forma de
hipervínculos. Cuando seleccione el vínculo de un
determinado paquete, aparecerá la lista de todas las clases
que contiene ese paquete. Si selecciona el vínculo de una
clase, se abrirá una página con información sobre esa clase.
En la Figura se muestra una de las clases.
78. Uso de la documentación sobre el API de Java
Los documentos de las clases contienen las secciones
siguientes:
o La jerarquía de la clase
o Una descripción de la clase y su propósito
o La lista de atributos
o La lista de constructores
o La lista de métodos
o Una lista detallada de atributos con sus descripciones
o Una lista detallada de constructores con sus descripciones y las
listas de parámetros formales
o Una lista detallada de métodos con sus descripciones y las listas
de parámetros formales
79. TAREA
Investiga el concepto de las siguientes palabras en 03 líneas y
lo presentas en PowerPoint
oClase:
oObjeto:
oAtributo:
oMétodo:
oConstructor:
oPaquete: