martes, 9 de noviembre de 2010

¿Que son los hilos?

1. Definicion de  hilo


En sistemas operativos, un hilo de ejecución o subproceso es una característica que permite a una aplicación realizar varias tareas a la vez (concurrentemente). Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.
Un hilo es básicamente una tarea que puede ser ejecutada en paralelo con otra tarea.


Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos. Cuando un hilo modifica un dato en la memoria, los otros hilos acceden a ese dato modificado inmediatamente.
Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado de la CPU (incluyendo el valor de los registros).


El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo. Cuando el proceso finaliza, todos sus hilos de ejecución también han terminado. Asimismo en el momento en el que todos los hilos de ejecución finalizan, el proceso no existe más y todos sus recursos son liberados.


Algunos lenguajes de programación tienen características de diseño expresamente creadas para permitir a los programadores lidiar con hilos de ejecución (como Java o Delphi). Otros (la mayoría) desconocen la existencia de hilos de ejecución y éstos deben ser creados mediante llamadas de biblioteca especiales que dependen del sistema operativo en el que estos lenguajes están siendo utilizados (como es el caso del C y del C++).


Un ejemplo de la utilización de hilos es tener un hilo atento a la interfaz gráfica (iconos, botones, ventanas), mientras otro hilo hace una larga operación internamente. De esta manera el programa responde de manera más ágil a la interacción con el usuario. También pueden ser utilizados por una aplicación servidora para dar servicio a múltiples clientes.
2. Ciclo de Vida de un Hilo:




  • Ciclo de vida de un hilo
Un hilo tiene un ciclo de vida que va desde su creación hsta su terminación. Durante su ciclo de vida cada uno de los hilos o tareas de una aplicación puede estar en diferentes estados, algunos de los cuales se indican a continuación:


• Nacido: Cuando se acaba de crear un hilo, se dice que está nacido, y continúa en ese estado hasta que se invoca el método start() del hilo. La siguiente sentencia crea un nuevo thread pero no lo arranca, por lo tanto deja el thread en el estado de nacido.


Thread miHilo = new MiClaseThread();


Cuando un thread está en este estado, es sólo un objeto Thread vacío o nulo. No se han asignado recursos del sistema todavía para el thread. Así, cuando un thread está en este estado, lo único que se puede hacer es arrancarlo con start().


• Listo: Cuando se invoca el método start() del hilo, se dice que está en estado listo. El método se arranca con la siguiente instrucción, para el caso del hilo miHilo:


miHilo.start();


• Ejecutable: cuando el método start() se ejecuta, crea los recursos del sistema necesarios para ejecutar el thread, programa el thread para ejecutarse, y llama al método run() del thread que se ejecuta en forma secuencial. En este punto el thread está en el estado ejecutable. Se denomina así puesto que todavía no ha empezado a ejecutarse.


• En ejecución: Un hilo en estado de listo de la más alta prioridad, pasa al estado de ejecución, cuando se le asignan los recursos de un procesador, o sea cuando inicia su ejecución. Aquí el thread está en ejecución.Cada hilo tiene su prioridad, hilos con alta prioridad se ejecutan preferencialmente sobre los hilos de baja prioridad.


• No ejecutable: Un hilo continúa la ejecución de su método run(), hasta que pasa al estado de no ejecutable originado cuando ocurre alguno de los siguientes cuatro eventos:




  • Se invoca a su método sleep().


  • Se invoca a su su método suspend().


  • El thread utiliza su método wait() para esperar una condición variable.


  • El thread está bloqueado durante una solicitud de entrada/salida.


Por ejemplo, en el siguiente fragmento de codigo se pone a dormir


miHilo durante 10 segundos (10.000 milisegundos):

Thread miHilo = new MiClaseThread();


miHilo.start();


try {


miHilo.sleep(10000);


} catch (InterruptedException e){


}


Durante los 10 segundos que miHilo está dormido, incluso si el proceso se vuelve disponible, miHilo no se ejecuta. Después de 10 segundos, miHilo se convierte en "Ejecutable" de nuevo y, si el procesador está disponible se ejecuta. Para cada entrada en el estado "No Ejecutable", existe una ruta de escape distinta y específica que devuelve el thread al estado "Ejecutable". Por ejemplo, si un thread ha sido puesto a dormir durante un cierto número de milisegundos deben pasar esos milisegundos antes de volverse "Ejecutable" de nuevo.
La siguiente es una secuencia de las acciones a realizar para cada entrada en el estado "No Ejecutable":


  • Si se ha puesto a dormir un hilo, deben pasar el número de milisegundos especificados en sleep().




  • Si se ha suspendido un hilo, se debe llamar a su método resume ().


  • Si un hilo está esperando una condición variable, siempre que el objeto propietario de la variable renuncie mediante notify() o notifyAll().
  • Si un hilo está bloqueado durante la I/O, cuando se complete la I/O.






• Muerto: Un hilo pasa al estado de muerto cuando se termina su método


run(), o cuando se ha invocado su método stop(). En algún momento el sistema dispondrá entonces del hilo muerto. Un hilo puede morir de dos formas:


Muerte natural: se produce cuando su método run() sale normalmente.


Por ejemplo, el bucle while en este método es un bucle que itera 100 veces y luego sale. Por tanto el hilo morirá naturalmente cuando se llegue al final de la iteración, es decir se termina su método run().


public void run() {


int i = 0;


while (i < 100) {


i++;


System.out.println("i = " + i);


}


}




Por muerte provocada: en cualquier momento llamando a su método stop(). El siguiente código crea y arranca miHilo luego lo pone a dormir durante 10 segundos. Cuando el thread actual se despierta, se lo mata con miHilo.stop(). El método stop () lanza un objeto ThreadDeath hacia al hilo a eliminar. El thread moririá cuando reciba


realmente la excepción ThreadDeath.


Thread miHilo = new MiClaseThread();


miHilo.start();


try {


Thread.currentThread().sleep(10000);


} catch (InterruptedException e){


}miHilo.stop();




El método stop () provoca una terminación súbita del método run() del hilo.


Si el método run() estuviera realizando cálculos sensibles, stop() podría dejar el programa en un estado inconsistente. Normalmente, no se debería llamar al método stop() pero si se debería proporcionar una terminación educada como la selección de una bandera que indique que el método run() debería salir. El método stop() se encuentra depreciado en la versión JDK1.2.1.




• Bloqueado: un hilo se encuentra en el estado bloqueado cuando el hilo realiza una solicitud de entrada/salida. Cuando termina la entrada/salida que estaba esperando, un hilo bloqueado queda en el estado listo.


3. Sintaxis  de la creacion del hilo


public MiHilo extends Thread


{


public void run()


{


// Aquí el código


}


};


4. Metodos y constructores de la clase Thread que permite la manipulación de Hilos.


Constructores de Thread




Thread(String), Thread() Crea un nuevo thread con o sin nombre.


Thread(Runnable) Crea un nuevo thread pasándole una referencia


a un objeto que implementa Runnable.


Thread(Runnable, String) Igual que el anterior, pero con un nombre.


Thread(ThreadGroup, String) Análogos a los anteriores, pero creando el thread


Thread(ThreadGroup, Runnable) dentro del ThreadGroup especificado.


Thread(ThreadGroup, Runnable, String)




Métodos de la clase Thread


Thread currentThread() Devuelve una referencia al thread actual.


int activeCount() Devuelve el número de threads activos en el grupo.


String getName(), setName(String) Obtiene o establece el nombre de un thread.


ThreadGroup getThreadGroup() Obtiene el grupo al que pertenece el thread.


boolean isAlive() Indica si el thread está vivo o no.


start(), run() Arranca el thread y ejecuta su principal cometido.


int getPriority(), setPriority(int) Obtiene o establece la prioridad del thread


sleep(long), sleep(long, int) Duerme el thread un tiempo especificado.


yield() Cede el control para que otros threads de la misma


prioridad reciban tiempo de CPU.


CLASES RELACIONADAS CON LOS HILOS
El lenguaje de programación Java proporciona soporte para hilos a través de una simple interfaz
y un conjunto de clases. La interfaz de Java y las clases que incluyen funcionalidades sobre
hilos son las siguientes:
Thread
Runnable
ThreadDeath
ThreadGroup
Object
Todas estas clases son parte del paquete Java.lang.






5. Para que sirve la interface runnable


El interface Runnable


El interface Runnable solamente declara una función miembro denominada run, que han de definir las clases que implementen este interface.


public interface Runnable {


public abstract void run();


}




En nuestro caso, la clase que describe el applet RelojApplet deriva de Applet por lo que no puede derivar también de Thread (no existe la herencia múltiple en Java), sino que tiene que implementar el interface Runnable y definir la función run.


_______________________________________________________________________________:

martes, 7 de septiembre de 2010

Conferencia "Clusters de alto rendimiento para el procesamiento de datos en paralelo"

Grupo de investigación en computación paralela.

Lineas de investigación :
  • Aplicacion bajo ambientes paralelos-sistemas distribuidos, computación Grid
  • Educacion virtual bajo  ambientes paralelos -algoritmos y sistemas paralelos
  • Utilizacion de la calidad en el desarrollo tecnológico utilizando herramientas Tic´s
Los clusters de alto rendimiento son una solución de los sistemas distribuidos.
¿como mejorar el performance?
  1. trabajar mas intensa mente
  2. trabajar mas inteligentemente
  3. solicitar ayuda
Analogía para la computación
  1. Utilizar un hardware especial , por ejemplo reducir el tiempo con un procesador de mayor ciclo.
  2. Optimizar algoritmos y tecnicas de programacion , utilizar múltiples computadores para resolver el problemas, ejecutando instrucciones en el mismo tiempo.
¿Que es un cluster?

Definición: Colección de computadores independientes que dan al usuario la impresión de constituir un solo sistema  coherente.
 ¿ Donde ubicar los clusters?
  • Cadena  de los computadores 1990
MainFrame ---  Super Computadora Vectorial---- Mini computador--- Work Station--- PC

El procesamiento de los clusters es :
  • Distribuido
  • Paralelo
Los clusters  tienen la característica  de ser homogeneos con características semejantes.
los clusters permiten aumentar la esabilidad , disponibilidad y fiabilidad de múltiples niveles de red.
 ESCABILIDAD: Oportunidad de crecer de diferentes formas.
 1. la escabilidad vertical: se basa en la utilizacion de un gran equipo cuya capacidad se aumenta a medida que le exige la carga de trabajo existente.
 2. Escabilidad Horizontal: Es la utlizacion de un cluster compuesto de varios equipos de mediana.

Clasificacion de los clusters:
  • Cluster de alto rendimiento: Se ejecutan tareas que requieren gran capacidad computacional, grandes cantidades de memoria, o ambos a la vez.
  • Clusters de alto disponibilidad: su objetivo de diseño es el de proveer disponibilidad y confiabilidad.
  • Cluster de alta eficiencia: su objetivo de diseño es el de ejecutar la mayor  cantidad de tareas en el menor tiempo posible.
Arquitectura:
  1. Nodos (procesadores)
  2. Software de base( Sistemas operativos)
  3. Comunicaciones (redes de alta velocidad, interfaces y software para comunicaciones).
  4. Middleware (sistema de traductores)
  5. Entornos de programacion(Bibliotecas y herramientas de desarrollo)
Porque se estan implementando los clusters ahora:
  1. Porque el desempeño de los PCS se incrementa
  2. las redes son cada vez mas veloces
  3. RAID (almacenamiento redundante de bajo costo) alta disponibilidad y escalabilidad.
  4. los clusters tienen escalabilidad incremental, desempeño de nodos individuales.
  5. Herramientas de software completas.
Ejemplos:
  • MarcNostrum(Barcelona) es un cluster de procesadores power PC, arquitectura Blade center, SO,Linux,y con red de interconexión Myrinet.Dentro de sus características están que tiene 42.144 teraflops y 4800 procesadores
  • Thunder(California) 1024 nodos,4cpu/ nodo.
  • universidad Distrital (centro de computación de alto desempeño) CECAD
Sistemas Distribuidos de computo:
  1. Alto nivel de heterogeneidad
  2. Organizacion Virtual
  3. Gran atención a la arquitectura
  4. núcleo de Middleware
  5. Basado en OGSA
__________________________________________________________________________________
Referencias.
1. Andrew S. Tanenbaum,Maarten Van Steen
 "Sistemas Distribuidos:Principios y paradigmas"
2. Articulo: "Cluster computing".

lunes, 23 de agosto de 2010

Conceptos relacionados con los Applets

Que es un programa Applet

Es una aplicacion escrita en Java. No tienen  ventana  propias, se ejecutan en la ventana del browser  y tienen importantes restricciones de seguridad,las cuales se  comprueban  al llegar al browse solo pueden leer y escribir en el servidor del que han venido y solo pueden acceder  a una limitada información en el servidor en que se están ejecutando.
 El termino Applet fue introducido en AppletScript en el año de 1993.

Caracteristicas de un Applet

  1. Los applets no tienen un método main() con el que comience la ejecución.
  2. Todos los  applets derivan de la clase java.applet.Applet.
  3. los applets deben redefinir ciertos métodos heredados de Applet que controlan su ejecución: init(),start() stop(),destroy().
  4. los métodos graficos se heredan  de componentes mientras que la capacidad de añadir componentes de interface  de usuario que heredan de containers y de panel.
  5. también suelen redefinir ciertos métodos graficos: los mas importantes son paint(),update()y repaint().
  6. Los applets disponen de metodos relacionados con la obtencion de informacion , como por ejemplo: getAppletlnfo(), getAppletContext(),getParameterlnfo(),getParameter.
  7. A diferencia de  un programa , no puede ejecutarse de forma independiente (necesita un programa contenedor).
  8. Un applet esta escrito en un lenguaje diferente del Script o del HTML que lo invoca.[1]
 CLASE AWT

Window toolkit o algo así como juego de  herramientas abstractas para ventanas son clases, que permiten generar entornos  con componentes  graficos comunes a todas las plataformas y gestionar eventos de teclado y ratón,entre otros , El aspecto visual si es dependiente de la plataforma.

CLASE SWING

Proporciona componentes de Presentación  visual independiente a la plataforma en la que se ejecuta.Swing extiende AWT y añade nuevas características , mejoras y componentes para interactuar con el usuario,tales como arboles,pestañas,tablas,etc. Estas clases fueron construidas junto con Netscape.[2]

Clases  que se utilizan en un Applet con la librería AWT:
  • Clase java.awt.Button
  • Clase java.awt.Canvas
  • Clase java.awt.Checkbox
  • Clase java.awt.Label
  • Clase java.awt.List
  • Clase java.awt.Scrollbar
  • Clase java.awt.TextField
  • Clase java.awt.TextArea
  • Clase java.awt.Choice
  • Clase java.awt.Menu
  • Clase java.awt.Panel
CLASE BUTTON

La clase Button especifica una ventana hija rectangular que representa  un botón donde el usuario hace clic para cambiar el estado general mente entre encendido y apagado .Los controles de la clase Button se pueden utilizar solos o en grupos y pueden llevar etiquetas  o bien no llevar texto alguno.Para crear una ventana hija basada  en la clase estándar llamada Button se utiliza la función Create Window() especificando en el primer parámetro la cadena de texto"Button", esto le indica a Windows  que se utilizara en la clase predefinida llamada Button.[3]

la clase Button proporciona dos constructores para crear botones.
 Public Button()
Public Button(String Label)

Entre los metodos que proporciona la clase Button se destacan:

  • Public void SetLabel(StringLabel)
  • Public void addActionListener(Action Listeneral)
  • Public String getLabel()
CLASE LABEL

Permite poner texto fijo en un programa , se tienen tres constructores en la clase Label:
  • Label()
  • Label(String Label)
  • Label(String label, int alignment)
Metodos de la clase Label

  • Void SetAlignment(int alignment)
El parametro alignment puede tomar los valores: Label.ENTER,Label.LEFT o Label.RIGHT
  • Void SetText(String Label)
  • String getText().[4]
CLASE TEXTFIELD

La clase TextField representa cualquier campo de texto dinámico o de inducción de texto (editable) creado mediante la herramienta Texto de Flash.Los métodos y propiedades de esta clase controlan los campos de texto durante la ejecución.

Métodos:
  • String getSelectedText()
  • String  getText()
  • boolean setEditable(boolean t)
  • void selectAll()
  • Void select(int begin, int end)
  • Void set Text(String text)
  • addTextListener(Textlistener t)

_________________________________________________________________________________
[1] http//usuarios.multimania.es/java
[2]www.telepolis.com
[3] www.modelo.edu.mx
[4]http://www.departamentos.unican.es/

miércoles, 11 de agosto de 2010

Diferencia entre Compilador-Interprete

COMPILADOR

Las computadoras  solo pueden ejecutar  instrucciones  que esten en  codigo maquina asi que los programas  fuente no se pueden ejecutar.
un compilador debe convertir  el archivo fuente en  un archivo intermedio que se llama archivo objeto o archivo codigo objeto.

El archivo objeto contiene una traduccion del codigo del programa  en lenguaje maquina , pero aun no se considera un programa ejecutable.
 Los compliadores siguen estas tareas:
  • Analisis  Lexico: Parte inicial  de leer y analizar el codigo fuente.
  • Analisis Sintactico: Se toma una lista de tokens producida por analisis lexico y los acomoda en una estructura  arbol llamada arbol-sintactico.
  • Generacion de codigo intermedio: Traduce a un lenguaje simple independiente de la maquina.
  • Ubicacion de registros
  •  Generacion  de codigo maquina
  • Emsamblado y enlazado.


INTERPRETE

Un interprete traduce  un codigo fuente  en lenguaje maquina tambien.
Pero en lugar de generar  codigo del arbol sintactico, el arbol sintactico,se procesa directamente para evaluar expresiones y ejecutar sentencias y asi hasta terminar . un interprete puede necesitar evaluar por ejemplo cuando se hacen ciclos por eso la interpretacion puede ser mas lenta que ejecucion de un programa compilado.[1]

Ventajas del interprete:
  1. Un interprete facilita  la busqueda de errores, pues la ejecucion de un programa puede interrumpirse en cualquier  momento para estudiar el entorno.
  2. Un interprete permitr utilizar funciones y operaciones mas potentes, como por ejemplo ejecutar codigo contenido en una variable en forma de  cadena de caracteres. [2]

____________________________________________________________________________
[1] www.mailxmail.com/curso.informatica¨
[2] http://www.todo-programacion.com.ar/

viernes, 6 de agosto de 2010

Lenguaje de Programacion

¿ Que es lenguaje  de Programacion?

Un lenguaje de programacion  es un lenguaje artificial que puede ser usado para controlar el comportamiento de una  maquina. Estos comportamientos se componen de un conjunto de  reglas sintácticas y semánticas que permiten expresar instrucciones que luego serán interpretadas.

Los lenguajes de programacion se pueden clasificar según el paradigma que usan en:
  • Procedimentales
  • Orientados a objetos
  • Funcionales
  • Lógicos
  • Hibridos,etc.
Algunos ejemplos de lenguaje de programacion son:
Php, Prolog, ASP, Python,Basic,Java,JavaScript, etc. [1]

JAVA

Java es una plataforma virtual de software desarrollada por Sun Systems, de tal manera que  los programas creados en ella pueden  ejecutarse sin cambios en diferentes  tipos de arquitectura y dispositivos  computacionales.
la plataforma Java consta de  las siguientes partes:
  • El lenguaje  de programacion mismo
  • La maquina virtual  de Java  o JRE que permite la portabilidad en ejecución.
  • El API Java , una biblioteca estándar para el lenguaje.[2]

Java permite jugar en linea, participar en sesiones de chat con internautas de todo el mundo, calcular los intereses de una hipoteca y ver imagenes es tres dimensiones , entre otras aplicaciones.
Es esencial para aplicaciones  de Internet y otras soluciones de comercio electrónico que constituye la base informática de las empresas.[3]

JDK

El JDK  es el acrónimo de "Java Development kit", es decir el Kit de desarrollo de Java , se puede definir como un conjunto de herramientas , utilidades , documentacion,y ejemplos para desarrollar aplicaciones Java.

MAQUINA VIRTUAL

Una  maquina virtual es un contenedor de software perfectamente aislado que puede ejecutar sus propios sistemas  operativos y aplicaciones como si fuera  un ordenador físico. Una maquina virtual  se comporta exactamente igual  que lo hace un ordenador físico y contiene sus propios CPU, RAM, disco duro, y tarjetas de interfaz de red virtuales (es decir basados en software.

 Ventajas de la maquina virtual:

Las maquinas virtuales cuentan con cuatro características clave que benefician al usuario.
  • Compatibilidad: las maquinas virtuales son compatibles con todos los ordenadores x86 estándar.
  • Aislamiento: las maquinas virtuales están aisladas unas de otras como si estuvieran separadas físicamente.
  • Encapsulamiento: las maquinas virtuales encapsulan un entorno informativo completo.
  • Independencia de Hardware: las maquinas virtuales se ejecutan de forma independiente al hardware subyacente.[4]
JAVA-Tipos de datos

A toda variable  que se use en un programa , se le debe asociar (general mente al principio del programa) un tipo de dato especifico.
Un tipo de dato define todo el  posible rango de valores que una variable puede tomar al momento de ejecución del programa y a lo largo de la vida útil del propio programa.

 Los tipos de datos mas comunes  en Java son:
  • "byte"  byte- length integer
  • "short" short integer
  • "int" integer
  • "long" long integer
  • "float" single-precision floating point
  • "double" double-precision floating point
  • "char" A single character
  • "boolean value" ("true"or "false")
Para el caso de los Strings se deberá  usar la clave String que tiene dos constructores, ejemplo:
 1. String nombre=new String();
  2. String ciudad =new String ("tijuana");
 Con Java  en este ultimo caso se crea la  String y se inicializa con un dato o valor.[5]













________________________________________________________________________
[1] http://www.alegsa.com/
[2] http://www.webtaller.com/
[3] http://www.java.com/
[4] http://www.umware.com/
[5] http://www.programacionfacil.com/

Conceptos -Programacion Orientada a Objetos

¿Que es la POO?

Segun francisco Javier Ceballos  la programacion orientada a objetos (POO) es una de las técnicas mas modernas de desarrollo que trata de disminuir el coste del software , aumentando la eficiencia  y reduciendo  el tiempo  de espera para la puesta  en escena  de una nueva  aplicacion : Por eso, donde la POO toma verdadera ventaja es en poder compartir  y reutiliza código. [1]

Objeto:

La POO consiste en ordenar datos en conjuntos modulares  de elementos  de información del mundo real denominado un (dominio). Estos elementos  se agrupan de acuerdo a las características  principales del mundo real  de estos elementos (tamaño,color,etc).
Un objeto se caracteriza por varios conceptos:
  •  Atributos: son los datos que  caracterizan al objeto , son variables  que almacenan  datos relacionados al estado de un objeto.
  • Métodos : los métodos  de un objeto caracterizan su  comportamiento , es decir  las acciones  que el objeto puede realizar.
  • Identidad : El   objeto  tiene una identidad , que lo distingue  de otros objetos, esta identidad se crea mediante un identificador que deriva de un problema (por ejemplo un producto puede ser representado por un código, un automovil, numero de modelo, etc). [2]
Herencia :

La herencia  consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que se  hereda  es llamada  superclase o clase padre). Esto quiere decir que una subclase aparte de los atributos y métodos propios , tiene incorporados  los atributos y métodos  heredados de la superclase. [3]

Atributo:

Un atributo es una característica  individual que diferencia un objeto de otro y determina su apariencia estado u otras cualidades. Estos se guardan en variables denominadas de instancia (también denominados miembros datos, son declarados en la clase pero sus valores son fijados y cambiados en el objeto) y cada objeto  particular puede  tener valores distintos para estas variables .

Clase:

La clase es una estructura  de un objeto o sea la definición de todos los elementos de que esta hecho un objeto. O sea que podemos afirmar que una clase es un modelo  o una plantilla a seguir para crear un objeto de una clase , y este modelo describe el estado y el comportamiento de los objetos.

UML:

El lenguaje Unificado de Modelado prescribe un conjunto de notaciones y diagramas  estándar para modelar sistemas orientados a objetos , el UML se puede usar  para modelar  distintos tipos de sistemas de software, sistemas de hardware y organizaciones del mundo real. [4]

Modularidad:

La modularidad es la propiedad que me permite dividir una aplicacion en partes mas pequeñas , estas partes se denominan como módulos , y cada una de estas partes debe ser tan independiente de la aplicacion y de las otras partes.

Polimorfismo:

Es una propiedad que  tienen las clases de ocultar la estructura interna en  una jerarquía de clases, implementando de manera diferente un mismo método.El polimorfismo nos permite que una identificacion se refiera a diferentes identidades.[5]

Paso de mensajes:

Mediante el paso de mensajes un objeto puede solicitar de otro objeto que realice una acción determinada o que modifique su estado .Este paso de mensajes se  implementa como llamadas a los métodos de otros objetos. [6]

 ___________________________________________________________________________________
¨[1] www.agapea.com
 [2] es.kioskea.net
 [3] java.ciberaula.com
 [4] es.tldp.org/tutoriales
 [5] www.cristalab.com
 [6] zarza.usal.es