0% encontró este documento útil (0 votos)
181 vistas75 páginas

Programación de Sistemas: Ing. Roberto Carlos Guevara Genchi

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
181 vistas75 páginas

Programación de Sistemas: Ing. Roberto Carlos Guevara Genchi

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 1


Programación de Sistemas

RESUELVE PROBLEMAS INFORMÁTICOS DE ACUERDO CON LAS ESTRUCTURAS DE


CONTROL Y ESTRUCTURAS DE CONTROL Y ESTRUCTURAS CLASE.

Programa de estudios de la unidad de aprendizaje programación de sistemas.

1.1 CARACTERISTICAS DE LOS LENGUAJES DE PROGRAMACIÓN ORIENTADA


A OBJETOS.
1.1.1 Conceptos básicos de lenguaje Java
Por lo general, los programas en Java pasan a través de cinco fases para poder
ejecutarse. Estas fases son: edición, compilación, carga, verificación y ejecución.

ING. ROBERTO CARLOS GUEVARA GENCHI 2


Programación de Sistemas

La fase 1 consiste en editar un archivo. Esto se logra mediante un programa (conocido


comúnmente como editor). Los nombres de archivo de los programas en Java terminan
con la extensión .java.
En la fase 2 se proporciona el comando javac para compilar el programa. El compilador
de Java traduce el programa en Java a códigos de bytes.
La fase 3 se conoce como carga. El programa debe de colocarse en memoria antes de
ejecutarse. De esto se encarga el cargador de clases que toma los archivos .class que
contienen los códigos de bytes y los transfiere a la memoria principal.
A medida que se cargan las clases, el verificador de códigos de bytes se encarga de
verificar sus códigos en la fase 4. Este proceso asegura que los códigos de bytes de
las clases sean válidos y que no violen las restricciones de seguridad de Java.
Finalmente, en la fase 5, el intérprete, bajo el control del sistema operativo, interpreta el
programa un código de bytes a la vez, realizando de esta forma las acciones
especificadas por el programa.
EJEMPLO:
class HolaMundo
{
/*
* Punto de entrada a la aplicación.
*
* args: matriz de parámetros pasados a la aplicación
* Mediante la línea de órdenes. Puede estar vacía.
*/
public static void main (String[] args)
{
[Link]("Hola mundo!!!");
}
}

ING. ROBERTO CARLOS GUEVARA GENCHI 3


Programación de Sistemas

1.1.2 Características de Java


TIPOS DE DATOS
Los tipos de datos en Java se clasifican en tipos primitivos y tipos referenciados.
Hay ocho tipos primitivos de datos que podemos clasificar: en tipos numéricos y tipos
boolean. A su vez los tipos numéricos se clasifican en tipos enteros (byte, short, int,
long y char), y tipos reales (float y double).
Cada tipo primitivo tiene un rango diferente de valores positivos y negativos, excepto el
boolean que solo tiene dos valores:true y false.
LITERALES
Un literal es la expresión de un valor de tipo primitivo, de tipo String (cadena de
caracteres) o la expresión null (valor nulo o desconocido).
PALABRAS CLAVES
Las palabras clave son identificadores predefinidos que tienen un significado especial
para el compilador Java. El lenguaje Java, tiene las siguientes palabras clave:
abstract default if private throw
boolean do implements protected throws
break double import public transient
byte else instanceof return try
case extends int short void
catch final interface static volatile
char finally long super while
class float native switch
const for new synchronized
continue goto package this
EJEMPLO 1:
class CEcuacion
{
// El término de mayor grado tiene exponente 3 fijo

double c3, c2, c1, c0; // coeficientes

public void Ecuación(double a, double b, double c, double d)

ING. ROBERTO CARLOS GUEVARA GENCHI 4


Programación de Sistemas

{
c3 = a; c2 = b; c1 = c; c0 = d;
}
public double ValorPara(double x)
{
double resultado;
resultado = c3*x*x*x + c2*x*x + c1*x + c0;
return resultado; // devolver el valor calculado
}
}
EJEMPLO 2:
class CMiAplicacion
{
public static void main(String[] args)
{
CEcuacion ec1 = new CEcuacion();
[Link]ón(1, -3.2, 0, 7);

double r = [Link](1);
[Link](r);

r = [Link](1.5);
[Link](r);
}
}
EJERCICIO 1:
Que resultados se obtienen al realizar las operaciones siguientes.
int a=10, b=3, c=1, d, 3;
float x, y;
x=a/b;
c=a<b&&c;
d)a+b++;
y=(float)a/b;
Solución:
public class Ejercicio1
{
public static void main(String args[])
{

ING. ROBERTO CARLOS GUEVARA GENCHI 5


Programación de Sistemas

int a = 10, b = 3, d, e;
float x, y;
boolean c = true;
x = a / b; // x = 3, pues a y b son int
c = a < b && c; // error si 'c' es entero
d = a + b++; // d = 13, pues incrementa tras asignar
e = ++a - b; // e = 7, pues ++a = 11 y b = 4 (incrementado antes)
y = (float)a / b; // y = 2.75, pues hacemos una conversion cast
[Link]("Las soluciones son:");
[Link]("x = " + x);
[Link]("y = " + y);
[Link]("a = " + a);
[Link]("b = " + b);
[Link]("c = " + c);
[Link]("d = " + d);
[Link]("e = " + e);
}
}
EJERCICIO 2:
Escriba el valor ASCII de la 'q' y de la 'Q' sin consultar la tabla
Solución:
public class Ejercicio2
{
public static void main(String args[])
{
int q = 'q';
int Q = 'Q';

[Link]("El codigo ASCII del caracter 'q' es " + q);


[Link]("El codigo ASCII del caracter 'Q' es " + Q);
}
}
EJERCICIO 3:
Escriba las sentencias necesarias para evaluar la siguiente ecuación para valores de
a=5, b=-17, c=2, d=3.5, k=3 y x=10.5
Solución:
public class Ejercicio3

ING. ROBERTO CARLOS GUEVARA GENCHI 6


Programación de Sistemas

{
public static void main(String args[])
{
CEcuacion ec1 = new CEcuacion(5, -1.7, 2);

double r = [Link](10.5);
[Link]("El resultado es " + r);
}
}
class CEcuacion
{
private double c2, c1, c0;

public CEcuacion(double a, double b, double c)


{
c2 = a;
c1 = b;
c0 = c;
}
public double ValorPara(double x)
{
double solucion;

solucion = c2*x*x*x + c1*x*x - c0*x + 3;


return solucion;
}
}

ING. ROBERTO CARLOS GUEVARA GENCHI 7


Programación de Sistemas

1.1.3 Conceptos básicos de lenguaje de programación orientada a objetos


La programación orientada a objetos o POO (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 de ordenador. Está basado en varias técnicas, incluyendo
herencia, modularidad, polimorfismo y encapsulamiento. Su uso se popularizó a
principios de la década de 1990. En la actualidad, existe variedad de lenguajes de
programación que soportan la orientación a objetos.
Existe un acuerdo acerca de qué características contempla la "orientación a objetos",
las características siguientes son las más importantes:
 Abstracción: Denota las características esenciales de un objeto, donde se capturan
sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente"
abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse"
con otros objetos en el sistema sin revelar cómo se implementan estas
características. Los procesos, las funciones o los métodos pueden también ser
abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar
una abstracción.
 Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse
pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite
aumentar la cohesión de los componentes del sistema. Algunos autores confunden
este concepto con el principio de ocultación, principalmente porque se suelen
emplear conjuntamente.
 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 especifica
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.
 Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden
compartir el mismo nombre, al llamarlos por ese nombre se utilizará el
comportamiento correspondiente al objeto que se esté usando. O dicho de otro
modo, las referencias y las colecciones de objetos pueden contener objetos de
diferentes tipos, y la invocación de un comportamiento en una referencia producirá
el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto

ING. ROBERTO CARLOS GUEVARA GENCHI 8


Programación de Sistemas

ocurre en "tiempo de ejecución", esta última característica se llama asignación


tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos
(en "tiempo de compilación") de polimorfismo, tales como las plantillas y la
sobrecarga de operadores de C++.
 Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando
una jerarquía de clasificación. Los objetos heredan las propiedades y el
comportamiento de todas las clases a las que pertenecen. La herencia organiza y
facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos
y creados como tipos especializados de objetos preexistentes. Estos pueden
compartir (y extender) su comportamiento sin tener que volver a implementarlo.
Esto suele hacerse habitualmente agrupando los objetos en clases y estas en
árboles o enrejados que reflejan un comportamiento común. Cuando un objeto
hereda de más de una clase se dice que hay herencia múltiple.
 Recolección de basura: la Recolección de basura o Garbage Collector es la
técnica por la cual el ambiente de Objetos se encarga de destruir automáticamente,
y por tanto desasignar de la memoria, los Objetos que hayan quedado sin ninguna
referencia a ellos. Esto significa que el programador no debe preocuparse por la
asignación o liberación de memoria, ya que el entorno la asignará al crear un nuevo
Objeto y la liberará cuando nadie lo esté usando. En la mayoría de los lenguajes
híbridos que se extendieron para soportar el Paradigma de Programación Orientada
a Objetos como C++ u Object Pascal, esta característica no existe y la memoria
debe desasignarse manualmente.

1.2 ESTRUCTURAS DE CONTROL.


Durante un programa existen acciones que se han de repetir un número determinado
de veces. Por ejemplo, leer 3 caracteres de un flujo de entrada in se codificaría:
[Link]();
[Link]();
[Link]();
Este código además de poco elegante sería inviable para una repetición de 3000
lecturas. Por eso aparecen las estructuras de control, que facilitan que determinadas
acciones se realicen varias veces, mientras que una condición se cumpla, y en
definitiva, tomar decisiones de qué hacer en función de las condiciones que se den en
el programa en un momento dado de su ejecución.
Así, nuestro ejemplo se podría indicar como:
for ( int i=0 ; i <= 3 ; i++ )
[Link]();

ING. ROBERTO CARLOS GUEVARA GENCHI 9


Programación de Sistemas

Donde bastaría cambiar el 3 por cualquier otro número para que la lectura se repitiese
ese número de veces.
El lenguaje Java soporta las estructuras de control:

Sentencia Clave

Toma de
if-else, switch-case
decisión

Bucle for, while, do-while

break, continue, label:, return,


Misceláneo
goto

Tabla 18: Estructuras de control


Aunque goto es una palabra reservada, actualmente el lenguaje Java no soporta la sentencia goto.
Se puede utilizar las sentencias de bifurcación en su lugar.
1.2.1 La sentencia if - else
La sentencia if-else de Java dota a los programas de la habilidad de ejecutar distintos
conjuntos de sentencias según algún criterio.
La sintaxis de la sentencia if-else es:
if ( condición )
Bloque de código a ejecutar si la condición es cierta
else
Bloque de código a ejecutar si la condición es falsa
La parte del else es opcional, y un bloque de código puede ser simplemente la
sentencia vacía ; para representar que en ese caso no se ha de ejecutar nada.
Supongamos que un programa debe realizar diferentes acciones dependiendo de si el
usuario oprime el botón aceptar o el botón cancelar en una ventana de dialogo. Nuestro
programa puede realizar esto usando la sentencia if - else:
// La respuesta es Aceptar o Cancelar
if (respuesta == Aceptar) {
// código para realizar la acción Aceptar
[Link]( "Su peticion esta siendo atendida" );

ING. ROBERTO CARLOS GUEVARA GENCHI 10


Programación de Sistemas

}
else {
// código para realizar la acción Cancelar
[Link]( "Cancelando accion" );
}
Se pueden anidar expresiones if-else, para poder implementar aquellos casos con
múltiples acciones. Esto es lo que se suele denominar como sentencias else if.
Por ejemplo, supongamos que se desea escribir un programa que clasifique según el
contenido de una variable valor, asigne una letra a una variable clasificacion: A para un
valor del 100-91, B de 90-81, C para 80-71 y F si no es ninguno de los anteriores:
int valor;
char clasificacion;
if (valor > 90)
{clasificacion='A';}
else
if (valor > 80)
{clasificacion='B';}
else
if (valor > 70)
{clasificacion='C';}
else
{clasificacion='F';}
Se pueden escribir los if en las mismas líneas que los else, pero desde este tutorial se
insta a utilizar la forma indentada (como se ha podido ver en el ejemplo), pues es más
clara para el lector.
Este sistema de programación (else if) no es demasiado recomendable, y por ello el
lenguaje Java incluye la sentencia switch, que veremos a continuación, para dirigir el
flujo de control de variables con múltiples valores.
1.2.2 La sentencia switch
Mediante la sentencia switch se puede seleccionar entre varias sentencias según el
valor de cierta expresión.

ING. ROBERTO CARLOS GUEVARA GENCHI 11


Programación de Sistemas

La forma general de switch es la siguiente:


switch ( expresionMultivalor ) {
case valor1 : conjuntoDeSentencias; break;
case valor2 : conjuntoDeSentencias; break;
case valor3: conjuntoDeSentencias; break;
default: conjuntoDeSentencias; break;
}
La sentencia switch evalúa la expresiónMultivalor y ejecuta el conjuntoDeSentencias
que aparece junto a la cláusula case cuyo valor corresponda con el de la
expresiónMultivalor.
Cada sentencia case debe ser única y el valor que evalúa debe ser del mismo tipo que
el devuelto por la expresiónMultivalor de la sentencia switch.
Las sentencias break que aparecen tras cada conjuntoDeSentencias provocan que el
control salga del switch y continúe con la siguiente instrucción al switch. Las sentencias
break son necesarias porque sin ellas se ejecutarían secuencialmente las sentencias
case siguientes. Existen ciertas situaciones en las que se desea ejecutar
secuencialmente algunas o todas las sentencias case, para lo que habrá que eliminar
algunos break.
Finalmente, se puede usar la sentencia default para manejar los valores que no son
explícitamente contemplados por alguna de las sentencias case. Su uso es altamente
recomendado.
Por ejemplo, supongamos un programa con una variable entera meses cuyo valor
indica el mes actual, y se desea imprimir el nombre del mes en que estemos. Se puede
utilizar la sentencia switch para realizar esta operación:
int meses;
switch ( meses ){
case 1: [Link]( "Enero" ); break;
case 2: [Link]( "Febrero" ); break;
case 3: [Link]( "Marzo" ); break;
//Demas meses
// . . .
case 12: [Link]( "Diciembre" ); break;

ING. ROBERTO CARLOS GUEVARA GENCHI 12


Programación de Sistemas

default: [Link]( "Mes no valido" ); break;


}
Por supuesto, se puede implementar esta estructura como una sentencia if else if:
int meses;
if ( meses == 1 ) {
[Link]( "Enero" );
}
else
if ( meses == 2 ) {
[Link]( "Febrero" );
}
// Y así para los demás meses
El decidir si usar la sentencia if o switch depende del criterio de cada caso. Se puede
decidir cuál usar basándonos en la legibilidad, aunque se recomienda utilizar switch
para sentencias con más de tres o cuatro posibilidades.
1.2.3 Bucle while
El bucle while es el bucle básico de iteración. Sirve para realizar una acción
sucesivamente mientras se cumpla una determinada condición.
La forma general del bucle while es la siguiente:
while ( expresiónBooleana ) {
sentencias;
};
Las sentencias se ejecutan mientras la expresiónBooleana tenga un valor de
verdadero.
Se utiliza, por ejemplo para estar en un bucle del que no hay que salir hasta que no se
cumpla una determinada condición. Por ejemplo, multiplicar un número por 2 hasta que
sea mayor que 100:
int i = 1;
while ( i <= 100 ) {
i = i * 2;
}
ING. ROBERTO CARLOS GUEVARA GENCHI 13
Programación de Sistemas

Con él se podrían eliminar los bucles do-while y for por ser extensiones de éste, pero
que se incluyen en el lenguaje para facilitar la programación.
1.2.4 Bucle do-while
El bucle do-while es similar al bucle while, pero en el bucle while la expresión se evalúa
al principio del bucle y en el bucle do-while la evaluación se realiza al final.
La forma general del bucle do-while es la siguiente:
do {
sentencias;
} while ( expresiónBooleana );
La sentencia do-while es el constructor de bucles menos utilizado en la programación,
pero tiene sus usos, cuando el bucle deba ser ejecutado por lo menos una vez.
Por ejemplo, cuando se lee información de un archivo, se sabe que siempre se debe
leer por lo menos un carácter:
int c;
do {
c = [Link]( );
// Sentencias para tratar el carácter c
} while ( c != -1 ); // No se puede leer más (Fin fichero)
1.2.5 Bucle for
Mediante la sentencia for se resume un bucle do-while con una iniciación previa. Es
muy común que en los bucles while y do-while se inicien las variables de control de
número de pasadas por el bucle, inmediatamente antes de comenzar los bucles. Por
eso el bucle for está tan extendido.
La forma general de la sentencia for es la siguiente:
for ( iniciación ; terminación ; incremento )
sentencias;
La iniciación es una sentencia que se ejecuta una vez antes de entrar en el bucle.
La terminación es una expresión que determina cuándo se debe terminar el bucle. Esta
expresión se evalúa al final de cada iteración del bucle. Cuando la expresión se evalúa
a falso, el bucle termina.

ING. ROBERTO CARLOS GUEVARA GENCHI 14


Programación de Sistemas

El incremento es una expresión que es invocada en cada iteración del bucle. En


realidad puede ser una acción cualquiera, aunque se suele utilizar para incrementar
una variable contador:
for ( i = 0 ; i < 10 ; i++ )
Algunos (o todos) estos componentes pueden omitirse, pero los puntos y coma siempre
deben aparecer (aunque sea sin nada entre sí).
Se debe utilizar el bucle for cuando se conozcan las restricciones del bucle (su
instrucción de iniciación, criterio de terminación e instrucción de incremento).
Por ejemplo, los bucles for son utilizados comúnmente para iterar sobre los elementos
de una matriz, o los caracteres de una cadena:
// cad es una cadena (String)
for ( int i = 0; i < [Link]() ; i++){
// hacer algo con el elemento i-ésimo de cad
}

1.2.6 Sentencia break


La sentencia break provoca que el flujo de control salte a la sentencia inmediatamente
posterior al bloque en curso. Ya se ha visto anteriormente la sentencia break dentro de
la sentencia switch.
El uso de la sentencia break con sentencias etiquetadas es una alternativa al uso de la
sentencia goto, que no es soportada por el lenguaje Java.
Se puede etiquetar una sentencia poniendo una identificador Java válido seguido por
dos puntos antes de la sentencia:
nombreSentencia: sentenciaEtiquetada
La sentencia break se utiliza para salir de una sentencia etiquetada, llevando el flujo del
programa al final de la sentencia de programa que indique:
break nombreSentencia2;
Un ejemplo de esto sería el programa:
void gotoBreak() {
[Link]("Ejemplo de break como 'goto' ");
a: for( int i=1; i<10; i++ ){
[Link](" i="+i);
for( int j=1; j<10; j++ ){

ING. ROBERTO CARLOS GUEVARA GENCHI 15


Programación de Sistemas

if ( j==5 )
break a; //Sale de los dos bucles!!!
[Link](" j="+j);
}
[Link]("No llega aquí");
}
}
Al interpretar break a, no solo se rompe la ejecución del bucle interior (el de j), sino que
se salta al final del bucle i, obteniéndose:
i=1 j=1 j=2 j=3
Nota: Se desaconseja esta forma de programación, basada en goto, y con saltos de
flujo no controlados.
1.2.7 Sentencia continue
Del mismo modo que en un bucle se puede desear romper la iteración, también se
puede desear continuar con el bucle, pero dejando pasar una determinada iteración.
Se puede usar la sentencia continue dentro de los bucles para saltar a otra sentencia,
aunque no puede ser llamada fuera de un bucle.
Tras la invocación a una sentencia continue se transfiere el control a la condición de
terminación del bucle, que vuelve a ser evaluada en ese momento, y el bucle continúa
o no dependiendo del resultado de la evaluación. En los bucles for además en ese
momento se ejecuta la cláusula de incremento (antes de la evaluación). Por ejemplo el
siguiente fragmento de código imprime los números del 0 al 9 no divisibles por 3:
for ( int i = 0 ; i < 10 ; i++ ) {
if ( ( i % 3 ) == 0 )
continue;
[Link]( " " + i );
}
Del mismo modo que break, en las sentencias continue se puede indicar una etiqueta
de bloque al que hace referencia. Con ello podemos referirnos a un bloque superior, si
estamos en bucles anidados. Si dicha etiqueta no es indicada, se presupone que nos
referimos al bucle en el que la sentencia continue aparece.
Por ejemplo, el siguiente fragmento de código:

ING. ROBERTO CARLOS GUEVARA GENCHI 16


Programación de Sistemas

void gotoContinue( ) {
f: for ( int i=1; i <5; i++ ) {
for ( int j=1; j<5; j++ ) {
if ( j>i ) {
[Link](" ");
continue f;
}
[Link]( " " + (i*j) );
}
}
}
En este código la sentencia continue termina el bucle de j y continua el flujo en la
siguiente iteración de i. Ese método imprimiría:
1
2 4
3 6 9
4 8 12 16
Nota: Se desaconseja esta forma de programación, basada en goto, y con saltos de
flujo no controlados.
1.2.8 Sentencia return
La última de las sentencias de salto es la sentencia return, que puede usar para salir
del método en curso y retornar a la sentencia dentro de la cual se realizó la llamada.
Para devolver un valor, simplemente se debe poner el valor (o una expresión que
calcule el valor) a continuación de la palabra return. El valor devuelto por return debe
coincidir con el tipo declarado como valor de retorno del método.
Cuando un método se declara como void se debe usar la forma de return sin indicarle
ningún valor. Esto se hace para no ejecutar todo el código del programa:
int contador;
boolean condicion;
int devuelveContadorIncrementado(){
return ++contador;
ING. ROBERTO CARLOS GUEVARA GENCHI 17
Programación de Sistemas

}
void metodoReturn(){
//Sentencias
if ( condicion == true )
return;
//Más sentencias a ejecutar si condición no vale true
}
1.2.9 Excepciones
Las excepciones son otra forma más avanzada de controlar el flujo de un programa.
Con ellas se podrán realizar acciones especiales si se dan determinadas condiciones,
justo en el momento en que esas condiciones se den.

ING. ROBERTO CARLOS GUEVARA GENCHI 18


Programación de Sistemas

1.3 ESTRUCTURA DE UN PROGRAMA ORIENTADO A OBJETOS.


1.3.1 Estructura de un programa en Java
La estructura de un programa de Java es similar a la de un programa de C/C++. Por su
diseño, permite a los programadores de cualquier otro lenguaje leer código en Java sin
mucha dificultad. Java emplea siempre la Programación Orientada a Objetos por lo que
todo el código se incluye dentro de las clases. Aunque ya se explicarán detenidamente
más adelante, las clases son combinaciones de datos (constantes y variables) y rutinas
(métodos).
1.3.2 La clase principal y el método main
Un programa puede construirse empleando varias clases. En el caso más simple se
utilizará una única clase. Esta clase contiene el programa, rutina o método principal:
main() y en éste se incluyen las sentencias del programa principal. Estas sentencias se
separan entre sí por caracteres de punto y coma.
La estructura de un programa simple en Java es la siguiente:
public class ClasePrincipal {
public static void main(String[] args) {
sentencia_1;
sentencia_2;
// ... sentencia_N;
}
}
Como primer ejemplo sencillo de programa escrito en Java se va a utilizar uno que
muestra un mensaje por la pantalla del ordenador. Por ejemplo, el programa [Link]:
/**
*La clase hola muestra un mensaje en pantalla
*/
public class Hola {
public static void main(String[] args) {
[Link]("Hola, ");
[Link]("Hasta luego");
}
}

ING. ROBERTO CARLOS GUEVARA GENCHI 19


Programación de Sistemas

Como se ha indicado anteriormente, en un programa de Java todo se organiza dentro


de las clases. En el ejemplo anterior, Hola es el nombre de la clase principal y del
archivo que contiene el código fuente. Todos los programas o aplicaciones
independientes escritas en Java tienen un método main o principal que, a su vez,
contiene un conjunto de sentencias. En Java los conjuntos o bloques de sentencias se
indican entre llaves { }. En el caso anterior, el conjunto de sentencias se reduce a tres
sentencias, que son llamadas a dos métodos predefinidos en Java (print y println) que
permiten visualizar texto por el dispositivo de salida de datos por defecto (la pantalla).
Por el momento y hasta que se explique con detalle el concepto de clase, los ejemplos
de programa que se utilizarán constarán de una sóla clase en la que se declara el
método main. Este método es el punto de arranque de la ejecución de todo programa
en Java.
1.3.3 Comentarios
Los comentarios se emplean para facilitar la tarea de los programadores humanos ya
que no realizan ningún papel activo en la generación del código. Los comentarios que
se pueden introducir en el código fuente de un programa de Java son del estilo de C y
C++. Así, el compilador ignora todo lo que se incluya entre la secuencia de caracteres //
y el final de la línea. Por ejemplo:
// Este es un comentario estilo C++, llega al final de la linea
La pareja de caracteres / hay que escribirla sin dejar ningún espacio en blanco entre
ellos. El segundo tipo de comentario es el que se utiliza también en el lenguaje de
programación C: el compilador también ignora todo lo que se incluya entre las
secuencias de caracteres /* y */. Por ejemplo:
/* En este otro comentario estilo C, el final lo indica la marca */
El comentario con // es más fácil de teclear si sólo ocupa una línea, pero si ocupa
varias, entonces el más sencillo es el de /*... */. Los comentarios pueden incluir
cualquier carácter válido en Unicode y no pueden anidarse.
Estos dos formatos de comentario se emplean para los denominados comentarios de
implementación. Los comentarios de implementación se utilizan en el programa fuente
para resaltar código o para aclarar un desarrollo en particular.
Además, en Java existe un tercer tipo de comentario (doc comments) que
facilita la generación de documentación en formato HTML al emplear algunas
herramientas de documentación (por ejemplo, javadoc incluida en el Kit de Desarrollo
de Java). Los comentarios para la documentación se emplean para describir la
especificación del código, desde una perspectiva independiente cómo se ha
implementado y ser leido por desarrolladores que no tengan necesariamente el

ING. ROBERTO CARLOS GUEVARA GENCHI 20


Programación de Sistemas

código fuente a la vista. Debe evitarse emplear los comentarios para dar panorámicas
del código y facilitar información que no facilite la propia lectura del código. Ejemplos de
este tipo de comentarios:
/** Comentario estilo javadoc**/
/*
* Muchos programadores suelen incluir un asterisco al principio de linea
*/
Los comentarios deberían contener sólo información relevante para la lectura y
comprensión del programa. Todos los programas deben empezar por un comentario
que describa el propósito del programa. La discusión de decisiones de diseño que no
sean obvias (triviales) es apropiada, pero debe evitarse la duplicidad de información
dada por el propio código. Es muy común que los comentarios redundantes se
desactualicen. En general, se debe evitar incluir comentarios que puedan quedarse
obsoletos conforme el código se desarrolle. Por ejemplo, dentro de un comentario no
debería incluirse información acerca de cómo se ha construido un archivo fuente
determinado o en que directorio se haya el código.
A veces la frecuencia de los comentarios refleja una peor calidad de código. Cuando se
sienta la necesidad de añadir un comentario, debe considerarse la reescritura del
código para hacerlo más claro.
[Link] Convención para los comentarios al inicio de los programas
Todos los archivos fuente deberían comenzar con un comentario estilo C que liste el
nombre de la clase, información de la versión, fecha y el aviso de copyright:
/*
* Información de la version
* Fecha
* Aviso de Copyright
*/
1.3.4 Identificadores
Los identificadores son nombres que se les asignan a variables, métodos, clases… en
el código fuente de un programa. Los identificadores sólo existen en el código del
programa fuente y no en el programa objeto (resultado de la compilación del programa
fuente). Todo nuevo identificador que se emplee en un programa Java debe
definirse previamente a su utilización. Las normas para la construcción de un
identificador empleando el lenguaje de programación Java son las siguientes:

ING. ROBERTO CARLOS GUEVARA GENCHI 21


Programación de Sistemas

 Un identificador comienza por una letra, un carácter de subrayado (_) o un carácter


de dólar ($). Aunque no se recomienda emplear el carácter $, ya que el compilador
suele utilizarlos de forma interna para crear identificadores propios.
 Los siguientes caracteres pueden ser también dígitos. Pero no pueden emplearse
espacios en blanco u otros caracteres como el signo de interrogación (?) o el signo
del tanto por ciento (%).
 No hay límite máximo de caracteres.
 En los identificadores del código fuente de un programa en Java se distinguen las
mayúsculas de las minúsculas. Por ejemplo, casa, CASA y Casa son tres
identificadores diferentes.
 Pueden incluir caracteres Unicode, con lo que se pueden emplear secuencias de
escape /uxxxx para representar estos caracteres.
 No puede emplearse el identificador de una variable o cualquier otro elemento del
código fuente del programa para otro ya existente en el mismo bloque. Excepción:
variable miembro y local con el mismo identificador.
 Existe una serie de palabras reservadas que no pueden emplearse como
identificadores por el programador en el código fuente para otros usos. Por ejemplo,
la palabra double se utiliza para definir un tipo de dato real y la palabra for se
emplea para construir un tipo determinado de bucle.
Palabras reservadas en Java
abstract do implements protected throw
boolean double import public throws
break else instanceof rest transient
byte extends int return true
case false interface short try
catch final long static void
char finally native strictfp volatile
class float new super while
const* for null switch
continue goto* package synchronized
default if private this
Algunos de estos identificadores reservados no tienen todavía uso en la
implementación actual del lenguaje Java. En concreto, los identificadores marcados
con un asterisco * no se utilizan actualmente. Por otro lado en la Tabla 2.2 se muestran
los nombres de métodos reservados en Java cuyo significado y utilización se explicará
más adelante cuando se menciones la clase predefinida Object.
Identificadores de métodos reservados en Java
clone equals finalize getClass hashCode
notify notifyAll toString wait

ING. ROBERTO CARLOS GUEVARA GENCHI 22


Programación de Sistemas

1.4 DEFINICION DE OBJETOS Y CLASES.


1.4.1 Estructura de una Clase
Las clases son declaraciones o abstracciones de objetos, lo que significa, que una
clase es la definición de un objeto. Cuando se programa un objeto y se definen sus
características y funcionalidades, realmente se programa una clase. Cada una de estas
clases incluye dos partes fácilmente diferenciales: los atributos y los métodos. Los
atributos definen el estado de cada uno de los objetos de esa clase y los métodos su
comportamiento.

Objeto

Mensajes atributos

métodos

public class Classname


{ ...// definición de variables y métodos
}
Las características de una clase son las siguientes:
1) Todas las variables y funciones de Java deben pertenecer a una clase.
2) Si una clase deriva de otra (extends), hereda todas sus variables y métodos.
3) Java tiene una jerarquía de clases estándar de la que pueden derivar las clases que
crean los usuarios.
4) En Java no hay herencia múltiple.
5) En un fichero se pueden definir varias clases, pero en un fichero no puede haber
más que una clase public.
6) Si una clase contenida en un fichero no es public, no es necesario que el fichero se
llame como la clase.
7) Los métodos de una clase pueden referirse de modo global al objeto de esa clase al
que se aplican por medio de la referencia this.

ING. ROBERTO CARLOS GUEVARA GENCHI 23


Programación de Sistemas

8) Las clases se pueden agrupar en packages, introduciendo una línea al comienzo del
fichero (package packageName;).
EJEMPLO 1:
class CCuenta
{
// Atributos
private String nombre;
private String cuenta;
private double saldo;
private double tipoDeInterés;
// Métodos
public CCuenta() {}
public CCuenta(String nom, String cue, double sal, double
tipo)
{
asignarNombre(nom);
asignarCuenta(cue);
ingreso(sal);
asignarTipoDeInterés(tipo);
}
public void asignarNombre(String nom)
{
if ([Link]() == 0)
{
[Link]("Error: cadena vacía");
return;
}
nombre = nom;
}
public String obtenerNombre()
{
return nombre;
}
public void asignarCuenta(String cue)
{
if ([Link]() == 0)
{
[Link]("Error: cuenta no válida");
return;

ING. ROBERTO CARLOS GUEVARA GENCHI 24


Programación de Sistemas

}
cuenta = cue;
}
public String obtenerCuenta()
{
return cuenta;
}
public double estado()
{
return saldo;
}
public void ingreso(double cantidad)
{
if (cantidad < 0)
{
[Link]("Error: cantidad negativa");
return;
}
saldo += cantidad;
}
public void reintegro(double cantidad)
{
if (saldo - cantidad < 0)
{
[Link]("Error: no dispone de saldo");
return;
}
saldo -= cantidad;
}
public void asignarTipoDeInterés(double tipo)
{
if (tipo < 0)
{
[Link]("Error: tipo no válido");
return;
}
tipoDeInterés = tipo;
}
public double obtenerTipoDeInterés()
{

ING. ROBERTO CARLOS GUEVARA GENCHI 25


Programación de Sistemas

return tipoDeInterés;
}
}

1.5 DEFINICION Y CARACTERISITICAS DE METODOS.


1.5.1 Estructura de un Método
Un método es una colección de sentencias que ejecutan una tarea específica. En Java,
un método siempre pertenece a una clase y su definición nunca puede contener a la
definición de otro método; esto es, Java no permite métodos anidados.
La definición de un método consta de una cabecera y del cuerpo del método encerrado
entre llaves. La sintaxis para escribir un método es la siguiente:
[modificador] tipo-resuelto nombre-método ([lista de parámetros])
{
declaraciones de variables locales;
sentencias;
[return [(]expresión[)]];
}

Las variables declaradas en el cuerpo del método son locales a dicho método y por
definición solamente son accesibles dentro del mismo.
El tipo del resultado especifica que tipo de valor retorna el método. Este, puede ser
cualquier tipo primitivo o referenciado. Para indicar que no se devuelve nada, se utiliza
la palabra reservada void.
EJEMPLO 1:
/**
* Conversión de grados centígrados a fahrenheit:
* F = 9/5 * C + 32
*/
import [Link]; // importar la clase System
class CApGrados
{

ING. ROBERTO CARLOS GUEVARA GENCHI 26


Programación de Sistemas

// Definición de constantes
final static int limInferior = -30;
final static int limSuperior = 100;
final static int incremento = 6;

public static void main(String[] args)


{
// Declaración de variables
CGrados grados = new CGrados(); // objeto grados
int gradosCent = limInferior;
float gradosFahr = 0;

while (gradosCent <= limSuperior) // while ... hacer:


{
// Asignar al objeto grados el valor en grados centígrados
[Link]ígradosAsignar(gradosCent);
// Obtener del objeto grados los grados fahrenheit
gradosFahr = [Link]();
// Escribir la siguiente línea de la tabla
[Link](gradosCent + " C" + "\t" + gradosFahr + " F");
// Siguiente valor
gradosCent += incremento;
}
}
}
EJERCICIO 1:
Modifique los límites inferior y superior de los grados centígrados, el incremento, y
ejecute el nuevo programa.
Solución:

ING. ROBERTO CARLOS GUEVARA GENCHI 27


Programación de Sistemas

/**
* Conversión de grados centígrados a fahrenheit:
* F = 9/5 * C + 32
*/
import [Link]; // importar la clase System
class CApGrados
{
// Definición de constantes
final static int limInferior = -30;
final static int limSuperior = 100;
final static int incremento = 6;

public static void main(String[] args)


{
// Declaración de variables
CGrados grados = new CGrados(); // objeto grados
int gradosCent = limInferior;
float gradosFahr = 0;

while (gradosCent <= limSuperior) // while ... hacer:


{
// Asignar al objeto grados el valor en grados centígrados
[Link]ígradosAsignar(gradosCent);
// Obtener del objeto grados los grados fahrenheit
gradosFahr = [Link]();
// Escribir la siguiente línea de la tabla
[Link](gradosCent + " C" + "\t" + gradosFahr + " F");
// Siguiente valor
gradosCent += incremento;

ING. ROBERTO CARLOS GUEVARA GENCHI 28


Programación de Sistemas

}
}
}
EJERCICIO 2:
Modifique del programa anterior, la sentencia:
return 9F/5F*gradosC+32;
correspondiente al método FahrenheitObtener de la clase CGrados, como se
muestra a continuación:
return 9/5*gradosC+32;

Solución:
/**
* Clase CGrados. Un objeto de esta clase almacena un valor
* en grados centígrados.
* Atributos:
* gradosC
* Métodos:
* CentígradosAsignar, FahrenheitObtener y CentígradosObtener
*/
class CGrados
{
private float gradosC; // grados centígrados

public void CentígradosAsignar(float gC)


{
// Establecer el atributo grados centígrados
gradosC = gC;
}

ING. ROBERTO CARLOS GUEVARA GENCHI 29


Programación de Sistemas

public float FahrenheitObtener()


{
// Retornar los grados fahrenheit equivalentes a gradosC
// 9/5: la división de dos enteros da otro entero; en este caso 1.
// Por eso utilizamos la expresión 9F/5F.
return 9F/5F * gradosC + 32;
}

public float CentígradosObtener()


{
return gradosC; // retornar los grados centígrados
}
}
EJERCICIO 3:
Reconstruya el ejercicio 1 para que ambas clases, CGrados y CapGrados, estén
almacenadas en un único fichero.

Solución:
import [Link]; // importar la clase System
/**
* Clase CGrados. Un objeto de esta clase almacena un valor
* en grados centígrados.
* Atributos:
* gradosC
* Métodos:
* CentígradosAsignar, FahrenheitObtener y CentígradosObtener
*/
class CGrados
{

ING. ROBERTO CARLOS GUEVARA GENCHI 30


Programación de Sistemas

private float gradosC; // grados centígrados

public void CentígradosAsignar(float gC)


{
// Establecer el atributo grados centígrados
gradosC = gC;
}

public float FahrenheitObtener()


{
// Retornar los grados fahrenheit equivalentes a gradosC
return 9F/5F * gradosC + 32;
}

public float CentígradosObtener()


{
return gradosC; // retornar los grados centígrados
}
}

/**
* Conversión de grados centígrados a fahrenheit:
* F = 9/5 * C + 32
*/

class CApGrados
{
// Definición de constantes
final static int limInferior = -30;

ING. ROBERTO CARLOS GUEVARA GENCHI 31


Programación de Sistemas

final static int limSuperior = 100;


final static int incremento = 6;
public static void main(String[] args)
{
// Declaración de variables
CGrados grados = new CGrados(); // objeto grados
int gradosCent = limInferior;
float gradosFahr = 0;

while (gradosCent <= limSuperior) // while ... hacer:


{
// Asignar al objeto grados el valor en grados centígrados
[Link]ígradosAsignar(gradosCent);
// Obtener del objeto grados los grados fahrenheit
gradosFahr = [Link]();
// Escribir la siguiente línea de la tabla
[Link](gradosCent + " C" + "\t" + gradosFahr + " F");
// Siguiente valor
gradosCent += incremento;
}
}
}

ING. ROBERTO CARLOS GUEVARA GENCHI 32


Programación de Sistemas

DESARROLLA PROGRAMAS ORIENTADOS A OBJETOS DE ACUERDO CON LA


INTERFAZ GRÁFICA A UTILIZAR.
Programa de estudios de la unidad de aprendizaje programación de sistemas.

1.6 CARACTERISTICAS DE LA PROGRAMACION GRAFICA ORIENTADA A


OBJETOS
El paquete Swing es el nuevo paquete gráfico que ha aparecido en la versión 1.2
de Java. Está compuesto por un amplio conjunto de componentes de interfaces de
usuario que funcionen en el mayor número posible de plataformas.
Cada uno de los componentes de este paquete puede presentar diversos aspectos y
comportamientos en función de una biblioteca de clases. En la versión 1.0 de
Swing, que corresponde a la distribuida en la versión 1.2 de la API de Java se incluyen
tres bibliotecas de aspecto y comportamiento para Swing:
• metal.}ar: Aspecto y comportamiento independiente de la plataforma.
• motif.}ar: Basado en la interfaz Sun Motif.
• windows.}ar: Muy similar a las interfaces Microsoft Windows 95.
La siguiente imagen muestra una aplicación de ejemplo (adjunta al JDK 1.2)
que muestra las diferentes interfaces para una misma aplicación según se utilice una u
otra biblioteca:
Imagen 8: Diferentes aspectos de
una interfaz Swing
Es la nueva clase denominada
UiManager la que se encarga del
aspecto y comportamiento de una
aplicación Swing en un entorno de
ejecución.
En el apartado "VI.3. E}emplo de
creación de una applet" se
muestra un breve ejemplo de cómo
utilizar las clases de Swing para
crear una aplicación utilizando
Swing.

ING. ROBERTO CARLOS GUEVARA GENCHI 33


Programación de Sistemas

1.6.1 Nuevas Características


La arquitectura Swing presenta una serie de ventajas respecto a su antecedente
AWT:
• Amplia variedad de componentes: En general las clases que comiencen por "J"
son componentes que se pueden añadir a la aplicación. Por ejemplo: JButton.

• Aspecto modificable (look and feel): Se puede personalizar el aspecto de


las interfaces o utilizar varios aspectos que existen por defecto (Metal Max,
Basic Motif, Window Win32).
• Arquitectura Modelo-Vista-Controlador: Esta arquitectura da lugar a todo un
enfoque de desarrollo muy arraigado en los entornos gráficos de usuario realizados
con técnicas orientadas a objetos. Cada componente tiene asociado una clase de
modelo de datos y una interfaz que utiliza. Se puede crear un modelo de datos
personalizado para cada componente, con sólo heredar de la clase Model.
• Gestión mejorada de la entrada del usuario: Se pueden gestionar combinaciones
de teclas en un objeto KeyStroke y registrarlo como componente. El evento se
activará cuando se pulse dicha combinación si está siendo utilizado el
componente, la ventana en que se encuentra o algún hijo del componente.
• Objetos de acción (action ob}ects): Estos objetos cuando están activados
(enabled) controlan las acciones de varios objetos componentes de la interfaz. Son
hijos de ActionListener.
• Contenedores anidados: Cualquier componente puede estar anidado en otro.
Por ejemplo, un gráfico se puede anidar en una lista.
• Escritorios virtuales: Se pueden crear escritorios virtuales o "interfaz de múltiples
documentos" mediante las clases JDesktopPane y JInternalFrame.
• Bordes complejos: Los componentes pueden presentar nuevos tipos de
bordes.
Además el usuario puede crear tipos de bordes personalizados.
• Diálogos personalizados: Se pueden crear multitud de formas de mensajes
y opciones de diálogo con el usuario, mediante la clase JOptionPane.
• Clases para diálogos habituales: Se puede utilizar JFileChooser para elegir
un fichero, y JColorChooser para elegir un color.
• Componentes para tablas y árboles de datos: Mediante las clases JTable y
JTree.
• Potentes manipuladores de texto: Además de campos y áreas de texto, se
presentan campos de sintaxis oculta JPassword, y texto con múltiples fuentes
JTeetPane. Además hay paquetes para utilizar ficheros en formato HTML o RTF.
• Capacidad para "deshacer": En gran variedad de situaciones se pueden deshacer
las modificaciones que se realizaron.

ING. ROBERTO CARLOS GUEVARA GENCHI 34


Programación de Sistemas

• Soporte a la accesibilidad: Se facilita la generación de interfaces que ayuden a


la accesibilidad de discapacitados, por ejemplo en Braille.

1.6.2 Principales Clases


Las clases de Swing se parecen mucho a las de AWT.
Todas las clases explicadas en el apartado "IV.2 AWT" de este tutorial tienen una
nueva versión en Swing con el prefijo J. Así la clase Panel de AWT tiene una clase
JPanel en Swing. Esto se cumple para todas las clases menos para Choice, Canvas,
FileDialgog y ScrollPane.
De hecho todas las clases componentes de Swing (clases hijas de JComponent),
son hijas de la clase Component de AWT.

• ButtonGroup: Muestra una lista de elementos (JRadioButton) con solo uno


seleccionable. Cada elemento tiene un círculo, que en caso del
elemento seleccionado contendrá un "punto".
• JToggleButton: Es como un botón normal, pero al ser pinchado por el usuario
queda activado.
• JProgressBar: Representa una barra de estado de progreso, mediante la
que habitualmente se muestra el desarrollo de un proceso en desarrollo (ejemplo: la
instalación de una aplicación).
• JTabbedPane: Es una ventana con solapas (la que utiliza Windows).
Este componente había sido muy solicitado.
• JApplet: Aunque ya existía una clase Applet en AWT, esta nueva versión
es necesaria para crear applets Java que utilicen interfaces Swing.
Por supuesto Swing no se limita a estas clases, sino que posee muchas más con
diversas funcionalidades. Para estudiarlas consulte la documentación del JDK 1.2 de
Java.

1.6.3 Nuevos Gestores de Impresión


Swing incorpora nuevos gestores de impresión, ampliando los cinco que AWT
incorporaba. Entre ellos conviene destacar los siguientes:
• BoeLayout: Es similar al FlowLayout de AWT, con la diferencia de que con él se
pueden especificar los ejes (x o y). Viene incorporada en el componente Boe, pero
está disponible como una opción en otros componentes.
• OverlayLayout: Todos los componentes se añaden encima de cada
componente previo.
• SpringLayout: El espacio se asigna en función de una serie de
restricciones asociadas con cada componente.
• ScrollPaneLayout: Incorporado en el componente ScrollPane.

ING. ROBERTO CARLOS GUEVARA GENCHI 35


Programación de Sistemas

• ViewportLayout: Incorporado en el componente Viewport.

1.6.4 Jrootpane
La clase JRootPane permite colocar contenido de las applets creadas con la
clase
JApplet en un determinado plano de impresión (capa).
Por orden de cercanía al usuario, estas capas son:
• glassPane: Una capa que abarca toda la parte visible (por defecto no es visible).
• layeredPane: Una subclase de JComponent diseñada para contener cuadros
de diálogo, menús emergentes y otros componentes que deben aparecer flotando
entre el usuario y el contenido.
• menubar: Una capa opcional, que si aparece estará anclada en la parte superior.
• contenPane: La capa en que se dibujará la mayor parte del contenido.
Así pues cada vez que se vayan a añadir componentes a una applet de clase
JApplet, debe añadirse a uno de estas capas. Por ejemplo:
La [Link]().add( unComponente );

1.6.5 NUEVOS EVENTOS DE SWING


Swing incorpora su nuevo conjunto de eventos para sus componentes.

[Link] Eventos físicos


Sólo aparecen dos nuevos eventos físicos, descendientes de InputEvent:
• MenuKeyEvent: Un menú de árbol ha recibido un evento de KeyEvent (acción
sobre el ratón).
• MenuDragMouseEvent: Un menú de árbol ha recibido un evento de
MouseEvent
(pulsación de una tecla).

[Link] Eventos semánticos


Son todos hijos del evento de AWT AWTEvent, que es el evento base de la jerarquía
de eventos:
• AncestorEvent: Antecesor añadido desplazado o eliminado.
• CaretEvent: El signo de intercalación del texto ha cambiado.
• ChangeEvent: Un componente ha sufrido un cambio de estado.
• DocumentEvent: Un documento ha sufrido un cambio de estado.
• HyperlinkEvent: Algo relacionado con un vínculo hipermedia ha cambiado.

ING. ROBERTO CARLOS GUEVARA GENCHI 36


Programación de Sistemas

• InternalFrameEvent: Un AWTEvent que añade soporte para objetos


JInternalFrame.
• ListDataEvent: El contenido de una lista ha cambiado o se ha añadido o
eliminado un intervalo.
• ListSelectionEvent: La selección de una lista ha cambiado.
• MenuEvent: Un elemento de menú ha sido seleccionado o mostrado o bien
no seleccionado o cancelado.
• PopupMenuEvent: Algo ha cambiado en JPopupMenu.
• TableColumnModelEvent: El modelo para una columna de tabla ha cambiando.
• TableModelEvent: El modelo de una tabla ha cambiado.
• TreeEepansionEvent: El nodo de un árbol se ha extendido o se ha colapsado.
• TreeModelEvent: El modelo de un árbol ha cambiado.
• TreeSelectionEvent: La selección de un árbol ha cambiado de estado.
• UndoableEditEvent: Ha ocurrido una operación que no se puede realizar.

1.6.6 EL PATRÓN DE DISEÑO MODELO-VISTA-CONTROLADOR


Muchos de los componentes Swing están basados en un patrón de diseño
denominado
"Modelo-Vista-Controlador".
El concepto de este patrón de diseño se basa en tres elementos:
• Modelo: Almacena el estado interno en un conjunto de clases.
• Vista: Muestra la información del modelo
• Controlador: Cambia la información del modelo (delegado).

ING. ROBERTO CARLOS GUEVARA GENCHI 37


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 38


Programación de Sistemas

DESARROLLA PROGRAMAS GRÁFICOS CON BASE EN LA IMPLEMENTACIÓN DE LA


HERENCIA DE OBJETOS.

Programa de estudios de la unidad de aprendizaje programación de sistemas.

2.3 Herencia
Es una propiedad que permite que los objetos sean creados a partir de otros ya
existentes, obteniendo características (métodos y atributos) similares a los ya
existentes. Es la relación entre una clase general y otra clase más específica. Es un
mecanismo que nos permite crear clases derivadas a partir de clase base, Nos permite
compartir automáticamente métodos y datos entre clases subclases y objetos.

En los lenguajes que cuentan con un sistema de tipos fuerte y estrictamente restrictivo
con el tipo de datos de las variables, la herencia suele ser un requisito fundamental
para poder emplear el Polimorfismo, al igual que un mecanismo que permita decidir en
tiempo de ejecución qué método debe invocarse en respuesta a la recepción de un
mensaje, conocido como enlace tardío (late binding) o enlace dinámico (dynamic
binding).

Generalmente, la herencia permite obtener las siguientes ventajas:

 Ayuda a los programadores a ahorrar código y tiempo, ya que la clase padre ha


sido implementada y verificada con anterioridad, restando solo referenciar desde la
clase derivada a la clase base (que suele ser extends, inherits, subclass u otras
palabras clave similares, dependiendo del lenguaje).

 Los objetos pueden ser construidos a partir de otros similares. Para ello es
necesario que exista una clase base (que incluso puede formar parte de una
jerarquía de clases más amplia).

 La clase derivada hereda el comportamiento y los atributos de la clase base, y es


común que se le añada su propio comportamiento o que modifique lo heredado.

 Toda clase pueden servir como clase base para crear otras.

ING. ROBERTO CARLOS GUEVARA GENCHI 39


Programación de Sistemas

Ejemplo:

import javax.*;

import [Link];

public class Mamifero{

private int patas;

private String nombre;

public void imprimirPatas(){

[Link](null," Tiene " + patas + " patas\n",


"Mamifero", JOptionPane.INFORMATION_MESSAGE);

public Mamifero(String nombre, int patas){

[Link] = nombre;

[Link] = patas;

public class Perro extends Mamifero {

public Perro(String nombre){

super(nombre, 4);

public class Gato extends Mamifero {

public Gato(String nombre){

super(nombre, 4);

}}

ING. ROBERTO CARLOS GUEVARA GENCHI 40


Programación de Sistemas

public class CrearPerro {

public static void main(String[] args) {

Perro perrito = new Perro("Pantaleon");

[Link](); /*Está en la clase mamífero*/

Se declaran las clases mamíferos, gato y perro, haciendo que gato y perro sean
unos mamíferos (derivados de esta clase), y se ve como a través de ellos se nombra al
animal pero así también se accede a patas dándole el valor por defecto para esa
especie.

Cabe mencionar que los especificadores de acceso (private, protected, public) de los
miembros de la superclase afectan también a la herencia:

 Private: ningún miembro privado de la superclase es visible en la subclase.

 Protected: los miembros protegidos de la superclase son visibles en la subclase,


pero no visibles para el exterior.

 Public: los miembros públicos de la superclase siguen siendo públicos en la


subclase.

En la clase derivada se puede redefinir algún método existente en la clase base, con el
objeto de proveer una implementación diferente. Para redefinir un método en la
subclase, basta con declararlo nuevamente con la misma signatura (nombre y
parámetros).

2.3.1 Jerarquía de clases:

Según el Dictionary of OT la jerarquía es “cualquier clasificación u ordenación de


abstracciones en una estructura de árbol. Algunos tipos de Jerarquía son: Jerarquía de
agregación, jerarquía de clases, jerarquía de herencia, jerarquía de partición, jerarquía
de especialización, jerarquía de tipo. Éste concepto es sumamente importante ya que
con ello conocemos la importancia de dividir los problemas en una jerarquía de ideas.
Los dos tipos importantes de jerarquía son: generalización/especialización y todo/parte.

La jerarquía de generalización/especialización se basa en que las propiedades de una


categoría general se transmiten a todas las categorías que se especializan o

ING. ROBERTO CARLOS GUEVARA GENCHI 41


Programación de Sistemas

subcategorías. En la OO, la jerarquía de clases significa un conjunto de clases


relacionadas por la jerarquía de generalización/especialización.

A continuación se muestra un ejemplo en


el que se describen tres figuras las cuales
poseen diferentes niveles de jerarquía:

Consideremos las figuras planas cerradas


como el rectángulo, y el círculo. Tales
figuras comparten características comunes
como es la posición de la figura, de su centro, y el área de la figura, aunque el
procedimiento para calcular dicha área sea completamente distinto dependiendo del
nivel de las clases. Podemos por tanto, diseñar una jerarquía de clases, tal que la clase
base denominada Figura, tenga las características comunes y cada clase derivada las
específicas.

Como se muestra en el ejemplo cada figura tiene su nivel de jerarquía a continuación


se explicará más detalladamente cada nivel.

La clase Figura es la que contiene las características comunes a dichas figuras


concretas por tanto, no tiene forma ni tiene área. Esto lo expresamos declarando
Figura como una clase abstracta, declarando la función miembro área abstract.

Las clases abstractas solamente se pueden usar como clases base para otras clases.
No se pueden crear objetos pertenecientes a una clase abstracta. Sin embargo, se
pueden declarar variables de dichas clases.

La característica de hacer una Clase/Método abstract reside en que no puede ser


generada una instancia de la misma, este comportamiento se demuestra en el método
principal (main).

Como se muestra en las figuras cada clase tiene diferentes niveles, por decirlo así, de
importancia de ahí se desprenden los términos de Superclase subclases.

ING. ROBERTO CARLOS GUEVARA GENCHI 42


Programación de Sistemas

Ejemplo1: SUPERCLASE Y SUBCLASE

FIGURA
La clase “Padre” o Superclase se llama de ese modo
debido a que de la misma se desprenden otras clases
llamadas “Subclases”, las cuales heredarán sus
atributos y operaciones. Una Superclase puede
contener cualquier número de Subclases.

La clase Círculo es una de las Subclases de la


Superclase Figura, ésta a su vez puede
convertirse en una Superclase si de ella se
CONTORNO
desprenden otras clases. La misma posee su
nivel de importancia y a su vez hereda los
métodos y atributos de la Superclase.

Ejemplo2: SUPERCLASE Y SUBCLASE

En este segundo ejemplo podemos ver que al contrario de anterior, de una subclase
pueden desprenderse otras subclases, lo que convierte a ésta Subclase en una
Superclase:

 A es la superclase de B, C y D.  B, C y D son subclases de A.


 D es la superclase de E.  E es una subclase de D

ING. ROBERTO CARLOS GUEVARA GENCHI 43


Programación de Sistemas

Una de las características que no se pueden apreciar en éstas figuras es que cada
Subclase obtiene (“hereda”), características de su Clase Padre de aquí proviene el
término de herencia.

2.3.2 Herencia múltiple

Hay dos tipos de herencia: Herencia Simple y Herencia Múltiple. La primera indica que
se pueden definir nuevas clases solamente a partir de una clase inicial mientras que la
segunda indica que se pueden definir nuevas clases a partir de dos o más clases
iniciales. Java sólo permite herencia simple.

Algunos lenguajes orientados a objetos, permiten herencias múltiples, lo que significa


que una clase puede heredar los atributos de otras dos superclases. Este método
puede utilizarse para agrupar atributos y métodos desde varias clases dentro de una
sola.

Supongamos el siguiente escenario:

Un alumno de la cátedra de Programación II además que es una persona consagrada,


también es un hijo de familia que debe responder con buenas notas en su travesía por
la universidad. Es decir que una clase alumno debería de heredar de ambos objetos.
Hacer este pequeño diagrama UML en código Java no se
puede nativamente hablando, solamente con una simulación. La manera de realizarla
es la siguiente:

ING. ROBERTO CARLOS GUEVARA GENCHI 44


Programación de Sistemas

public class Persona {


}
public class Hijo{
}
interface iHijo{

//La interface pertenece a la clase Hijo


}
public class Alumno extends Persona implements iHijo{
}
Con la ayuda de las interfaces simulamos la herencia múltiple. Una interface no es más
que la implementación de los métodos de una clase. Con la ayuda de éstos
podemos accesar a los métodos de la clase Hijo y heredar directamente todo lo que
pertenece a Persona.

2.3.3 Limitaciones de la herencia

Todos los campos y Métodos de Una Clase hijo Siempre Accesibles párrafo el Código
de la Misma Clase.

Para Controlar el Acceso desde OTRAS Clases, y el párrafo Controlar La Herencia Por
las subclases, los Miembros (atributos y métodos) de las Clases Tienen tres
modificadores Posibles de Control de Acceso:

1. Público: Los declarados Miembros Accesibles públicas hijo en Cualquier Lugar


Que sea accesible en la Clase, y Son heredados subclases POR LAS.

2. Privado: Los Miembros hijo declarados privado Accesibles Solo en la Propia Clase.

3. Protegido: Los Miembros declarados protegidos hijo Accesibles SOLO PARA


subclases SUS.

ING. ROBERTO CARLOS GUEVARA GENCHI 45


Programación de Sistemas

DESARROLLA PROGRAMAS GRÁFICOS CON BASE EN LA IMPLEMENTACIÓN DEL


POLIMORFISMO DE OBJETOS.

Programa de estudios de la unidad de aprendizaje programación de sistemas.

2.4 Polimorfismo
Es la cualidad que permite que un mismo nombre de método se utilice para 2 o más
propósitos diferentes.

En Java es posible usar un mismo nombre de método para propósitos diferentes a lo


que se conoce como sobrecarga de métodos o funciones.

Para sobre cargar un método hay que realizar lo siguiente:

1. Declara y definir las versiones requeridas.

2. El compilador selecciona automáticamente la versión correcta en base al número y/o


tipo de argumentos.

3. El número y/o tipo de argumentos usados para llamar el método deben ser distintos.

4. Llamar al método.

2.4.1 Clasificación
Se puede clasificar el polimorfismo en dos grandes clases:

 Polimorfismo dinámico (o polimorfismo para métrico) es aquél en el que el código no


incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja.
Así, puede ser utilizado a todo tipo de datos compatible.
 Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que
se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de
poder ser utilizados.

El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como


programación genérica.

ING. ROBERTO CARLOS GUEVARA GENCHI 46


Programación de Sistemas

También se clasifica en herencia por redefinición de métodos abstractos y por método


sobrecargado. El segundo hace referencia al mismo método con diferentes parámetros.

Otra clasificación agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su vez
sobrecarga de operadores y coerción, Universal (inclusión o controlado por la herencia,
para métrico o genericidad).

2.4.1 Selección dinámica de método

Las dos clases implementadas a continuación tienen una relación subclase/superclase


simple con un único método que se sobrescribe en la subclase:

class claseAA {

void metodoDinamico() {

[Link]("En el metodo dinamico de claseAA");

}}

class claseBB extends claseAA {

void metodoDinamico() {

[Link]("En el metodo dinamico de claseBB");

}}

Por lo tanto si ejecutamos:

claseAA referenciaAA = new claseBB();

[Link]();

La salida de este programa es:

En el método dinámico de claseBB

Se declara la variable de tipo claseA, y después se almacena una referencia a una


instancia de la clase claseB en ella. Al llamar al método metodoDinamico() de claseA,
el compilador de Java verifica que claseA tiene un método llamado metodoDinamico(),
pero el intérprete de Java observa que la referencia es realmente una instancia
de claseB, por lo que llama al método metodoDinamico() de claseB en vez de al
de claseA.

ING. ROBERTO CARLOS GUEVARA GENCHI 47


Programación de Sistemas

Esta forma de polimorfismo dinámico en tiempo de ejecución es uno de los


mecanismos más poderosos que ofrece el diseño orientado a objetos para soportar la
reutilización del código y la robustez.

2.4.2 Sobrescritura de un método

Durante una jerarquía de herencia puede interesar volver a escribir el cuerpo de un


método, para realizar una funcionalidad de diferente manera dependiendo del nivel de
abstracción en que nos encontremos. A esta modificación de funcionalidad se le llama
sobrescritura de un método.

Por ejemplo, en una herencia entre una clase SerVivo y una clase hija Persona; si la
clase SerVivo tuviese un método alimentarse (), debería volver a escribirse en el nivel
de Persona, puesto que una persona no se alimenta ni como un Animal, ni como
una Planta...

La mejor manera de observar la diferencia entre sobrescritura y sobrecarga es


mediante un ejemplo. A continuación se puede observar la implementación de la
sobrecarga de la distancia en 3D y la sobrescritura de la distancia en 2D.

class MiPunto3D extends MiPunto {

int x,y,z;

double distancia(int pX, int pY) { // Sobrescritura

int retorno=0;

retorno += ((x/z)-pX)*((x/z)-pX);

retorno += ((y/z)-pY)*((y/z)-pY);

return [Link]( retorno );

}}

Se inician los objetos mediante las sentencias:

MiPunto p3 = new MiPunto(1,1);

MiPunto p4 = new MiPunto3D(2,2);

Y llamando a los métodos de la siguiente forma:

[Link](3,3); //Método [Link](pX,pY)

ING. ROBERTO CARLOS GUEVARA GENCHI 48


Programación de Sistemas

[Link](4,4); //Método [Link](pX,pY)

Los métodos se seleccionan en función del tipo de la instancia en tiempo de ejecución,


no a la clase en la cual se está ejecutando el método actual. A esto se le
llama selección dinámica de método.

2.4.3 Sobrecarga de método

Es posible que necesitemos crear más de un método con el mismo nombre, pero con
listas de parámetros distintas. A esto se le llama sobrecarga del método. La sobrecarga
de método se utiliza para proporcionar a Java un comportamiento polimórfico.

Un ejemplo de uso de la sobrecarga es por ejemplo, el crear constructores alternativos


en función de las coordenadas, tal y como se hacía en la clase MiPunto:

MiPunto( ) { //Constructor por defecto

inicia( -1, -1 ); }

MiPunto( int paramX, int paramY ) { // Parametrizado

this.x = paramX;

y = paramY; }

Se llama a los constructores basándose en el número y tipo de parámetros que se les


pase. Al número de parámetros con tipo de una secuencia específica se le
llama signatura de tipo. Java utiliza estas signaturas de tipo para decidir a qué método
llamar. Para distinguir entre dos métodos, no se consideran los nombres de los
parámetros formales sino sus tipos:

MiPunto p1 = new MiPunto(); // Constructor por defecto

MiPunto p2 = new MiPunto( 5, 6 ); // Constructor parametrizado

2.4.4 Limitación de la sobreescritura: final

Todos los métodos y las variables de instancia se pueden sobrescribir por defecto. Si
se desea declarar que ya no se quiere permitir que las subclases sobrescriban las
variables o métodos, éstos se pueden declarar como final. Esto se utiliza a menudo
para crear el equivalente de una constante de C++.

Es un convenio de codificación habitual elegir identificadores en mayúsculas para las


variables que sean final, por ejemplo: final int NUEVO_ARCHIVO = 1;

ING. ROBERTO CARLOS GUEVARA GENCHI 49


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 50


Programación de Sistemas

GENERA CLASES DE ACCESO Y ADMINISTRACIÓN DE UNA BASE DE DATOS, CON


BASE EN LENGUAJES DE PROGRAMACIÓN ORIENTADOS A OBJETOS.

Programa de estudios de la unidad de aprendizaje programación de sistemas.

3.1 Base De Datos

Uno de los objetivos fundamentales de un sistema de información


es contar no sólo con recursos de información, sino también con
los mecanismos necesarios para poder encontrar y recuperar
estos recursos. De esta forma, las bases de datos se han
convertido en un elemento indispensable no sólo para el
funcionamiento de los grandes motores de búsqueda y la
recuperación de información a lo largo y ancho de la Web, sino
también para la creación de sedes web, Intranets y otros sistemas
de información en los que se precisa manejar grandes o pequeños
volúmenes de información. La creación de una base de datos a la
que puedan acudir los usuarios para hacer consultas y acceder a
la información que les interese es, pues, una herramienta
imprescindible de cualquier sistema informativo sea en red o fuera
de ella.

Una base de datos es una colección de datos organizados y


estructurados según un determinado modelo de información que
refleja no sólo los datos en sí mismos, sino también las relaciones
que existen entre ellos. Una base de datos se diseña con un
propósito específico y debe ser organizada con una lógica
coherente. Los datos podrán ser compartidos por distintos
usuarios y aplicaciones, pero deben conservar su integridad y
seguridad al margen de las interacciones de ambos. La definición
y descripción de los datos han de ser únicas para minimizar la
redundancia y maximizar la independencia en su utilización.

ING. ROBERTO CARLOS GUEVARA GENCHI 51


Programación de Sistemas

En una base de datos, las entidades y atributos del mundo real, se convierten en
registros y campos. Estas entidades pueden ser tanto objetos materiales como libros o
fotografías, pero también personas e, incluso, conceptos e ideas abstractas. Las
entidades poseen atributos y mantienen relaciones entre ellas.

Los modelos clásicos de tratamiento de los datos son:

Jerárquico: puede representar dos tipos de relaciones entre los datos: relaciones de
uno a uno y relaciones de uno a muchos. Este modelo tiene forma de árbol invertido en
el que una rama puede tener varios hijos, pero cada hijo sólo puede tener un padre.

En red: Este modelo permite la representación de muchos a muchos, de tal forma que
cualquier registro dentro de la base de datos puede tener varias ocurrencias superiores
a él. El modelo de red evita redundancia en la información, a través de la incorporación
de un tipo de registro denominado el conector. En el modelo en red se representa el
mundo real mediante registros lógicos que representan a una entidad y que se
relacionan entre sí por medio de flechas

Relacional: Desde los años 80 es el modelo más utilizado, ya que permite una mayor
eficacia, flexibilidad y confianza en el tratamiento de los datos. La mayor parte de las
bases de datos y sistemas de información actuales se basan en el modelo relacional ya
que ofrece numerosas ventajas sobre los 2 modelos anteriores, como es el rápido
aprendizaje por parte de usuarios que no tienen conocimientos profundos sobre
sistemas de bases de dados. En el modelo relacional se representa el mundo real
mediante tablas relacionadas entre sí por columnas comunes. Las bases de datos que
pertenecen a esta categoría se basan en el modelo relaciones, cuya estructura
principal es la relación, es decir una tabla bidimensional compuesta por líneas y
columnas. Cada línea, que en terminología relacional se llama tupla, representa una
entidad que nosotros queremos memorizar en la base de datos. las características de
cada entidad están definidas por las columnas de las relaciones, que se llaman
atributos. Entidades con características comunes, es decir descritas por el mismo
conjunto de atributos, formarán parte de la misma relación.

ING. ROBERTO CARLOS GUEVARA GENCHI 52


Programación de Sistemas

3.2 Acesso a base de datos de acuerdo a la metodologia de programacion


orientada a objetos
En una base de datos orientada a objetos o Sistema Gestor de Base de Datos
Orientada a Objetos (BDOO), la información es estructurada como en la programación
orientada a objetos.
Estos datos son representados mediante objetos, las entidades de aplicación son
clases y las relaciones se dan mediante inclusión lógica.
En este tipo de bases de datos se incluyen conceptos importantes del modelo de
objetos:
• Encapsulación
• Herencia
• Polimorfismo
Las BDOO Contienen un método sistemático de representación de relación, y la
interfaz uniforme de usuario es un sistema de mensajes que puede explorar los objetos
y sus interconexiones.

ING. ROBERTO CARLOS GUEVARA GENCHI 53


Programación de Sistemas

3.2.1 Estructuras de una BDOO


Todos los objetos de una clase comparten una definición común, pese a que se
diferencien en los valores asignados a las variables.
El concepto de clase del modelo orientado a objetos corresponde con el concepto de
entidad del modelo E-R.
CLASES DE OBJETOS
class empleado {
/ / Variables
string nombre;
string dirección;
date fecha de alta;
int sueldo;
/ / Los siguiente son MENSAJES sirven para invocar un método y
dentro de este la ejecución del método correspondiente
int sueldo-anual ();
string obtenerNombre ();
string obtenerDireccion ();
int definirDireccion (string nueva-dir);
int antigüedad();
}
Este tipo de sistemas tienen como propiedad un Identificador de objeto Único el cual
nunca debe de cambiar
 Los objetos tienen identidades únicas, independientes de los valores de sus
atributos.
 La estructura orientada a objetos automáticamente impone las restricciones
relacionales, generalmente más aplicables: dominio, llave integridad de entidad e
integridad referencial.
 Si se sigue el enfoque cuando se utilizan los diagramas de Entidad-Relación para
modelar los datos y luego se convierten de manera manual en un conjunto de
relaciones; por lo tanto los conceptos de la Programación Orientada a Objetos se
utilizan simplemente como herramientas de diseño y se codifican, utilizándose para
trabajar con una base de datos.

ING. ROBERTO CARLOS GUEVARA GENCHI 54


Programación de Sistemas

Hay varios lenguajes posibles en los que se pueden integrar estos conceptos:
 Una opción es extender un lenguaje para el tratamiento de datos como el SQL
añadiendo tipos complejos y la programación orientada a objetos. Los sistemas
proporcionan extensiones orientadas a objetos a los sistemas relacionales se
denominan sistemas relacionales orientados a objetos.
 Otra opción es tomar un lenguaje de programación orientado a objetos ya existente
y extenderlo para que trabaje con las bases de datos. Estos lenguajes se
denominan lenguajes de programación persistentes. Estos lenguajes permiten a los
programadores trabajar directamente con los datos, desde el lenguaje de
programación; sin tener que pasar por un lenguaje para el tratamiento de datos
como SQL. Se denominan persistentes porque los datos siguen existiendo una vez
que el programa que los creó ha concluido.
 A la hora de decidir que opción utilizar se debe tener en cuenta que los Lenguajes
Persistentes suelen ser potentes y resulta relativamente sencillo cometer errores de
programación que dañen las vases de datos. La complejidad de los lenguajes hace
la optimización automática de alto nivel, como la reducción de E/S de disco, resulte
difícil. En muchas aplicaciones, la posibilidad de las consultas declarativas es de
gran importancia, pero los lenguajes persistentes no permiten actualmente las
consultas declarativas sin que aparezcan problemas de algún tipo.

3.3 Manipulación de base de datos en un ambiente orientado a objetos.


Para poder trabajar un base de datos mediante la programación orientada a objetos se
necesitan las mismas bases, como son los metodos, clases, variables u objetos, pero
difieren en la manera de utilizarlos o escribirlos, por eso se debe de tener mucho
cuidado a la hora de programar con ayuda de una base de datos ya que va depender
de que aplicación te la va a proporcionar.
3.2.1 Objetos:
Los objetos en programación al igual que los objetos reales tienen características y
cumplen con algunas funciones.
En este caso un objeto en programación muestra su comportamiento atreves de
métodos (que son como funciones para un objeto real), mientras que almacena su
estado en variables.
Un objeto tiene varias características:
 Atributos: estos son los datos que caracterizan al objeto. Son variables que
almacenan datos relacionados al estado de un objeto.

ING. ROBERTO CARLOS GUEVARA GENCHI 55


Programación de Sistemas

 Métodos: Tienen como función fijar su comportamiento, es decir, la funcionalidad


es dar las acciones precisas que este ha de realizar, como la realización de
operaciones o manipulación de variables existentes.
 Identidad: El objeto tiene una identidad, que lo distingue de otros objetos, sin
considerar su estado. Por lo general, esta identidad se crea mediante un
identificador que deriva naturalmente de un problema.
Existen distintos tipos de comportamiento de un método:
 Modificador: altera el estado de un objeto.
 Selector: accede al estado de un objeto, sin alterarlo.
 Iterador: permite a todas las partes de un objeto ser accedidas en un orden.
 Constructor: crea un objeto y/o inicializa su estado.
 Destructor: libera el estado de un objeto y/o destruye el objeto.
3.2.1 Encapsulamiento
El encapsulamiento en Java sirve para ocultar procesos de los datos internos del
programa en su estructura, esto permite que una clase tenga muchos atributos y
operaciones que solo la clase conoce
Este proceso de encapsulación protege los datos miembros de un objeto, de manera
que, solo se puede cambiar mediante las operaciones definidas para este objeto.
3.2.2 Codificadores de acceso:
Los modificadores de acceso son palabras reservadas del lenguaje que nos permiten
restringir la visibilidad y acceso a los elementos de nuestra solución de software.
Existen 4 tipos de modificadores de acceso en java:
 public (publico): Es visible en cualquier clase.
 protected (protegido): El campo o método es visible en la clase donde se define
y en cualquiera de sus subclases.
 private (privado): Solo es visible en la clase donde se define.
Cuando a un método o variable no se le antepone ningún tipo de codificador de acceso
este por default se declara público.
La encapsulación se puede realizar tanto en variables como en métodos y clases.
Variables:
prívate int variable;

ING. ROBERTO CARLOS GUEVARA GENCHI 56


Programación de Sistemas

public int variable;


Métodos:
public void metodo(){
}
protected void metodo(){
}
private void metodo(){
}

ING. ROBERTO CARLOS GUEVARA GENCHI 57


Programación de Sistemas

DESARROLLO UN PROYECTO QUE ACCEDAN A LA BASE DE DATOS DE ACUERDO


A LAS METODOLOGÍAS DE PROGRAMACIÓN.

Programa de estudios de la unidad de aprendizaje programación de sistemas.

Frames:

ING. ROBERTO CARLOS GUEVARA GENCHI 58


Programación de Sistemas

Button:

ING. ROBERTO CARLOS GUEVARA GENCHI 59


Programación de Sistemas

Label, TextField y TextArea:

ING. ROBERTO CARLOS GUEVARA GENCHI 60


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 61


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 62


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 63


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 64


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 65


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 66


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 67


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 68


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 69


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 70


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 71


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 72


Programación de Sistemas

1. El lenguaje de programación JAVA; Francisco Javier Ceballos Sierra; Alfaomega


Ra-Ma; México, D.F. abril 2002.

2. JAVA a través de ejemplos; Jesús Bobadilla; Alfaomega Ra-Ma; México D. F.

abril del 2003.

3. [Arnold y Gosling, 1997] Ken Arnold y James Gosling. Addison-Wesley/Domo.


"El lenguaje de Programación Java". Wesley Iberoamericana. 1997. 334 páginas.
(Muy básico, escrito por el desarrollador del lenguaje).
4. [Eckel, 1997] Bruce Eckel. "Hands -on Java Seminar". Presindent MindView Inc.
5. 1997. 577 páginas. (Tutorial completo en inglés en formato PDF).
6. [García et al., 1999]. Javier Garciá de Jalón, José Ignacio Rodríguez, Iñigo
Mingo, Aitor Imaz, Alfonso Brazález, Alberto Larzabal, Jesús Calleja y Jon
García. "Aprenda Java como si estuviera en primero". Universidad de Navarra.
7. 1999. 140 páginas. (Tutorial muy básico, en el que se trata la potencia de Java,
pero sin profundizar en ningún tema en particular).
8. [García, 1997] Francisco José García Peñalvo. "Apuntes de teoría de la
asignatura Programación Avanzada del tercer curso de Ingeniería Técnica en
Informática de Gestión". Universidad de Burgos. 1997. 216 páginas. (Comentan
la teoría de la programación orientación al objeto. Han sido resumidos para dar
una visión de la programación orientada a objeto en el apartado I.1).

ING. ROBERTO CARLOS GUEVARA GENCHI 73


Programación de Sistemas

ING. ROBERTO CARLOS GUEVARA GENCHI 74


Programación de Sistemas

1. [Link]
2. [Link]

3. [Link]

[Link]
4. [Link]

5. [Link]

6. [Link]

objetos/
7. [Link]

8. [Link]

9. [Link]
10. [Link]

y-programacion-orientada-a-objetos/

11. [Link]

12. [Link]
13. [Link]
14. [Link]

15. [Link]

ING. ROBERTO CARLOS GUEVARA GENCHI 75

También podría gustarte