PRO03
PRO03
Caso práctico
Ada y Juan se han reunido para discutir sobre
distintos proyectos de BK Programación. Ada le
comenta a Juan que están teniendo algunos
problemas con determinados proyectos. A menudo
surgen modificaciones o mejoras en el software en
el ámbito de los contratos de mantenimiento que
tienen suscritos con los clientes, y realizar las
modificaciones en los programas está suponiendo
en muchos casos modificar el programa casi en su [Link] (CC BY)
totalidad.
1.- Introducción.
Si nos paramos a observar el mundo que nos rodea, podemos
apreciar que casi todo está formado por objetos. Existen coches,
edificios, sillas, mesas, semáforos, ascensores e incluso personas o
animales. Todos ellos pueden ser considerados objetos, con una
serie de características y comportamientos. Por ejemplo, existen
coches de diferentes marcas, colores, etc. y pueden acelerar, frenar,
girar, etc., o las personas tenemos diferente color de pelo, ojos, altura
y peso y podemos nacer, crecer, comer, dormir, etc.
Si redactamos los programas utilizando los mismos términos de nuestro mundo real, es decir,
utilizando objetos, y no los términos del sistema o computadora donde se vaya a ejecutar,
conseguiremos que éstos sean más legibles y, por tanto, más fáciles de modificar.
Caso práctico
Juan cuenta con la ayuda de María para desarrollar
la aplicación para la Clínica Veterinaria. Lo normal
es pensar en tener una aplicación de escritorio para
las altas y bajas de clientes y la gestión de
mascotas, y una parte web para que la clínica pueda
estar presente en Internet e, incluso, realizar la
venta on-line de sus productos. María tiene bastante
experiencia en administración de páginas web, pero
para estar capacitada en el desarrollo de
aplicaciones en Java, necesita adquirir PetsitUSA Pet Sitter Directory (CC BY-SA)
conocimientos adicionales.
Juan le explica que tienen que utilizar un método de programación que les ayude a
organizar los programas, a trabajar en equipo de forma que si uno de ellos tiene
que dejar una parte para que se encargue el otro, que éste lo pueda retomar con el
mínimo esfuerzo. Además, interesa poder reutilizar todo el código que vayan
creando, para ir más rápido a la hora de programar. Juan le explica que si
consiguen adoptar ese método de trabajo, no sólo redundará en una mejor
organización para ellos, sino que ayudará a que las modificaciones en los
programas sean más llevaderas de lo que lo están siendo ahora.
María asiente ante las explicaciones de Juan, e intuye que todo lo entenderá mejor
conforme vaya conociendo los conceptos de Programación Orientada a Objetos.
Si nos damos cuenta, esta serie de acciones o pasos diferenciados no son otra cosa que verbos;
por ejemplo el verbo pedir, calcular, mostrar, etc.
Sin embargo, la Programación Orientada a Objetos aplica de otra forma diferente la técnica de
programación "divide y vencerás". Este paradigma surge en un intento de salvar las
dificultades que, de forma innata, posee el software. Para ello lo que hace es descomponer, en
lugar de acciones, en objetos. El principal objetivo sigue siendo descomponer el problema en
problemas más pequeños, que sean fáciles de manejar y mantener, fijándonos en cuál es el
escenario del problema e intentando reflejarlo en nuestro programa. O sea, se trata de trasladar
la visión del mundo real a nuestros programas. Por este motivo se dice que la Programación
Orientada a Objetos aborda los problemas de una forma más natural, entendiendo como
natural que está más en contacto con el mundo que nos rodea.
Autoevaluación
Relaciona el término con su definición, escribiendo el número asociado a la
definición en el hueco correspondiente.
Ejercicio de relacionar
Paradigma Relación Definición
Enviar
2.1.- Conceptos.
En la Programación Estructurada, el programa estaba compuesto por un conjunto de datos y
funciones "globales". El término global significaba que eran accesibles por todo el programa,
pudiendo ser llamados en cualquier ubicación de la aplicación. Dentro de las funciones se
situaban las instrucciones del programa que manipulaban los datos. Funciones y datos se
encontraban separados y totalmente independientes. Esto ocasionaba dos problemas
principales:
Todos los programas escritos bajo el paradigma orientado a Objetos se pueden escribir
igualmente mediante la Programación Estructurada. Sin embargo, la Programación Orientada a
Objetos es la que mayor facilidad presenta para el desarrollo de programas basados en
interfaces gráficas de usuario.
2.2.- Beneficios.
Según lo que hemos visto hasta ahora, un objeto es cualquier
entidad que podemos ver o apreciar. El concepto fundamental de
la Programación Orientada a Objetos son, precisamente, los objetos.
Pero ¿qué beneficios aporta la utilización de objetos?
Fundamentalmente la posibilidad de representar el problema en
términos del mundo real, que como hemos dicho están más
cercanos a nuestra forma de pensar, pero existen otra serie de
ventajas como las siguientes:
2.3.- Características.
Cuando hablamos de Programación Orientada a Objetos, existen una serie de
características que se deben cumplir. Cualquier lenguaje de programación orientado a objetos
las debe contemplar. Las características más importantes del paradigma de la programación
orientada a objetos son:
Autoevaluación
Relaciona los lenguajes de programación indicados con la característica
correspondiente, escribiendo el número asociado a la característica en el
hueco correspondiente.
Ejercicio de relacionar
Lenguaje de
Relación Tiene la característica de que …
programación
Enviar
Caso práctico
María ha hecho un descanso de cinco minutos. Se está
tomando un café y está repasando los conceptos de
Programación Orientada a Objetos. Piensa que este
paradigma supone un cambio de enfoque con respecto a
las técnicas tradicionales. Ahora lo que necesita es
ahondar en el concepto de objeto, que parece ser el eje
central de este modelo de programación.
Julius Schorzman (CC0)
Al principio de la unidad veíamos que el mundo real está compuesto de objetos, y podemos
considerar objetos casi cualquier cosa que podemos ver y sentir. Cuando escribimos un programa
en un lenguaje orientado a objetos, debemos identificar cada una de las partes del problema con
objetos presentes en el mundo real, para luego trasladarlos al modelo computacional que
estamos creando.
En este contexto, un objeto de software es una representación de un objeto del mundo real,
compuesto de una serie de características y un comportamiento específico. Pero ¿qué es más
concretamente un objeto en Programación Orientada a Objetos? Veámoslo.
Un objeto es un conjunto de datos con las operaciones definidas para ellos. Los
objetos tienen un estado y un comportamiento.
La idea principal es que el objeto reúne en una sola entidad los datos y las operaciones, y para
acceder a los datos privados del objeto debemos utilizar los métodos que hay definidos para ese
objeto.
Los objetos se pueden comunicar entre ellos invocando a los métodos de los otros
objetos.
Autoevaluación
Cuando un objeto, objeto1, ejecuta un método de otro, objeto2, se dice que el objeto2 le
ha mandado un mensaje al objeto1.
Verdadero Falso
Falso
En este caso se dice que es el objeto1 el que le ha mandado un mensaje al
objeto2.
3.3.- Clases.
Hasta ahora hemos visto lo que son los objetos. Un programa
informático se compone de muchos objetos, algunos de los
cuales comparten la misma estructura y comportamiento. Si
tuviéramos que definir su estructura y comportamiento objeto
cada vez que queremos crear un objeto, estaríamos utilizando
mucho código redundante. Por ello lo que se hace es crear una
clase, que es una descripción de un conjunto de objetos que
comparten una estructura y un comportamiento común. Y a partir
de la clase, se crean tantas "copias" o "instancias" como Ministerio de Educación (Elaboración propia)
(CC BY-NC)
necesitemos. Esas copias son los objetos de la clase.
Realmente una clase es un "molde" que nos permite crear
objetos de un determinado tipo.
Si recuerdas, cuando utilizábamos los tipos de datos enumerados, los definíamos con la palabra
reservada enum y la lista de valores entre llaves, y decíamos que un tipo de datos enum no es otra
cosa que una especie de clase en Java. Efectivamente, todas las clases llevan su contenido entre
llaves. Y una clase tiene la misma estructura que un tipo de dato enumerado, añadiéndole una
serie de métodos y variables.
Para declarar una clase en Java se utiliza la palabra reservada class. La declaración de una clase
está compuesta por:
Cabecera de la clase. La cabecera es un poco más compleja que como aquí definimos,
pero por ahora sólo nos interesa saber que está compuesta por una serie de modificadores,
en este caso hemos puesto public que indica que es una clase pública a la que pueden
acceder otras clases del programa, la palabra reservada class y el nombre de la clase.
Cuerpo de la clase. En él se especifican encerrados entre llaves los atributos y los
métodos que va a tener la clase.
En la unidad anterior ya hemos utilizado clases, aunque aún no sabíamos su significado exacto.
Por ejemplo, en los ejemplos de la unidad o en la tarea, estábamos utilizando clases, todas ellas
eran clases principales, no tenían ningún atributo y el único método del que disponían era el
método main().
El método main() se utiliza para indicar que se trata de una clase principal, a partir de la
cual va a empezar la ejecución del programa. Este método no aparece si la clase que
estamos creando no va a ser la clase principal del programa.
Caso práctico
María sigue fuera de la oficina. Esta noche en casa quiere repasar conceptos sobre
Programación Orientada a objetos, así que aprovecha un momento para llamar a
Juan y le comenta:
Juan sonríe ante la pregunta de María, y le explica que los objetos se crean como
si fuera declarando una variable más, tan sólo que el tipo de datos de dicho objeto
será una clase. Tras declararlos hay que instanciarlos con la orden new para reservar
memoria para ellos, y después ya podremos utilizarlos, refiriéndonos a su contenido
con el operador punto.
-Te mando un documento por email que lo explica todo muy bien.
Una vez que hemos creado una clase, podemos crear objetos en nuestro programa a partir de
esas clases.
Cuando creamos un objeto a partir de una clase se dice que hemos creado una "instancia de la
clase". A efectos prácticos, "objeto" e "instancia de clase" son términos similares. Es decir, nos
referimos a objetos como instancias cuando queremos hacer hincapié que son de una clase
particular.
Los objetos se crean a partir de las clases, y representan casos individuales de éstas.
Cualquier objeto instanciado de una clase contiene una copia de todos los atributos definidos en
la clase. En otras palabras, lo que estamos haciendo es reservar un espacio en la memoria del
ordenador para guardar sus atributos y métodos. Por tanto, cada objeto tiene una zona de
almacenamiento propia donde se guarda toda su información, que será distinta a la de cualquier
otro objeto. A las variables miembro instanciadas también se les llama variables instancia. De
igual forma, a los métodos que manipulan esas variables se les llama métodos instancia.
En el ejemplo del objeto Trabajador, las variables instancia serían color_de_pelo, peso, altura, etc. Y los
métodos instancia serían crecer(), dormir(), comer(), etc.
Autoevaluación
Verdadero
Las variables miembro pueden ser variables instancia o variables de clase.
Este último tipo es un caso particular cuando el valor de la variable o atributo
es compartido por todos los objetos de la clase.
A la vista de lo anterior, podemos concluir que los objetos tienen un ciclo de vida, en el cual
podemos distinguir las siguientes fases:
4.2.- Declaración.
Para la creación de un objeto hay que seguir los siguientes pasos:
Pero ¿en qué consisten estos pasos a nivel de programación en Java? Veamos primero cómo
declarar un objeto. Para la definición del tipo de objeto debemos emplear la siguiente instrucción:
<tipo> nombre_objeto;
Donde:
Los tipos referenciados o referencias se utilizan para guardar la dirección de los datos
en la memoria del ordenador.
Nada más crear una referencia, ésta se encuentra vacía. Cuando una referencia a un objeto no
contiene ninguna instancia se dice que es una referencia nula, es decir, que contiene el valor null.
Esto quiere decir que la referencia está creada pero que el objeto no está instanciado todavía, por
eso la referencia apunta a un objeto inexistente llamado "nulo".
Para entender mejor la declaración de objetos veamos un ejemplo. Cuando veíamos los tipos de
datos en la Unidad 2, decíamos que Java proporciona un tipo de dato especial para los textos o
cadenas de caracteres que era el tipo de dato String. Veíamos que realmente este tipo de dato es
un tipo referenciado y creábamos una variable mensaje de ese tipo de dato de la siguiente
forma:
String mensaje;
Los nombres de la clase empiezan con mayúscula, como String, y los nombres de los
objetos con minúscula, como mensaje, así sabemos qué tipo de elemento utilizando.
Pues bien, String es realmente la clase a partir de la cual creamos nuestro objeto llamado mensaje.
Si observas poco se diferencia esta declaración de las declaraciones de variables que hacíamos
para los tipos primitivos. Antes decíamos que mensaje era una variable del tipo de dato String. Ahora
realmente vemos que mensaje es un objeto de la clase String. Pero mensaje aún no contiene el objeto
porque no ha sido instanciado, veamos cómo hacerlo.
Por tanto, cuando creamos un objeto estamos haciendo uso de una variable que almacena la
dirección de ese objeto en memoria. Esa variable es una referencia o un tipo de datos
referenciado, porque no contiene el dato si no la posición del dato en la memoria del ordenador.
En las instrucciones anteriores, las variables s y saludo apuntan al mismo objeto de la clase String.
Esto implica que cualquier modificación en el objeto saludo modifica también el objeto al que hace
referencia la variable s, ya que realmente son el mismo.
4.3.- Instanciación.
Una vez creada la referencia al objeto, debemos crear la instancia u objeto que se va a guardar
en esa referencia. Para ello utilizamos la orden new con la siguiente sintaxis:
Donde:
Durante la instanciación del objeto, se reserva memoria suficiente para el objeto. De esta tarea se
encarga Java y juega un papel muy importante el recolector de basura, que se encarga de
eliminar de la memoria los objetos no utilizados para que ésta pueda volver a ser utilizada.
Así estaríamos instanciando el objeto mensaje. Para ello utilizaríamos el operador new y el
constructor de la clase String a la que pertenece el objeto según la declaración que hemos hecho
en el apartado anterior. A continuación utilizamos el constructor, que se llama igual que la clase,
String.
En el ejemplo anterior el objeto se crearía con la cadena vacía (""), si queremos que tenga un
contenido debemos utilizar parámetros en el constructor, así:
Java permite utilizar la clase String como si de un tipo de dato primitivo se tratara, por
eso no hace falta utilizar el operador new para instanciar un objeto de la clase String.
¡Esta es la forma más útil de declarar un objeto e inicializarlo. Siempre que se puede
inicializar el objeto, debemos utilizar esta forma de declararlo.!
Recomendación
Crea un nuevo proyecto en Netbeans y añádele un clase principal con el método
main. Es muy recomendable que vayas tecleando y probando cada uno de los
ejemplos que se muestran en los contenidos. Si tienes errores de compilación
corrígelos y después ejecuta la aplicación: sin duda es la mejor y casi única
forma de aprender. Si tienes dudas puedes preguntar a tu profesor.
4.4.- Manipulación.
Una vez creado e instanciado el objeto ¿cómo accedemos a su contenido? Para acceder a los
atributos y métodos del objeto utilizaremos el nombre del objeto seguido del operador punto (.) y
el nombre del atributo o método que queremos utilizar.
nombre_objeto.mensaje
Por ejemplo, para acceder a las variables instancia o atributos se utiliza la siguiente sintaxis:
nombre_objeto.atributo
Y para acceder a los métodos o funciones miembro del objeto se utiliza la sintaxis es:
En la sentencia anterior par1, par2, etc. son los parámetros que utiliza el método. Aparece entre
corchetes para indicar son opcionales.
Para entender mejor cómo se manipulan objetos vamos a utilizar un ejemplo. Para ello
necesitamos la Biblioteca de Clases Java o API (Application Programming Interface - Interfaz de
programación de aplicaciones). Uno de los paquetes de librerías o bibliotecas es [Link]. Este
paquete contiene clases destinadas a la creación de objetos gráficos e imágenes. Vemos por
ejemplo cómo crear un rectángulo.
En primer lugar instanciamos el objeto utilizando el método constructor, que se llama igual que el
objeto, e indicando los parámetros correspondientes a la posición y a las dimensiones del
rectángulo:
Una vez instanciado el objeto rectángulo si queremos cambiar el valor de los atributos utilizamos
el operador punto. Por ejemplo, para cambiar la dimensión del rectángulo:
[Link]=100;
[Link]=100;
[Link](200, 200);
Debes conocer
Al hilo de las ayudas que nos proporciona Netbeans, a la hora de trabajar con
objetos tenemos a nuestra disposición diversa funcionalidad que nos ayudará
escribir código. Cuando instanciamos un objeto Java, comenzamos a utilizar su
funcionalidad invocando sus métodos. A veces es complicado recordar los métodos
disponibles en un objeto o incluso los parámetros que utiliza o la funcionalidad que
implementa. Observa la siguiente imagen:
Además, si seleccionamos con el cursor del ratón uno de ellos, nos muestra
información del API estándar con la funcionalidad implementada y los parámetros
utilizados. Si seleccionamos uno de ellos, Netbeans automáticamente añadirá la
cabecera del método. Nuestro trabajo será ajustar los parámetros.
Recomendación
Prueba el ejemplo anterior en Netbeans. Trata de teclear el código hasta que
puedes ejecutarlo. Si tienes problemas, puedes descargar el proyecto aquí.
El recolector de basura se ejecuta en modo segundo plano y de manera muy eficiente para no
afectar a la velocidad del programa que se está ejecutando. Lo que hace es que periódicamente
va buscando objetos que ya no son referenciados, y cuando encuentra alguno lo marca para ser
eliminado. Después los elimina en el momento que considera oportuno.
Justo antes de que un objeto sea eliminado por el recolector de basura, se ejecuta su método
finalize(). Si queremos forzar que se ejecute el proceso de finalización de todos los objetos del
programa podemos utilizar el método runFinalization() de la clase System. La clase System forma parte de
la Biblioteca de Clases de Java y contiene diversas clases para la entrada y salida de
información, acceso a variables de entorno del programa y otros métodos de diversa utilidad.
Para forzar el proceso de finalización ejecutaríamos:
[Link]();
Autoevaluación
Verdadero Falso
Verdadero
Efectivamente, los objetos tienen un tiempo de vida limitado y esas son las
fases que atraviesan durante su vida útil.
Caso práctico
María está contenta con lo que está aprendiendo
sobre Java, básicamente se trata de ampliar sus
conocimientos y con la experiencia que ella tiene no
le resultará difícil ponerse a programar en poco
tiempo.
Por lo pronto, María continúa con el documento facilitado por Juan, ahora tiene que
ver cómo se utilizan los métodos, aunque intuye que no va a ser algo muy diferente
a las funciones y procedimientos de cualquier otro lenguaje.
Al igual que las clases, los métodos están compuestos por una
cabecera y un cuerpo. La cabecera también tiene
modificadores, en este caso hemos utilizado public para indicar
que el método es público, lo cual quiere decir que le pueden
enviar mensajes no sólo los métodos del objeto sino los métodos
de cualquier otro objeto externo.
Ministerio de Educación (Elaboración propia)
(CC BY-NC)
Dentro de un método nos encontramos el cuerpo del método que
contiene el código de la acción a realizar. Las acciones que un
método puede realizar son:
En el lenguaje Java, todas las variables se pasan por valor, excepto los objetos que se
pasan por referencia.
Un método siempre tiene que devolver un valor (no hay valor por defecto). Este valor de
retorno es el valor que devuelve el método cuando termina de ejecutarse, al método o
programa que lo llamó. Puede ser un tipo primitivo, un tipo referenciado o bien el tipo void,
que indica que el método no devuelve ningún valor.
Un método tiene un número fijo de argumentos. Los argumentos son variables a través
de las cuales se pasa información al método desde el lugar del que se llame, para que éste
pueda utilizar dichos valores durante su ejecución. Los argumentos reciben el nombre de
parámetros cuando aparecen en la declaración del método.
Según hemos visto en el apartado anterior, la cabecera de un método se declara como sigue:
Como vemos, el tipo de dato devuelto aparece después del modificador public y se corresponde
con el valor de retorno.
La lista de parámetros aparece al final de la cabecera del método, justo después del nombre,
encerrados entre signos de paréntesis y separados por comas. Se debe indicar el tipo de dato de
cada parámetro así:
Cuando se llame al método, se deberá su nombre, seguido de los argumentos que deben
coincidir con la lista de parámetros.
[Link] de apuntes/PRO/HTML/[Link] 31/58
17/11/24, 20:45 UD3.- Utilización de objetos.
5.2.- Constructores.
¿Recuerdas cuando hablábamos de la creación e instanciación de un objeto? Decíamos que
utilizábamos el operador new seguido del nombre de la clase y una pareja de abrir-cerrar
paréntesis. Además, el nombre de la clase era realmente el constructor de la misma, y lo
definíamos como un método especial que sirve para inicializar valores. En este apartado vamos a
ver un poco más sobre los constructores.
La estructura de los constructores es similar a la de cualquier método, salvo que no tiene tipo de
dato devuelto porque no devuelve ningún valor. Está formada por una cabecera y un cuerpo, que
contiene la inicialización de atributos y resto de instrucciones del constructor.
Las clases se suelen representar como un rectángulo, y dentro de él se sitúan los atributos y los
métodos de dicha clase.
En la imagen, la clase Pajaro está compuesta por tres atributos, uno de ellos el nombre y otros dos
que indican la posición del ave, posX y posY. Tiene dos métodos constructores y un método volar().
Como sabemos, los métodos constructores reciben el mismo nombre de la clase, y puede haber
varios para una misma clase, dentro de ella se diferencian unos de otros por los parámetros que
utilizan.
Ejercicio resuelto
Dada una clase principal llamada Pajaro, se definen los atributos y métodos que
aparecen en la imagen. Los métodos realizan las siguientes acciones:
Diseña un programa que utilice la clase Pajaro, cree una instancia de dicha clase y
ejecute sus métodos.
Mostrar retroalimentación
Lo primero que debemos hacer es crear la clase Pajaro, con sus métodos y
atributos. De acuerdo con los datos que tenemos, el código de la clase sería
el siguiente:
Debemos tener en cuenta que se trata de una clase principal, lo cual quiere
decir que debe contener un método main() dentro de ella. En el método main()
vamos a situar el código de nuestro programa. El ejercicio dice que tenemos
que crear una instancia de la clase y ejecutar sus métodos, entre los que
están el constructor y el método volar(). También es conveniente imprimir el
resultado de ejecutar el método volar(). Por tanto, lo que haría el programa
sería:
nombre_clase.nombre_metodo_estatico
El nombre del objeto, seguido por el operador punto (.) más el nombre del método estático.
Utilizaremos esta forma cuando tengamos un objeto instanciado de la clase en la que se
encuentra definido el método estático, y no podamos utilizar la anterior:
nombre_objeto.nombre_metodo_estatico
Los métodos estáticos no afectan al estado de los objetos instanciados de la clase (variables
instancia), y suelen utilizarse para realizar operaciones comunes a todos los objetos de la
clase. Por ejemplo, si necesitamos contar el número de objetos instanciados de una clase,
podríamos utilizar un método estático que fuera incrementando el valor de una variable entera de
la clase conforme se van creando los objetos.
En la Biblioteca de Clases de Java existen muchas clases que contienen métodos estáticos.
Pensemos en las clases que ya hemos utilizado en unidades anteriores, como hemos comentado
la clase String con todas las operaciones que podíamos hacer con ella y con los objetos
instanciados a partir de ella. O bien la clase Math. para la conversión de tipos de datos. Todos ellos
son métodos estáticos que la API de Java define para esas clases. Lo importante es que
tengamos en cuenta que al tratarse de métodos estáticos, para utilizarlos no necesitamos crear
un objeto de dichas clases.
Autoevaluación
Verdadero Falso
Falso
Los métodos estáticos no pueden ser métodos instancia porque se utilizan
directamente, sin crear un objeto de la clase.
Caso práctico
-¡Vaya! -exclama María- No consigo encontrar la
clase Persona dentro del conjunto de clases que hasta
ahora he creado.
-¿Ah sí? Pues es justo lo que necesito para resolver este desorden. Voy a ponerme
con ello -añade María.
Conforme nuestros programas se van haciendo más grandes, el número de clases va creciendo.
Meter todas las clases en único directorio no ayuda a que estén bien organizadas, lo mejor es
hacer grupos de clases, de forma que todas las clases que estén relacionadas o traten sobre un
mismo tema estén en el mismo grupo.
Las clases de un mismo paquete tienen un acceso privilegiado a los atributos y métodos
de otras clases de dicho paquete. Es por ello por lo que se considera que los paquetes son
también, en cierto modo, unidades de encapsulación y ocultación de información.
Java nos ayuda a organizar las clases en paquetes. En cada fichero .java que hagamos, al
principio, podemos indicar a qué paquete pertenece la clase que hagamos en ese fichero.
Los paquetes se declaran utilizando la palabra clave package seguida del nombre del paquete. Para
establecer el paquete al que pertenece una clase hay que poner una sentencia de declaración
como la siguiente al principio de la clase:
package Nombre_de_Paquete;
El código es exactamente igual que como hemos venido haciendo hasta ahora, solamente hemos
añadido la línea "package ejemplos;" al principio. En la imagen se muestra cómo aparecen los
paquetes en el entorno integrado de Netbeans.
Debes conocer
Para crear paquetes en Netbeans, tan solo tienes que hacer click con el botón
derecho sobre:
import [Link];
import [Link].*;
Esta sentencia debe aparecer al principio de la clase, justo después de la sentencia package, si ésta
existiese.
También podemos utilizar la clase sin sentencia import, en cuyo caso cada vez que queramos
usarla debemos indicar su ruta completa:
Hasta aquí todo correcto. Sin embargo, al trabajar con paquetes, Java nos obliga a organizar los
directorios, compilar y ejecutar de cierta forma para que todo funcione adecuadamente.
[Link]
La siguiente parte del vídeo habla sobre la utilización de objetos y clases en Java:
[Link]
/<directorio_usuario>/Proyecto_Bienvenida/ejemplos/[Link]
Debemos tener cuidado con las mayúsculas y las minúsculas, para evitar problemas, tenemos
que poner el nombre en "package" exactamente igual que el nombre del subdirectorio.
Para compilar la clase [Link] que está en el paquete ejemplos debemos situarnos en el
directorio padre del paquete y compilar desde ahí:
$ cd /<directorio_usuario>/Proyecto_Bienvenida
$ javac ejemplos/[Link]
Para ejecutar la clase compilada [Link] que está en el directorio ejemplos, debemos seguir
situados en el directorio padre del paquete. El nombre completo de la clase es "[Link]", es
decir "[Link]". Los pasos serían los siguientes:
$ cd /<directorio_usuario>/Proyecto_Bienvenida
$ java ejemplos/Bienvenida
Bienvenido a Java
package [Link];
A nivel de sistema operativo, tendríamos que crear los subdirectorios basicos y avanzados dentro del
directorio ejemplos, y meter ahí las clases que correspondan.
Para compilar, en el directorio del proyecto habría que compilar poniendo todo el path hasta llegar
a la clase. Es decir, el nombre de la clase va con todos los paquetes separados por puntos, por
ejemplo [Link].
/<directorio_usuario>/Proyecto_Bienvenida/ejemplos/basicos/[Link]
$ cd /<directorio_usuario>/Proyecto_Bienvenida
$ javac ejemplos/basicos/[Link]
$ java ejemplos/basicos/Bienvenida
Hola Mundo
La Biblioteca de Clases de Java se organiza haciendo uso de esta jerarquía de paquetes. Así por
ejemplo, si quiero acceder a la clase Date, tendré que importarla indicando su ruta completa, o sea,
[Link]. Este tipo de instrucciones son añadidas de forma automática cuando utilizamos un
IDE.
import [Link];
Utilizar las clases y métodos de la Biblioteca de Java nos va ayudar a reducir el tiempo de
desarrollo considerablemente, por lo que es importante que aprendamos a consultarla y
conozcamos las clases más utilizadas.
[Link]. Contiene las clases que gestionan la entrada y salida, ya sea para manipular ficheros,
leer o escribir en pantalla, en memoria, etc. Este paquete contiene por ejemplo la clase
BufferedReader que se utiliza para la entrada por teclado.
[Link]. Contiene las clases básicas del lenguaje. Este paquete no es necesario importarlo,
ya que es importado automáticamente por el entorno de ejecución. En este paquete se
encuentra la clase Object, que sirve como raíz para la jerarquía de clases de Java, o la clase
System que ya hemos utilizado en algunos ejemplos y que representa al sistema en el que se
está ejecutando la aplicación. También podemos encontrar en este paquete las clases que
"envuelven" los tipos primitivos de datos. Lo que proporciona una serie de métodos para
cada tipo de dato de utilidad, como por ejemplo las conversiones de datos.
[Link]. Biblioteca de clases de utilidad general para el programador. Este paquete contiene
por ejemplo la clase Scanner utilizada para la entrada por teclado de diferentes tipos de datos,
la clase Date, para el tratamiento de fechas, etc.
[Link]. Contiene herramientas para manipulaciones matemáticas.
[Link]. Incluye las clases relacionadas con la construcción de interfaces de usuario, es
decir, las que nos permiten construir ventanas, cajas de texto, botones, etc. Algunas de las
clases que podemos encontrar en este paquete son Button, TextField, Frame, Label, etc.
[Link]. Contiene otro conjunto de clases para la construcción de interfaces avanzadas de
usuario. Los componentes que se engloban dentro de este paquete se denominan
componentes Swing, y suponen una alternativa mucho más potente que AWT para construir
interfaces de usuario.
[Link]. Conjunto de clases para la programación en la red local e Internet.
[Link]. Contiene las clases necesarias para programar en Java el acceso a las bases de
datos.
[Link]. Biblioteca de clases para implementar mecanismos de seguridad.
Como se puede comprobar Java ofrece una completa jerarquía de clases organizadas a través de
paquetes.
[Link]
[Link] de apuntes/PRO/HTML/[Link] 45/58
17/11/24, 20:45 UD3.- Utilización de objetos.
Resumen textual alternativo
Caso práctico
—Estas clases ya las hemos utilizado anteriormente, están en los paquetes [Link]
y [Link], respectivamente, observa en el siguiente código cómo las utilizo —dice
Juan.
No se pueden crear objetos a partir de la clase System, sino que se utiliza directamente llamando a
cualquiera de sus métodos con el operador de manipulación de objetos, es decir, el operador
punto (.):
[Link]("Bienvenido a Java");
Autoevaluación
Texto de la pregunta tipo verdadero o falso:
La clase System del paquete [Link], como cualquier clase, está formada por métodos y
atributos, y además es una clase que no se puede instanciar, sino que se utiliza
directamente.
Verdadero Falso
Falso
La clase System pertenece al paquete [Link].
En Java, InputStream nos permite leer en bytes, desde teclado, un archivo o cualquier otro
dispositivo de entrada. Con esta clase podemos utilizar por ejemplo el método read() que permite
leer un byte de la entrada o skip(long n), que salta n bytes de la entrada. Pero lo que realmente nos
interesa es poder leer texto o números, no bytes, para hacernos más cómoda la entrada de datos.
Para ello se utilizan las clases:
En el código anterior hemos creado un InputStreamReader a partir de Ministerio de Educación (CC BY-NC)
Sin embargo, seguimos necesitando hacer la conversión si queremos leer números. Por ejemplo,
si escribimos un entero 32, en cadena obtendremos "32". Si recordamos, para convertir cadenas de
texto a enteros se utiliza el método estático parseInt() de la clase Integer, con lo cual la lectura la
haríamos así:
Observa que hemos metido el código entre excepciones try-catch. Cuando en nuestro programa
falla algo, por ejemplo la conversión de un String a int, Java nos avisa lanzando excepciones. Si
"capturamos" esa excepción en nuestro programa, podemos avisar al usuario de qué ha pasado.
Esto es conveniente porque si no tratamos la System excepción seguramente el programa se pare y
no siga ejecutándose. El control de excepciones lo veremos en unidades posteriores, ahora sólo
nos basta saber que en las llaves del try colocamos el código que puede fallar y en las llaves del
catch el tratamiento de la excepción.
O bien esta otra instrucción para leer una línea completa, incluido
texto, números o lo que sea:
Para conocer cómo funciona un objeto de la clase Scanner te proporcionamos el siguiente ejemplo:
Debes conocer
En la orden print y println, cuando queramos escribir un mensaje y el valor de una variable
debemos utilizar el operador de concatenación de cadenas (+), por ejemplo:
[Link](“Bienvenido, “ + nombre);
Las órdenes print y println todas las variables que escriben las consideran como cadenas de texto
sin formato, por ejemplo, no sería posible indicar que escriba un número decimal con dos cifras
decimales o redondear las cifras, o escribir los puntos de los miles, por ejemplo. Para ello se
utiliza la orden printf().
La orden printf() utiliza unos códigos de conversión para indicar si el contenido a mostrar de qué
tipo es. Estos códigos se caracterizan porque llevan delante el símbolo %, algunos de ellos son:
Por ejemplo, si queremos escribir el número float 12345.1684 con el punto de los miles y sólo dos
cifras decimales la orden sería:
Estas órdenes pueden utilizar las secuencias de escape que vimos en unidades anteriores, como
"\n" para crear un salto de línea, "\t" para introducir un salto de tabulación en el texto, etc.
Si quieres conocer algo más sobre la orden printf() en el siguiente enlace tienes
varios ejemplos de utilización:
En este otro enlace puedes ver un ejemplo interesante de uso de la clase Scanner:
código:
Como vemos en un entorno como Netbeans, utilizar las dos salidas nos puede ayudar a una
mejor depuración del código.
Autoevaluación
Relaciona cada clase con su función, escribiendo el número asociado a la
función en el hueco correspondiente.
Ejercicio de relacionar
Clase. Relación. Función.
Enviar
PrintStream se utiliza para la salida de datos por pantalla y las otras clases,
para la entrada de datos por teclado.
8.- Conclusiones.
A lo largo de esta tercera unidad, hemos introducido los fundamentos básicos sobre la
programación orientada a objetos, el paradigma de programación utilizado por Java.
Hemos aprendido el concepto de clase, de objeto, cómo se crean, manipulan y destruyen,
cómo de declaran y utilizan métodos y qué son paquetes o librerías de objetos. Por otro
lado, hemos conocido las funcionalidades de Java para leer datos de teclado y mostrarlos
por pantalla. En el mapa conceptual se pueden observar los conceptos que se deben tener
claros antes de avanzar a la siguiente unidad.
Llegados a este punto, estamos en disposición de conocer las estructuras de control del flujo de
ejecución que proporciona el lenguaje Java. A partir de ese momento podremos construir
aplicaciones Java mucho más funcionales. Será en la Unidad 4.