Monografias.com > Computación > Programación
Descargar Imprimir Comentar Ver trabajos relacionados

Paradigmas de programación




Enviado por tenanogenio



    1. Componentes
      Básicos
    2. Características
      fundamentales de la POO
    3. Características
      Secundarias de la POO
    4. Acceso a los miembros de una
      clase
    5. Métodos
      Especiales
    6. Orden de construcción de
      los constructores cuando se hereda
    7. Métodos
      básicos
    8. Ciclo de Vida de una
      Thread
    9. Finalización de
      hilos

    Programa: Los programas se
    organizan como colecciones de objetos que colaboran entre si
    enviándose mensajes.

    Componentes
    Básicos:

    1. Objetos: Entidad de la vida real que tiene
      atributos (datos) y
      métodos
      (operaciones)
      que operan sobre esos atributos. A los datos que forman parte
      del objeto se les conoce como datos miembros y a las
      funciones
      como funciones miembros. Los datos quedan ocultos al
      programador y únicamente dispondrá de las
      funciones para acceder a ellos. Es una abstracción que
      se usa para representar una entidad real.
    2. Todo objeto tiene estado,
      exhibe un comportamiento bien definido y posee identidad
      única.

      Para crear objetos es necesario contar con otro
      objeto que pueda crear objetos. El objeto creador de objetos
      se llama clase y los objetos creados se llaman
      instancias. Los objetos en Java se crean
      en forma dinámica. No es necesario destruir un
      objeto ya que java lo hace solo.

    3. Clase: Modelo que
      se usa para describir objetos similares. Es un tipo de dato
      definido por el usuario que determina las estructuras
      de datos que lo forman y las funciones asociadas con él,
      es decir es un modelo con el que se construyen los
      objetos.

    [public][final][abstract] class nombreClase [extends
    clase
    base][implements interface]

    { lista de atributos y métodos }

    • Public: Clase publica que puede ser usada
      por cualquier otra clase de otro paquete.
    • Final: Clase que no puede tener clases
      derivadas.
    • Abstract: Clase que no puede ser
      instanciada, si derivada.
    • Extends: Indica de que clase hereda la
      nuestra (en herencia)
    • Implements: Implementa interfaces (en
      herencia)

    1. Mensaje: Es una petición de un objeto a
      otro para que este se comporte de una determinada manera,
      ejecutando uno de sus métodos.

    Características fundamentales de la
    POO
    :

    1. Encapsulamiento: Es la ocultación de
      información. Significa mantener la
      información dentro del objeto y mantenerlo como una caja
      negra. Puede ser accedida por métodos.
    2. Abstracción: Es la capacidad de aislar y
      encapsular la información del diseño y la ejecución. Es la
      capacidad para identificar atributos y métodos.

      Los miembros de la clase base deben ser protected o
      private protected.

      La clase derivada hereda todos los datos y funciones
      miembro, pero solo puede acceder a los miembros que le sean
      permitidos desde la clase base. Puede añadir a los
      miembros heredados, sus propios atributos y métodos.
      Para acceder a los métodos de la clase base se usa
      super().

      La ventaja de la herencia es que permite la
      reutilización de código, ahorrando tiempo y
      dinero.

    3. Herencia: Es la propiedad
      que permite a los objetos crearse a partir de otros objetos.
      Cada subclase comparte características comunes con la
      clase de la que deriva. La clase original la llamamos clase
      base
      y las nuevas clases creadas a partir de ella clases
      derivadas
      . Una clase derivada puede ser también
      clase base dando lugar a una jerarquía de
      clases.
    4. Polimorfismo: Es la capacidad de que
      diferentes objetos reaccionen de distinta forma a un mismo
      mensaje. Es la capacidad de referirse a objetos de clases
      distintas en una jerarquía utilizando el mismo elemento
      de programa
      (método)
      para realizar la misma operación, pero de manera
      diferente.

    Características Secundarias de la
    POO
    :

    1. Tipificación: Permite la
      agrupación de objetos en tipos.
    2. Concurrencia: Los objetos pueden actuar al
      mismo tiempo.
    3. Persistencia: Un objeto puede seguir
      existiendo tras desaparecer su antecesor.

    Ventajas de la POO:

    1. Modelos
    2. Modularidad
    3. Extensibilidad
    4. Eliminación de redundancias
    5. Reutilización: ahorro de
      trabajo

    Desventajas de la POO:

    1. Exige conocer bien la teoría de objetos.

    II. Requiere mayor capacidad de los
    programadores.

    1. r.

    Acceso a los
    miembros de una clase:

    Private: Los miembros private son solo accesibles
    por la propia clase.

    Public: Son accesibles por cualquier
    clase.

    Protected: Son accesibles por la propia clase,
    clases derivadas y clases del mismo paquete.

    Private protected: Son accesibles por la propia
    clase y clases derivadas.

    Friendly (por defecto): Son accesibles por la
    propia clase y clases del mismo paquete.

    Atributos Estáticos: Son los
    atributos de clase. Existe solo una instancia de ese miembro. Se
    diferencian de los atributos de instancias en que mantienen un
    valor por
    clase. A un dato static se le asigna una zona fija de almacenamiento en
    tiempo de compilación.

    [modificador de
    acceso][static][final][transient][volatile] Tipo nombre [=
    valor]

    • Static: Define un atributo de clase, unico
      para todos los objetos de ella.
    • Final: Define una constante.
    • Transient: Variables
      que no forman parte del estado permanente del
      objeto.
    • Volatile: Fuerza a
      la lectura
      de la variable cada vez que se le va a usar.

    Métodos Especiales:

    1. Métodos sobrecargados: Métodos
      de una clase que tienen mismo nombre pero difieren en numero
      y/o tipos de parámetros.
    2. Redefinición de métodos: Implica
      definir un metodo en la clase derivada con el mismo nombre y
      firma que el metodo en la clase base. Permite la
      refinación de métodos o modificación de
      los mismos en clases derivadas.

    Se diferencia de la sobrecarga en que se aplica en una
    jerarquía de clases y con firmas iguales, mientras que
    la sobrecarga se aplica en el ámbito de una clase y con
    firmas diferentes.

    [modificador de
    acceso][static][abstract][final][native][synchronized]
    TipoDevuelto NombreMetodo [throws excepcion]

    • Static: Método de clase, compartido
      por todas las instancias.
    • Final: No puede ser redefinido.
    • Native: Métodos que se implementan en
      otro lenguaje
      (c o C++).
    • Synchronized: métodos sincronizados,
      se usan en concurrencia.
    • Throws: Indica que el método genera
      determinadas excepciones.
    1. Constructores: Sirven para construir o
      inicializar objetos.
    • Tienen el mismo nombre que la clase.
    • No devuelven valores.
    • Pueden admitir parámetros.
    • Sino se define uno el compilador genera uno por
      defecto.
    • Se llaman en el momento de la creación del
      objeto.
    • No se hereda.

    Orden de construcción de los constructores cuando se
    hereda:

    1. Constructores de la clase base.
    2. Constructores de los miembros de la clase
      derivada.
    3. Ejecución de las instrucciones contenidas en
      el cuerpo del constructor de la clase derivada.

    Polimorfismo: (ver
    definición)

    Métodos y Clases abstractas: Los
    métodos abstractos son declarados pero no implementados.
    Si existe un método abstracto entonces debemos declarar la
    clase como abstracta, y al declararla como tal no se pueden crear
    instancias de ella. Sirven para definir conceptos incompletos,
    que deben ser completados en las subclases de la clase
    abstracta.

    Interfaces: Son clases que no tienen
    implementación.

    • Sirven como tipos de otras clases.
    • Todos sus métodos son abstractos y
      todos sus atributos son final.
    • Una clase puede implementar muchas
      interfaces.

    Implementación de Polimorfismo: El
    polimorfismo se implementa por medio de las funciones abstractas,
    en las clases derivadas se declara y se define una funcion que
    tiene el mismo nombre, el mismo numero de parámetros y del
    mismo tipo que en la clase base, pero que da lugar a un
    comportamiento distinto, especifico de los objetos de la clase
    derivada.

    No se pueden crear objetos de una clase abstracta pero
    si se pueden declarar referencias en las que guardamos el valor
    devuelto por new al crear objetos de las clases
    derivadas.

    Manejo básico de Error y
    Excepción:
    Cuando ciertos procedimientos,
    sobretodo de entrada y salida encuentran errores, se produce la
    inconsistencia o terminación de un programa.

    En C++ y java se pueden controlar y capturar esos
    errores:

    • División por cero
    • Desborde de índices en arreglos
    • Archivo no existente
    • Parámetros no esperados
    • Errores de entrada y salida

    Excepciones: Porciones de códigos
    robustos, que si se produce un error, disparan o ejecutan
    algún código de corrección o de
    información.

    Try……Catch : Controla y captura un bloque de
    código.

    Applets: Los applets son programas que se
    ejecutan en el navegador. Son aplicaciones accesibles en un
    servidor
    web, que se
    transportan por la red.

    Clase JApplet: clase de java que permite
    extenderse para crear applets.

    Ciclo de vida de un applet: Un applet se carga,
    se instancia y ejecuta dentro de un navegador web.

    Métodos
    básicos:

    1. init() : Lo invoca el navegador cuando se
      carga el applet. // se usa como un constructor //
    2. start() : Se llama después del init() y
      cada vez que el applet vuelve al area visible del
      navegador.
    3. stop() : Se llama cuando se sale del
      área visible del navegador, y también antes del
      destroy(). Detiene la ejecución pero no lo saca de
      memoria.
    4. destroy() : Se llama cuando se descarga el
      applet del navegador. Lo saca de memoria.

    Todos los applets que hacen algo después de la
    inicialización (excepto la respuesta a una acción al usuario) deben sobrescribir el
    método start().

    Componentes: Son elementos (objetos) que
    pueden formar parte de una interfaz grafica.

    Componentes básicos:

    • Etiquetas (jlabel): Son usadas generalmente
      para mostrar texto no
      modificable.
    • Campos de edición (jtextfield): campos de texto
      modificable.
    • Botones (jbutton): Para recibir comandos dados
      por el usuario atraves del raton
    • Casillas de verificación (jcheck
      box)
    • Listas desplegables (jcombo box)
    • Listas (jlist)

    Métodos básicos:

    • Setsize(int, int): Define el
      tamaño
    • Setlocation(int, int): Define la
      ubicacion
    • Setbounds(int, int, int, int) : Define al
      mismo tiempo las dos anteriores.

    Contenedores: Son componentes que pueden
    alojar a otros componentes.

    Contenedores básicos:

    • Panel (JPanel): Es el mas usado. Para acceder
      a este panel se usa la funcion getcontentpane().
    • Panel desplazable (JscrollPanel)
    • Ventanas (Jframe)
    • Ventanas de dialogo
      (Jdialog)
    • Diálogos de opción
      (JoptionPane)

    Manejo de Eventos: Es el proceso de
    respuesta a los eventos que son
    generados por el usuario (presionar un botón del mouse,
    seleccionar una opción del menú, ingresar un texto,
    etc).

    Java usa un modelo de delegación de eventos
    basado en un escucha, se genera una relación de
    dependencia entre los objetos, de manera que cuando un objeto
    cambia de estado todos sus dependientes son notificados y
    actúan automáticamente.

    Escuchas (Listeners): Son interfaces (deben
    redefinirse todos los métodos de la clase implementada) de
    java que definen el protocolo de
    llamada a los distintos eventos. Para evitarnos de dar
    implementaciones vacías a los métodos declarados en
    la interfaz del escucha que no nos interesan usamos
    adaptadores.

    Adaptadores: Implementan versiones vacias para
    todos los metodos del interfaz.

    Tipos de eventos:

    • De ratón (MouseEvent): La clase
      MouseAdapter implementa al interfase MouseListener que tiene
      varios metodos como mouseClicked, mouseEntered,
      etc.
    • De teclado
      (KeyEvent)
    • De ventana (WindowsEvent)
    • De accion (ActionEvent): ¿Qué
      pasaria si apretáramos la barra espaciadora? No pasa
      nada porque no implementamos ningun escucha para eventos de
      teclado. Un evento de accion es un evento de alto nivel que es
      disparado por un componentecuando se realiza la accion
      principal.

    No tiene una clase adaptador porque solo posee un
    unico metodo: actionPeroformed.

    Aquí es muy util el metodo getsource() que nos
    devuelve el objeto que genero el
    evento.

    Concurrencia: Programas que pueden correr
    al mismo tiempo compartiendo recursos y
    datos.

    En un programa concurrente dos o mas procesos
    pueden comenzar a ejecutarse al mismo tiempo, pero si en un dado
    momento requieren simultáneamente u recurso unico,
    concurren por él. Los programas corren en
    paralelo.

    Los hilos o procesos ligeros son una parte
    de código o miniprograma que puede ser ejecutada
    independientemente, de forma que una aplicación o un
    applet puede tener varios hilos ejecutándose
    simultáneamente y efectuando distintas tareas; estos hilos
    se encuentran dentro de un programa y son parte de
    él.

    Los hilos, a veces también llamados
    contextos de ejecución, pueden ser utilizados para
    la implementación de algoritmos
    paralelos o procesos concurrentes, sin ser necesario disponer de
    equipos con estructura de
    multiprocesador. En el caso de un solo procesador, los
    procesos ligeros incorporan mecanismos para compartirlo,
    estableciéndose prioridades
    entre ellos y también facilidades de
    sincronización, cuando es necesario.

    Multiproceso se refiere a dos programas que se
    ejecutan "aparentemente" a la vez, bajo el control del
    sistema
    operativo.

    Multihilo se refiere a que dos o mas tareas se
    ejecutan "aparentemente" a la vez, dentro de un mismo
    programa.

    Los procesos se ejecutan en realidad "concurrentemente",
    dado que comparten la cpu.

    Ciclo de Vida de una
    Thread

    Cada hilo, después de su creación y
    antes de su destrucción, estará en uno de cuatro
    estados:  recien creada, "corrible", bloqueada, o
    muerta.

    Para ver el gráfico seleccione
    la opción "Descargar" del menú
    superior

    Recién creada (New thread):
    entra aquí inmediatamente despues de su creación.
    Es decir luego del llamado a new. En este estado los datos
    locales son ubicados e iniciados. Luego de la invocación
    a start(), el hilo pasa al estado "corrible".

    Corrible (Runnable):  Aquí el
    contexto de ejecución existe y el hilo puede ocupar la
    CPU en cualquier momento. Este estado puede subdividirse en
    dos: Corriendo y encolado. La transición entre estos dos
    estados es manejado por lel itinerador de la máquina
    virtual.
    Nota: Un hilo que invoca al método () voluntariamente se
    mueve asimisma al estado encolado desde el estado
    corriendo.

    Bloqueada (not Runnable): Se ingresa cuando: se
    invoca suspend(), el hilo invoca el método wait() de
    algún objeto, el hilo invoca sleep(), el hilo espera por
    alguna operación de I/O, o el hilo invoca join() de otro
    hilo para espera por su término. El hilo vuelve al
    estado Corrible cuando el evento por que espera
    ocurre.

    Muerta (Dead):  Se llega a este estado
    cuando el hilo termia su ejecución (concluye el
    método run) o es detenida por otro hilo llamando al su
    método stop(). Esta última acción no es
    recomendada.

    Planificación de hilos: Para solucionar el
    problema de comparticion de recursos se puede asignar distintas
    prioridades a los hilos. Se puede modificar la prioridad de un
    hilo en cualquier momento después de su creación
    usando el metodo: setPriority() getPriority().

    La prioridad de un hilo tiene el efecto
    de
    :

    1. Si hay 2 hilos para ejecutarse, se ejecuta primero el
      de mayor prioridad.
    2. Si hay 1 hilo ejecutándose y entra un hilo de
      mayor prioridad, el primer hilo sale de ejecución y
      entra este ultimo.

    Hilos demonio: Son hilos de muy baja prioridad
    (llamados servicios) que
    normalmente se ejecutan en periodos muy largos usando pocos
    recurso. Para crear un demonio se usa setDaemon():true o
    false.

    Clase Thread: Maneja hilos de ejecución.
    Hay metodos que controlan si el hilo esta ejecutado, durmiendo,
    en suspenso o detenido.

    Metodos básicos:

    1. sleep(milis): Pone en suspenso un hilo en
      ejecución durante un cierto tiempo.
    2. start(): Pone a ejecutar un hilo. Crea un hilo
      de sistema y
      ejecuta. Luego llama al metodo run().
    3. run(): Lleva el cuerpo del hilo. Es llamado
      por el metodo start(). Normalmente es un bucle. Hay que
      redefinirlo.
    4. suspend(): Detiene el hilo, pero no lo
      destruye. Puede ejecutarse de nuevo. Met.de
      instancia.
    5. resume(): Reanuda el hilo de ejecución
      detenido. Met.de instancia.
    6. interrupt(): Detiene el hilo de
      ejecución, normalmente no se usa, se deja que el hilo
      termine su correcta ejecución.
    7. join(): Fuerza al hilo a esperar la
      finalizacion de los hilos asociados.

    Sincronización: Cuando dos hilos
    necesitan usar el mismo objeto aparecen las operaciones
    entrelazadas que pueden corromper (dañar) los
    datos.

    La solucion es sincronizar el acceso a esa region.
    Cuando hay multiples hilos que pueden acceder a una misma region
    se utiliza el "bloqueo" de la misma, que consiste en darle el
    acceso y control total solo a un hilo.

    El bloqueo comienza cuando se ejecuta el metodo
    (synchronized) y finaliza cuando termina el metodo ya sea por
    return o por una terminación anormal
    (excepciones).

    Comunicación entre hilos: Aparte de
    la sincronizacion, se usa la
    comunicación entre hilos para solucionar los problemas de
    comparticion de datos.

    Los hilos se notifican entre si la finalizacion o
    comienzo de las acciones.

    • Metodos utilizados para la comunicación:
      • Wait(): Deja al hilo esperando hasta que
        ocurra alguna condicion. Hasta que otro hilo le notifique
        que ocurrio algo.
      • Notify(): Notifica al hilo que espera que
        hay algun cambio
        que podria satisfacer esa condicion.
      • Notifyall(): Notifica a todos los hilos en
        espera (wait).

    Modelo productor – consumidor:
    Un hilo produce una salida que otro hilo usa o
    consume.

    En la programación secuencial no hay problema ya
    que si el productor se ejecuta primero, luego el consumidor tiene
    lo que el productor le envia.

    En la programación concurrente si hay problema ya
    que los dos corren al mismo tiempo ¿cuál es el que
    corre primero?¿el productor o el consumidor?

    Si el productor corre mas rápido que el
    consumidor se pueden perder datos, ya que el consumidor no los
    puede tomar a la misma velocidad.

    Si el consumidor es mas rápido querrá
    tomar los datos que el productor todavía no ha
    producido.

    La solución a este problema es contar con una
    clase que controle y supervise y sincronice al productor y
    consumidor, esta clase la denominaremos "monitor".

    Finalización
    de hilos:

    • Que el metodo run() retorne normalmente
    • Que el metodo run() finalice bruscamente
    • Que el metodo destroy() se invoque.
    • Que el programa termine normalmente.

    Prolog

    Lenguaje de primer orden (logica proposicional):
    es la que usa proposiciones y nexos entre estas para expresar
    verdades.

    Símbolos del predicado: Los símbolos del predicado son usados para
    denotar alguna propiedad de objetos o alguna relacion entre
    objetos.

    Enunciado atomico: Se forman colocando un
    predicado de aridad N al frente de N
    nombres.

    Ej.: Mayor(juan, ana)

    Enunciado atomicos combinados: Ej.: vuela(paloma)
    v ponehuevo(paloma)

    Reglas: Llamadas Clausula de Horn (son
    predicados bien formados que se encuentran en forma
    clausal).

    Estan compuestos por dos partes: el consecuente y el
    antecedente.

    El consecuente es la primera parte de la clausula, "es
    lo que se quiere probar", la conclusión de la
    regla.

    El antecedente es la "condicion", que determinara en que
    casos el consecuente es verdadero o falso.

    Conclusión si condicion

    Consecuente si antecedente

    Prolog: Se divide en 4
    secciones.

    1. domains: Aquí se definen los objetos y
      tipos de datos
      (symbol, char, integer, real, string).
    2. Ej.: domains

      Objeto = tipo de dato

    3. Predicates: Aquí se definen como seran
      las relaciones entre los objetos del dominio y el
      valor que se le asignara en las clausulas. Ej.:
      sabe(nombre)
    4. Goal: Aquí se indica cual es el
      objetivo o
      propósito del programa.
    • Interno: Se especifica en la "seccion goal"
      un hecho a verificar. El mecanismo de búsqueda se
      detiene al encontrar el primer valor que cumpla. Responde
      true o false, no muestra
      mensajes.
    • Externo: se trabaja en la "ventana de
      dialogo", verificando y consultando hechos en forma
      interactiva. Entrega todos los
      valores que lo verifiquen. La búsqueda se detiene
      al agotarse las clausulas. Puede mostrar
      mensajes.
    1. Clauses: Aquí se definen las "reglas"
      y "hechos" que se evaluaran para encontrar soluciones
      que se pidan en la seccion goal o por la ventana de
      dialogo.

    Objetos compuestos: Hay veces que necesitamos
    poner mas detalles. Recurrimos a los "Functores".

    Listas: Es un conjunto de elementos encerrados
    entre corchetes y separados por comas.

    [H|C] la cabeza puede usarce para extraer componentes de
    una lista.

    Backtracking: Es una técnica de borrado
    que consiste en reemplazar cada submeta por los consecuentes de
    todas las reglas que la satisfagan. Es un mecanismo de
    búsqueda de datos. Consiste en recorrer reiteradamente las
    clausulas, tratando de establecer si el objetivo actual puede
    considerarse como verdadero o false. (ver todo el proceso en el
    libro para
    entenderlo mejor)

    Fernando "Tena" Paez

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter