Paradigma de Programacion.(1)

15
Fundación Colegio Universitario Misión Sucre de Caracas República Bolivariana de Venezuela Ministerio para el Poder Popular para la Educación Superior Colegio Universitario de Caracas – 1era Aldea Universitaria de Girardot Maracay, Edo. Aragua – Municipio Girardot

description

trabajo practico sobre programacion orientada a objetos conceptos basicos etc

Transcript of Paradigma de Programacion.(1)

Page 1: Paradigma de Programacion.(1)

Fundación Colegio Universitario Misión Sucre de Caracas

República Bolivariana de Venezuela

Ministerio para el Poder Popular para la Educación SuperiorColegio Universitario de Caracas – 1era Aldea Universitaria de Girardot

Maracay, Edo. Aragua – Municipio Girardot

Realizado por:

Rafael Vallenilla 15.992.324Guillermo Uzcàtegui 16.551.294Gilberto Mijarez 12.565.648David Mieres 12.564.158

Sistemas II, Prof.: Lorenzo LópezSección Única de Ing. Sistemas, Turno “C”

10 agosto 2009

Page 2: Paradigma de Programacion.(1)

Paradigma de ProgramaciónUn paradigma de programación representa un enfoque particular o filosofía para

la construcción del software. No es mejor uno que otro sino que cada uno tiene ventajas y desventajas. También hay situaciones donde un paradigma resulta más apropiado que otro.

Un paradigma de programación provee (y determina) la visión y métodos de un programador en la construcción de un programa o subprograma. Diferentes paradigmas resultan en diferentes estilos de programación y en diferentes formas de pensar la solución de problemas (con la solución de múltiples “problemas” se construye una aplicación).

Existen múltiples paradigmas, difícilmente un lenguaje de programación pueda clasificarse solamente en un paradigma. Por ejemplo: Smalltalk y Java son lenguajes basados en el paradigma orientado a objeto. El lenguaje de programación Scheme, en cambio, soporta sólo programación funcional. En cambio Python, soporta múltiples paradigmas.

Tipos de paradigmas de programación más comunes:

El paradigma imperativo o por procedimientos es considerado el más común y está representado, por ejemplo, por el C o por BASIC.

El paradigma funcional está representado por la familia de lenguajes (en particular Scheme), ML o Haskell.

El paradigma lógico un ejemplo es PROLOG.

El paradigma orientado a objetos un lenguaje completamente orientado a objetos es Smalltalk.

Paradigma Imperativo o por Procedimientos

La programación imperativa, en contraposición a la programación declarativa es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.

La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).

Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen el mismo paradigma. Las recetas y las listas de revisión de

Page 3: Paradigma de Programacion.(1)

procesos, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; cada paso es una instrucción, y el mundo físico guarda el estado (Zoom).

Los primeros lenguajes imperativos fueron los lenguajes de máquina de los computadores originales. En estos lenguajes, las instrucciones fueron muy simples, lo cual hizo la implementación de hardware fácil, pero obstruyendo la creación de programas complejos. Fortran, cuyo desarrollo fue iniciado en 1954 por John Backus en IBM, fue el primer gran lenguaje de programación en superar los obstáculos presentados por el código de máquina en la creación de programas complejos.

Algunos Lenguajes Imperativos

BASIC

C

C#

C++

Fortran

Pascal

Java

Perl

PHP

Lua

Paradigma FuncionalLa Programación funcional es un paradigma de programación declarativa basado

en la utilización de funciones matemáticas.

UtilidadEl objetivo del paradigma funcional es conseguir lenguajes expresivos y

matemáticamente elegantes, en los que no sea necesario bajar al nivel de la máquina para describir el proceso llevado a cabo por el programa, y evitando el concepto de estado del cómputo. La secuencia de computaciones llevadas a cabo por el programa se regiría única y exclusivamente por la reescritura de definiciones más amplias a otras cada vez más concretas y definidas, usando lo que se denominan definiciones dirigidas.

Page 4: Paradigma de Programacion.(1)

Todo esto con el objetivo de familiarizar a los estudiantes con un lenguaje elegante en el cual se pueda manejar más fácilmente y así los programas sean menos extensos y complejos.

Otro de los objetivos primordiales de dicho paradigma es buscar satisfacer las necesidades del usuario con respecto a operaciones matemáticas y convertirse en un lenguaje más expresivo.

Características

Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos laterales.

Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas).

Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignación de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional híbrido.

Lenguajes Funcionales

Entre los lenguajes funcionales puros, cabe destacar a Haskell y Miranda. Los lenguajes funcionales híbridos más conocidos son Scala, Lisp, Scheme, Ocaml, SAP y Standard ML (estos dos últimos, descendientes del lenguaje ML). Erlang es otro lenguaje funcional de programación concurrente. R también es un lenguaje funcional dedicado a la estadística.[1] Recientemente Microsoft Research está trabajando en el lenguaje F# (Functional#).

Entre otros lenguajes que se podrían utilizar para programación funcional se podrían incluir a Perl, pues, aunque es un lenguaje de propósito muy general, se pueden realizar programas usando exclusivamente funciones definidas por el usuario. Así como Python, como lenguaje que incorpora el paradigma funcional.

Page 5: Paradigma de Programacion.(1)

Paradigma Lógico

La programación lógica consiste en la aplicación del corpus de conocimiento sobre lógica para el diseño de lenguajes de programación; no debe confundirse con la disciplina de la lógica computacional.

La programación lógica comprende dos paradigmas de programación: la programación declarativa y la programación funcional. La programación declarativa gira en torno al concepto de predicado, o relación entre elementos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático.

Paradigma Orientado a Objetos

La Programación Orientada a Objetos (POO u 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 computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos.

La programación orientada a objetos es una nueva forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.

Herencia: (por ejemplo, herencia de la clase D a la clase C) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables públicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.

Objeto: Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.

Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede

Page 6: Paradigma de Programacion.(1)

producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

Evento: Un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.

Mensaje: Una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.

Propiedad o atributo: Contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.

Estado interno: Es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.

Componentes de un objeto: Atributos, identidad, relaciones y métodos.

Representación de un objeto: Un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.

En comparación con un lenguaje imperativo, una "variable", no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.

Características de la POO (Programación Orientada a Objetos)

Hay un cierto desacuerdo sobre exactamente qué características de un método de programación o lenguaje le definen como "orientado a objetos", pero hay un consenso general en que 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.

Page 7: Paradigma de Programacion.(1)

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 específica 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 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 Collection 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

Page 8: Paradigma de Programacion.(1)

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.

Lenguajes Orientados a Objetos

Entre los lenguajes orientados a objetos se destacan los siguientes:

ABAP ABL Lenguaje de programación de OpenEdge de Progress Software ActionScript ActionScript 3 Ada C++ C# Clarion D Object Pascal (Delphi) Flex builder (adobe) Gambas Harbour Eiffel Java JavaScript (la herencia se realiza por medio de la programación basada en

prototipos) Léxico (en castellano) Objective-C Ocaml Oz R Perl (soporta herencia múltiple. La resolución se realiza en preorden, pero puede

modificarse al algoritmo C3 por medio del módulo Class::C3 en CPAN) PHP (en su versión 5) Python Ruby Smalltalk (Proyecto investigativo. Influenció a Java.) Magik (SmallWorld) Vala VB.NET Visual FoxPro (en su versión 6) Visual Basic 6.0 XBase++ Lenguaje DRP

Muchos de estos lenguajes de programación no son puramente orientados a objetos, sino que son híbridos que combinan la POO con otros paradigmas.

Page 9: Paradigma de Programacion.(1)

Al igual que C++ otros lenguajes, como OOCOBOL, OOLISP, OOPROLOG y Object REXX, han sido creados añadiendo extensiones orientadas a objetos a un lenguaje de programación clásico.

Un nuevo paso en la abstracción de paradigmas de programación es la Programación Orientada a Aspectos (POA). Aunque es todavía una metodología en estado de maduración, cada vez atrae a más investigadores e incluso proyectos comerciales en todo el mundo.

Los tipos de Paradigmas de Programación, según Ambler, son:

• Operacionales• Declarativos• Demostrativos

Paradigma Operacional

Los lenguajes que siguen este paradigma especifican la programación como un conjunto de secuencias computacionales que se ejecutan paso a paso.

Dentro del paradigma operacional (siempre siguiendo la clasificación de Ambler), podemos encontrar el paradigma imperativo y el paradigma orientado a objetos.

Los lenguajes que siguen el paradigma imperativo se centran en la acción, es decir, la computación se ve como una secuencia de acciones (especificadas paso a paso) que convierten los datos de entrada iniciales en los datos de salida finales.

Algunos lenguajes que siguen este paradigma serian el COBOL, FORTRAN, BASIC, C, Ada, Pascal, etc.

Los lenguajes orientados a objetos son la evolución natural de los lenguajes que siguen el paradigma imperativo. Se podría decir, que el modulo o tipo abstracto evoluciona al concepto de objeto.

Bajo la perspectiva del paradigma orientado a objetos, la programación consiste en definir cuales son los objetos adecuados para resolver un problema determinado y resolver el problema mediante la interacción entre los distintos objetos a través del intercambio de mensajes.

Algunos lenguajes que siguen este paradigma serían el Smalltalk, Eiffel, C++, Java u Object Pascal.

Aclarar que la orientación a objetos se incluye en un paradigma propio porque sus características conducen a una filosofía diferente de resolución de problemas.

Page 10: Paradigma de Programacion.(1)

Paradigma Declarativo

Un lenguaje declarativo se construye estableciendo hechos, reglas, restricciones, ecuaciones, transformaciones u otras propiedades que debe tener el conjunto de valores que constituyen la solución.

A partir de esta información, el sistema debe de ser capaz de derivar un esquema de evaluación que nos permita computar una solución, es decir, no existe una descripción paso a paso de cómo llegar a la solución.

Habitualmente se suelen incluir características operacionales para mejorar la eficiencia en la resolución de problemas (en este caso, a los lenguajes se les denomina pseudo declarativos).

Dentro del paradigma declarativo podemos distinguir el paradigma funcional (Haskell, Erlang), lógico (Prolog), transformacional (CLIPS, JESS) y relacional (SQL).

Paradigma Demostrativo

En los lenguajes que siguen el paradigma demostrativo no es necesario especificar las operaciones que se deben ejecutar paso a paso para obtener la solución, ni tampoco es necesario especificar un conjunto de restricciones que debe cumplir el conjunto de valores que constituyen la solución.

Page 11: Paradigma de Programacion.(1)