You are on page 1of 19

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Herencia
En orientacin a objetos la herencia es el mecanismo fundamental para implementar la reutilizacin y extensibilidad del software. A travs de ella los diseadores pueden construir nuevas clases partiendo de una jerarqua de clases ya existente (comprobadas y verificadas) evitando con ello el rediseo, la modificacin y verificacin de la parte ya implementada. La herencia facilita la creacin de objetos a partir de otros ya existentes, obteniendo caractersticas (mtodos y atributos) similares a los ya existentes. Es la relacin entre una clase general y otra clase ms especifica. Por ejemplo: Si declaramos una clase prrafo derivada de una clase texto, todos los mtodos y variables asociadas con la clase texto, son automticamente heredados por la subclase prrafo. La herencia es uno de los mecanismos de la programacin orientada a objetos, por medio del cual una clase se deriva de otra, llamada entonces clase base o clase padre,(a veces se le denomina superclase o clase base), de manera que extiende su funcionalidad. Una de sus funciones ms importantes es la de proveer Polimorfismo y late binding. Accesos y ocultamiento de informacin con la Herencia El diseador puede definir qu variables de instancia y mtodos de los objetos de una clase son visibles. En C++ y java esto se consigue con las especificaciones private, protected y public. Slo las variables y mtodos definidos como pblicos en un objeto sern visibles por todos los objetos. En cuanto a las subclases, que heredan las estructuras de las superclases, el diseador puede controlar qu miembros de las superclases son visibles en las

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

subclases. En el caso de java y C++ los especificadores de acceso (private, protected, public) de los miembros de la superclase afectan tambin a la herencia: Private: ningn 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 pblicos de la superclase siguen siendo pblicos en la subclase. Ventajas de la Herencia Ayuda a los programadores ahorrar cdigo y tiempo, ya que si tiene una clase lista es solo de implementarla y listo todo el cdigo de esta se resume a solo un llamado. Los objetos pueden ser construidos a partir de otros similares. Para ello es necesario que exista una clase base y una jerarqua (relacionamiento) de clases. La clase derivada puede heredar cdigo y datos de la clase base, aadiendo cdigo o modificando lo heredado. Las clases que heredan propiedades de otra clase pueden servir como clase base de otras. Tipos de Herencia. Herencia simple: Un objeto puede extender las caractersticas de otro objeto y de ningn otro, es decir, que solo puede heredar o tomar atributos de un solo padre o de una sola clase. Herencia mltiple: Un objeto puede extender las caractersticas de uno o ms objetos, es decir, puede tener varios padres. En este aspecto hay 2

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

discrepancias entre los diseadores de lenguajes. Algunos de ellos han preferido no admitir la herencia mltiple por las posibles coincidencias en nombres de mtodos o datos miembros. Por ejemplo C++, Python permiten herencia mltiple, mientras que Java, Ada y C# slo permiten herencia simple.

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Ejemplo de Herencia en Java Se declaran las clases mamferos, gato y perro, haciendo que gato y perro sean unos mamferos (derivados de esta clase), y se ve como a travs de ellos se nombra al animal pero as tambin se accede a patas dndole el valor por defecto para esa especie.
public class Mamifero{ private int patas; private String nombre; public void imprimirPatas(){ JOptionPane.showMessageDialog(null," Tiene " + patas + "patas\n","Mamifero",JOptionPane.INFORMATION_MESSAGE); } public Mamifero(String nombre, int patas){ this.nombre = nombre; this.patas = 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); } } public class CrearPerro { public static void main(String [] args) { Perro perrito = new Perro("Canelita"); perrito.imprimirPatas(); /*Est en la clase mamfero*/ } }

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Clases Abstractas
La herencia permite que existan clases que nunca sern instanciadas directamente. En el ejemplo anterior, una clase "perro" heredara los atributos y mtodos de la clase "mamfero", as como tambin "gato", "delfn" o cualquier otra subclase; pero, en ejecucin, no habr ningn objeto "mamfero" que no pertenezca a alguna de las subclases. En ese caso, a una clase as se la conocera como Clase Abstracta. La ausencia de instancias especficas es su nica particularidad, para todo lo dems es como cualquier otra clase. Esta es una de las caractersticas ms tiles de cualquier lenguaje orientado a objetos es la posibilidad de declarar clases que definen como se utiliza solamente, sin tener que implementar mtodos. Esto es muy til cuando la implementacin es especfica para cada usuario, pero todos los usuarios tienen que utilizar los mismos mtodos. Un ejemplo de clase abstracta en Java es la clase Graphics : public abstract class Graphics { public abstract void drawLine( int x1,int y1,int x2, int y2 ); public abstract void drawOval( int x,int y,int width, int height ); public abstract void drawArc( int x,int y,int width, int height,int startAngle,int arcAngle ); ... } Los mtodos se declaran en la clase Graphics , pero el cdigo que ejecutar el mtodo est en algn otro sitio: public class MiClase extends Graphics { public void drawLine( int x1,int y1,int x2,int y2 ) { <cdigo para pintar lneas -especfico de la arquitectura-> } }

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Cuando una clase contiene un mtodo abstracto tiene que declararse abstracta. No obstante, no todos los mtodos de una clase abstracta tienen que ser abstractos. Las clases abstractas no pueden tener mtodos privados (no se podran implementar) ni tampoco estticos. Una clase abstracta tiene que derivarse obligatoriamente, no se puede hacer un new de una clase abstracta. Ejemplos: package abstracto1; public class PrincipalAbstracto { public static void main(String[] args) { Concreta objeto= new Concreta(); Abstracta referencia; referencia=objeto;//las abstractas no aceptan new referencia.m1(); objeto.m2(); } } package abstracto1; public class Concreta extends Abstracta { void m1(){System.out.println("en m1");} void m2(){System.out.println("en m2");} } package abstracto1; public class PrincipalAbstracto { public static void main(String[] args) { Concreta objeto= new Concreta(); Abstracta referencia; referencia=objeto;//las abstractas no aceptan new referencia.m1(); objeto.m2(); } }

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

package abstracto2; import javax.swing.JOptionPane; public class Cuadrado extends Figura { protected int lado; public Cuadrado (int lado) { this.lado=lado; } public double Area() { return lado*lado; } public void MostrarNombre() { JOptionPane.showMessageDialog (null, "Cuadrado","Figura Geometrica", 1);} public double Perimetro(){return 4*this.lado;} package abstracto2; import javax.swing.JOptionPane; public abstract class Figura { int x; int y; public void MostrarOrigen(){ JOptionPane.showMessageDialog (null, "X= "+x+" y= "+y,"Origen", 1); } public abstract double Area(); // No tiene implementacin public abstract void MostrarNombre(); } package abstracto2; import javax.swing.JOptionPane; public class PrincipalFigura { public static void main(String[] args) { Triangulo f1=new Triangulo(2,5); Cuadrado f2=new Cuadrado(4); Figura figurin;//no se puede instanciar f1.MostrarOrigen(); JOptionPane.showMessageDialog(null, "Area: "+f1.Area(),"Triangulo", 1); figurin=f2; figurin.Area(); JOptionPane.showMessageDialog(null, "Area Cuadrado: "+figurin.Area(),"Cuadrado", 1); JOptionPane.showMessageDialog(null, "Perimetro : "+f2.Perimetro(),"Cuadrado", 1); } }

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

package abstracto2; import javax.swing.JOptionPane; public class Triangulo extends Figura { protected int base; protected int altura; public Triangulo (int ba, int al){ base=ba; altura=al; } public double Area() { return base*altura/2; } public void MostrarNombre() { JOptionPane.showMessageDialog (null, "Triangulo","Figura Geometrica", 1); } }

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Modelo Vista Controlador (MVC)


Es un patrn de arquitectura de software que separa los datos de una aplicacin, la interfaz de usuario, y la lgica de control en tres componentes distintos. El patrn de llamada y retorno MVC, se ve frecuentemente en aplicaciones web, donde la vista es la pgina HTML y el cdigo que provee de datos dinmicos a la pgina. El modelo es el Sistema de Gestin de Base de Datos y la Lgica de negocio, y el controlador es el responsable de recibir los eventos de entrada desde la vista. Algunas de las caractersticas son: La arquitectura MVC est diseada para aplicaciones que necesitan proporcionar mltiples vistas de los mismos datos Permite separar la lgica del negocio de la interfaz con el usuario.

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Descripcin del patrn Modelo: Esta es la representacin especfica de la informacin con la cual el sistema opera. En resumen, el modelo se limita a lo relativo de la vista y su controlador facilitando las presentaciones visuales complejas. El sistema tambin puede operar con ms datos no relativos a la presentacin, haciendo uso integrado de otras lgicas de negocio y de datos afines con el sistema modelado. Vista: Este presenta el modelo en un formato adecuado para interactuar, usualmente la interfaz de usuario. Controlador: Este responde a eventos, usualmente acciones del usuario, e invoca peticiones al modelo y, probablemente, a la vista.

Muchos de los sistemas informticos utilizan un Sistema de Gestin de Base de Datos para gestionar los datos: en lneas generales del MVC corresponde al modelo. La unin entre capa de presentacin y capa de negocio conocido en el paradigma de la Programacin por capas representara la integracin entre Vista y su correspondiente Controlador de eventos y acceso a datos, MVC no pretende discriminar entre capa de negocio y capa de presentacin pero si pretende separar la capa visual grfica de su correspondiente programacin y acceso a datos, algo que mejora el desarrollo y mantenimiento de la Vista y el Controlador en paralelo, ya que ambos cumplen ciclos de vida muy distintos entre s. Aunque se pueden encontrar diferentes implementaciones de MVC, el flujo que sigue el control generalmente es el siguiente: 1. El usuario interacta con la interfaz de usuario de alguna forma (por ejemplo, el usuario pulsa un botn, enlace, etc.) 2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificacin de la accin solicitada por el usuario. El controlador gestiona el evento que llega, frecuentemente a travs de un gestor de eventos (handler) o callback. 10

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

3. El controlador accede al modelo, actualizndolo, posiblemente modificndolo de forma adecuada a la accin solicitada por el usuario (por ejemplo, el controlador actualiza el carro de la compra del usuario). Los controladores complejos estn a menudo estructurados usando un patrn de comando que encapsula las acciones y simplifica su extensin. 4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se reflejan los cambios en el modelo (por ejemplo, produce un listado del contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre la vista. Sin embargo, se podra utilizar el patrn Observador para proveer cierta indireccin entre el modelo y la vista, permitiendo al modelo notificar a los interesados de cualquier cambio. Un objeto vista puede registrarse con el modelo y esperar a los cambios, pero aun as el modelo en s mismo sigue sin saber nada de la vista. El controlador no pasa objetos de dominio (el modelo) a la vista aunque puede dar la orden a la vista para que se actualice. Nota: En algunas implementaciones la vista no tiene acceso directo al modelo, dejando que el controlador enve los datos del modelo a la vista. 5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo nuevamente.

11

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Swing
Swing es una biblioteca grfica para Java. Incluye widgets para interfaz grfica de usuario tales como cajas de texto, botones, desplegables y tablas. Adems del paquete java.awt, Java pone a disposicin del programador el paquete javax.swing para crear unas interfaces grficas. En este captulo veremos para qu la Sun Microsystem ha creado otro paquete y qu diferencias hay con awt. Caractersticas 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 aadir a la aplicacin. 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 grficos de usuario realizados con tcnicas 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 slo heredar de la clase Model. Gestin 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 combinacin si est siendo utilizado el componente, la ventana en que se encuentra o algn hijo del componente.

12

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Objetos de accin (action objects): Estos objetos cuando estn 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 grfico se puede anidar en una lista. Escritorios virtuales: Se pueden crear escritorios virtuales o "interfaz de mltiples

documentos" mediante las clases JDesktopPane y JInternalFrame. Bordes complejos: Los componentes pueden presentar nuevos tipos de bordes.

Adems el usuario puede crear tipos de bordes personalizados. Dilogos personalizados: Se pueden crear multitud de formas de mensajes y

opciones de dilogo con el usuario, mediante la clase JOptionPane. Clases para dilogos 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: Adems de campos y reas de texto, se

presentan campos de sintaxis oculta JPassword, y texto con mltiples fuentes JTextPane. Adems 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. Soporte a la accesibilidad: Se facilita la generacin de interfaces que ayuden a la

accesibilidad de discapacitados, por ejemplo en Braille. Tiene todas las caractersticas de AWT. Un conjunto de componentes de mayor nivel. 13

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Diseo en Java, no depende de cdigo nativo.

CLASES UTILIZADAS 1. Clase JBUTTON: La clase JBUTTON proporciona el equivalente de SWING a la clase BUTTON del AWT. La implementacin de swing ofrece la ventaja de poder usar botones a la vez que texto. Un botn es un sencillo control que genera un evento Action cuando el usuario lo pulsa. 2. Clase JPANEL: La clase JPANEL es el contenedor de Swing a la clase Panel del AWT. Esta clase, al igual que sucede en otras clases de JCOMPONENT, ofrece la posibilidad de agregar un borde. 3. Clase JLABEL: la clase JLABEL es un contenedor de swing a la clase LABEL de AWT. Esta clase permita que se especifique un cono, admite el mtodo setIcon() para establecer un cono une vez que se ha construido el objeto. 4. Clase JFRAME: Es un contenedor Swing de alto nivel que proporciona ventanas para applets y aplicaciones, esta clase es el reemplazo de la clase FRAME en AWT. Las ventanas JFrame tienen dos diferencias fundamentales con su

correspondiente en AWT, Frame : La ventana se cierra sin necesidad de incluir ninguna escucha (Bien!!!). Si adems se quiere que al cerrar la ventana se abandone la aplicacin basta con hacer setDefaultCloseOperation(EXIT_ON_CLOSE); Los componentes bsicos no se aaden directamente a la ventana, sino a un panel que siempre existe asociado a la ventana y que se obtiene mediante el mtodo getContentPane(). La clase JFrame implementa un objeto ventana. Para crear una ventana, existen dos formas principales de hacerlo: 1. Crear un objeto de la clase JFrame

14

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

2. Extender la clase JFrame El ltimo mtodo es muy til cuando se crean ventanas personalizadas que se invocan repetidamente (como ventanas de error, o de informacin). Crearemos una ventana con el primer mtodo: ventana = new JFrame(); Una vez creado una ventana JFrame, sta obtiene el tamao necesario para mostrar los componentes que existen dentro de la aplicacin, como en nuestro ejemplo no existe componente, cambiaremos su tamao inicial, con el mtodo: setSize(int ancho, int largo) Ejemplo: ventana.setSize(200,300); Despus cambiaremos su ttulo para que sea el nombre de nuestra aplicacin con el mtodo: setTitle(String titulo) Ejemplo: ventana.setTitle("Hola mundo Swing"); El objeto existe, pero no es mostrado por defecto, entonces se hace la llamada a: setVisible(boolean). Ejemplo :ventana.setVisible(true); Con esto tendremos nuestra primera aplicacin en Swing. Ejemplo: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Window extends Jrame { public Window() { this.setSize(400,500); this.setTitle("Primer Aplicacion Swing"); 15

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

this.setVisible(true); } public static void main(String []args) { new Window(); JFrame jFrameWindow = new JFrame(); jFrameWindow.setSize(400,500); /* se puede sustituir por pack() para * que java calcule automaticamente el tamao * que necesita. */ jFrameWindow.setTitle("Segunda Aplicacion Swing"); jFrameWindow.setVisible(true); } }

Dise Administradores de Diseo (Layout Managers) Todo contenedor tiene un administrador de diseo por omisin (defecto) Si se quiere usar un administrador de diseo diferente al predefinido, se puede crear una instancia del administrador que se desea y asignarla al contenedor como su administrador de diseo, por ejemplo: aContainer.setLayout(new GridLayout());
Contenedor Mtodo para establecer el administrador de diseo Creacin del administrador de diseo

16

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

A continuacin se mencionan y ejemplifican tres tipos de contenedores de Swing y awt. Cabe destacar que los contenedores de awt pueden ser utilizados en swing. BorderLayout: Los programadores pueden usar la clase BorderLayout cuando quieran ubicar componentes en un contenedor, de forma que ste quede lleno. BorderLayout permite agregar componentes en direcciones geogrficas como: norte, sur, este, oeste y centro. Cada una de estas regiones es identificada por una constante correspondiente: North, South, East, West y Center

GridLayout usa cuando se desea distribuir los componentes dentro de una malla rectangular dentro del contenedor. Todas las celdas de la malla tienen igual tamao y son ocupadas por un slo componente.

FlowLayout

La clase FlowLayout permite colocar los controles en filas,

dependiendo del espacio que est disponible. Cuando no hay suficiente espacio en el contenedor para colocar todos los componentes en una sola fila, el FlowLayout usa varias filas En cada fila, los componentes pueden estar centrados (por defecto), alineados a la izquierda, o alineados a la derecha. La

17

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

alineacin es dada en el momento de creacin del FlowLayout

Modelo de Delegacin de Eventos y Manejo de Eventos Un evento es una accin que se genera cuando un usuario interacta con los componentes disponibles en una GUI, o cuando ocurre un cambio en los datos debido a la lgica de negocio. Existe un mecanismo para manejar y procesar estos eventos. Este mecanismo es llamado Modelo de Delegacin de Eventos. La ventaja principal de este modelo es que la interfaz del usuario que genera los eventos est separada de la lgica que los procesa usando los listeners.

18

UNIVERSIDAD NACIONAL EXPERIMENTAL RMULO GALLEGOS REA DE INGENIERA DE SISTEMAS PROGRAMACION II

Las Interfaces de java que permiten manejar eventos son: ActionListener, ComponentListener, ContainerListener, ItemListener, KeyListener, MouseListener,

MouseMotionListener, TextListener, WindowListener

19

You might also like