Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes POO y la Web

4,136 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,136
On SlideShare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
224
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Desarrollo de Aplicaciones Web II - Sesión 05 - Evolución de los lenguajes POO y la Web

  1. 1. Didier Fabián Granados Muñoz Sesión No. 5 – La Web y la Orientación a Objetos Septiembre 2 de 2009
  2. 2. Bueno… y qué es un paradigma? Un paradigma es un conjunto de teorías generales, suposiciones, leyes o técnicas de que se vale una escuela de análisis o comunidad científica para evaluar todas las cosas.
  3. 3.  La Programación Orientada a Objetos es intentar llevar a un programa de computador una visión de un problema que sea lo más cercana posible a la realidad, de acuerdo al ámbito en el que se desarrolla el mismo.
  4. 4. El mundo está lleno de objetos reales, los cuales se pueden representar como tales en una solución computarizada.
  5. 5. Clase Es el molde o plantilla con el que se puede construir objetos. En otras palabras, es una abstracción de objetos. Objeto Es cualquier cosa de la cual podamos emitir un concepto, o descripción. En la POO, un objeto es una instancia de una clase, llamando instanciar al hecho de producir y completar un objeto llenando con valores sus atributos.
  6. 6. Los objetos no solo tienen sus características. También tienen la capacidad de ejecutar diferentes acciones.
  7. 7.  Encapsulamiento.  Público.  Privado.  Protegido.  Herencia.  Simple.  Múltiple.  Polimorfismo.  Sobrecarga de métodos.  Tipificación.  Concurrencia.  Persistencia.  Entre otras…
  8. 8.  En UML, una clase está representada por un rectángulo con tres secciones.  Nombre de la clase  Atributos de la clase con su encapsulamiento y tipo de dato.  Métodos de la clase, con su encapsulamiento y tipo de dato que retorna,
  9. 9. class System Automóv il Mazda Chev rolet Renault
  10. 10. Un taxi es un automóvil con número de operación y que trabaja para una empresa.
  11. 11. Asociación Agregación Composición “se relaciona con” “es parte de” “debe tener”
  12. 12.  Genericidad.  Excepciones.  Interfaces.  Clases abstractas.
  13. 13. Hay muchos lenguajes, pero solo vamos a ver lo necesario…
  14. 14.  La teoría que vimos en la clase pasada tiene su aplicación en un lenguaje de programación que sea orientado a objetos.  Dependiendo del lenguaje, muchas cosas se aplican de la misma manera, pero hay otras que sí tienen diferencias extremas (especialmente la sintaxis) y que, sencillamente, no están.  A continuación se hará un recorrido por la implementación más sencilla y común que existe en todos los lenguajes orientados a objetos.  También se irán viendo palabras claves que no se han dicho durante el curso, y se irán explicando en su momento.
  15. 15. 1. Para crear una clase  Se hace uso de la palabra clave class.  Algunos lenguajes la declaran con la primera letra en mayúscula (Class). class Automovil
  16. 16. 2. Para declarar atributos  Según la sintaxis del lenguaje, se llama primero el tipo de dato y luego el nombre del atributo.  Y antes del tipo de dato, el tipo de encapsulamiento. public String color
  17. 17. 3. Para declarar métodos  De igual manera que los atributos, se llama primero el tipo de dato y luego al método.  Y antes del tipo de dato, el encapsulamiento.  Si tiene parámetros, estos deben tener primero el tipo de dato y luego su nombre. public Motor setMotor(Motor motor)
  18. 18. 4. Constructor  Un constructor es un método perteneciente a la clase que posee unas características especiales:  Se llama igual que la clase.  No devuelve nada, ni siquiera void.  Pueden existir varios, pero siguiendo las reglas de la sobrecarga de funciones.  De entre los que existan, tan sólo uno se ejecutará al crear un objeto de la clase.  También se encapsula. public Automovil()
  19. 19. 5. Instanciación  Recordar que en la clase anterior se dijo cómo se instancia una clase…  Existe la palabra clave new.  Cuando se define la instancia, ésta deberá ser tipada con la misma clase y luego, se debe invocar al constructor de la clase.  Si hay sobrecarga del constructor, se debe invocar el que se ajuste a las necesidades del programador. Automovil mazda = new Automovil() Automovil chevrolet = new Automovil(2009, "MOR345")
  20. 20. 6. Invocación de atributos y métodos  Para invocar un método de una clase, depende de su encapsulamiento y de que la clase haya sido instanciada, a no ser que dicho método sea declarado como estático.  Normalmente se llama desde la misma variable de instancia.  Si es estático, se llama anteponiendo el nombre de la clase y luego el nombre del atributo o método. Automovil mazda = new Automovil(); Automovil chevrolet = new Automovil(2009, "MOR345"); int placa = mazda.getPlaca(); // mazda es instancia int numeroPuertas = Automovil.numeroPuertas;
  21. 21. Los demás conceptos (herencia, interfaces, asociaciones…) son muy variables de acuerdo al lenguaje de programación.
  22. 22.  Conceptos claros.  Orientación al Objeto pura.  Seguridad.  Alto nivel.  Modelo de ejecución simple.  Sintaxis fácil de leer.  Eliminación de la redundancia.  Pequeño.  De fácil transición a otros lenguajes.  Soporte para el aseguramiento de la corrección.  Entornos agradables.
  23. 23.  El Simula 67 fue considerado como el primer lenguaje de programación orientado a objetos.  Fue diseñado en 1967 por Ole-Johan Dhal y Kristen Nygaard en el Norwegian Computing Center en Oslo.  El nombre de Simula 67 fue acortado a Simula en 1986, existiendo un estándar del lenguaje desde 1987.
  24. 24. class POLIGONO; virtual: procedure set_vertices begin procedure dibuja begin ... end; end POLIGONO POLIGONO class TRIANGULO ... end TRIANGULO ... ref(TRIANGULO) t; ref(POLIGONO) p; ... p :- t; p.set_vertices; p.dibuja; (p qua TRIANGULO).dibuja
  25. 25.  Primer lenguaje creado con tecnología de objetos puros  El origen de Smalltalk está alrededor de 1970 en la Universidad de Utah de la mano de Alan Kay  Smalltalk se desarrolla en el Xerox Palo Alto Research Center (PARC) de la mano de Alan Kay, Adele Goldberg y Daniel Ingalls  Los conceptos de Smalltalk han influido en el diseño de LPOO y en el aspecto y sensación de los GUI como los de Macintosh o Motif.  Algunas versiones: Smalltalk 72, Smalltalk 74, Smalltalk 76, Smalltalk 78 y Smalltalk 80, Smalltalk/V de Digital.
  26. 26.  Entorno de programación: Lenguaje Smalltalk básico, colección de clases y el entorno real de programación.  El estilo del lenguaje se enfatiza la ligadura dinámica y no realiza chequeo de tipos.  El bloque fundamental es la clase, que contiene la descripción de variables y métodos.  Los métodos contienen el código, y definen cómo responde un objeto a un mensaje.  La ejecución de una rutina de un objeto se denomina en la terminología de Smalltalk “enviar un mensaje” al objeto, cuya clase encontrará la forma apropiada de manejar dicho mensaje.
  27. 27.  Todo en Smalltalk son objetos, incluyendo a las propias clases.  El entorno de Smalltalk permite un rápido desarrollo de programas.  La biblioteca de clases fue diseñada para ser extendida y adaptada por adición de subclases para satisfacer las necesidades de la aplicación.  La arquitectura Modelo Vista Controlador (MVC) es una importante contribución de Smalltalk.
  28. 28. Concepto Características ¿Las implementa? Abstracción Variables de instancia Sí Métodos de instancia Sí Variables de clase Sí Métodos de clase Sí Encapsulamiento De variables Privado De métodos Público Modularidad Tipos de módulo Ninguno Jerarquía Herencia Simple Unidades genéricas No Metaclases Sí Tipos Comprobación estricta No Polimorfismo Sí Concurrencia Multitarea Indirectamente (mediante clases) Persistencia Objetos persistentes No
  29. 29.  C++ es un lenguaje híbrido, extensión del lenguaje C.  Fue desarrollado por Bjarne Stroustrup en los laboratorios AT&T.  Las primeras versiones del lenguaje se denominaron C con clases, y datan de 1980.  El nombre de C++ se debe a Rick Mascitti, quien lo bautizó de esta manera en el verano de 1983.  C++ fue instalado por primera vez fuera del grupo de investigación del autor en julio de 1983.  En 1987 surge la necesidad de estandarización de C++.  Dispone de capacidades para la herencia simple y múltiple.
  30. 30.  Por defecto C++ tiene ligadura estática.  Las funciones definidas como virtuales pueden beneficiarse del concepto de ligadura dinámica.  C++ es estrictamente tipado, aunque admite la posibilidad de casting.  No cuenta con un recolector de basura.  La ausencia de un gestor automático de memoria por defecto, obliga al concepto de destructor.  Ocultamiento de la información incluso a los descendientes.  Cuenta con un mecanismo de acceso especial por parte de una clase o una función que se declare como friend.  Soporte de manejo de excepciones.
  31. 31.  Soporte de genericidad mediante las plantillas.  Permite sobrecarga de operadores.  Sintaxis oscura, y gramática difícil de analizar.  Lenguaje complejo, preocupado por la detección temprana de errores, y por la eficiencia de la ejecución, perdiendo algo de sencillez y de flexibilidad para el diseño.  …
  32. 32. #include <iostream.h> #include <string.h> class Saludos { char *saludo; public: Saludos(char *msg) { int longitud = strlen(msg); saludo = new char[longitud+1]; strcpy(saludo, msg); } char* muestra(void) {return saludo;} }; void main(void) { Saludos s1("Hola Mundo }:()"); Saludos s2("Bye, dear friends :((("); cout << s1.muestra() << endl; cout << s2.muestra() << endl; }
  33. 33. Concepto Características ¿Las implementa? Abstracción Variables de instancia Sí Métodos de instancia Sí Variables de clase Sí Métodos de clase Sí Encapsulamiento De variables Público, Privado, Protegido De métodos Público, Privado, Protegido Modularidad Tipos de módulo Fichero Jerarquía Herencia Múltiple Unidades genéricas Sí Metaclases No Tipos Comprobación estricta Sí Polimorfismo Sí Concurrencia Multitarea Indirectamente (mediante clases) Persistencia Objetos persistentes No
  34. 34.  Eiffel fue desarrollado por Bertrand Meyer.  Es un lenguaje orientado al objeto puro.  Soporta ligadura dinámica.  Tiene comprobación estricta de tipos.  Admite herencia múltiple.  Soporta clases parametrizadas.  La gestión de memoria la lleva a cabo el entorno de programación.  Eiffel proporciona una biblioteca de clases predefinidas muy completa.
  35. 35.  Eiffel cuenta con la clase como único criterio de estructuración.  Una declaración de clase en Eiffel puede incluir una lista de características exportadas, una lista de clases predecesoras, y una lista de declaraciones de características  Cuenta con manejo de excepciones
  36. 36. class STACK[T] empty : BOOLEAN is do creation Result := total = 0 create ensure feature {NONE} equal(strip(), old strip()) elems : ARRAY[T]; end; feature ... max_size : INTEGER; pop is require total : INTEGER; not empty create(n : INTEGER) is do require total := total -1 n > 0 ensure do total = old total -1; !!elems.make(1,n); not full max_size := n end ensure invariant max_size = n; 0 <= total; total = 0; total <= max_size end; end – STACK
  37. 37. Concepto Características ¿Las implementa? Abstracción Variables de instancia Sí Métodos de instancia Sí Variables de clase No Métodos de clase No Encapsulamiento De variables Público (sólo lectura), Privado, De métodos Selectivamente Público, Privado, Selectivamente Modularidad Tipos de módulo Clase Jerarquía Herencia Múltiple Unidades genéricas Sí Metaclases No Tipos Comprobación estricta Sí Polimorfismo Sí Concurrencia Multitarea Sí (mediante clases de bibliotecas) Persistencia Objetos persistentes Sí (mediante clases)
  38. 38.  Realizado por un equipo de Sun Microsystems a finales de 1995.  Ha recibido una especial atención desde los primeros meses de 1996.  Es un lenguaje orientado al objeto puro diseñado desde cero, que recibe muchas influencias de C++.  Soporta threads (hilos).  Recogida de basura automática.
  39. 39.  Se le atribuyen las siguientes características  Simple y poderoso.  Seguro.  Robusto.  Interactivo.  Independiente de la arquitectura.  Interpretado.  Sencillo de aprender (Hmmmmmmmmm…)  Java produce un bytecode que será interpretado por una máquina virtual.  La máquina virtual se encuentra a menudo en navegadores web.  La explosión de Internet ha influido en el auge de Java.
  40. 40. class _saludos { String saludo = ""; _saludos(String msg) { saludo = msg; } public void mostrar() { System.out.println(saludo); } } class Saludos { public static void main(String args[]) { _saludos s1 = new _saludos("Hola Mundo :)))"); _saludos s2 = new _saludos("Adios amigos :(("); s1.mostrar(); s2.mostrar(); } }
  41. 41. Concepto Características ¿Las implementa? Abstracción Variables de instancia Sí Métodos de instancia Sí Variables de clase Sí Métodos de clase Sí Encapsulamiento De variables Público, Privado, Protegido De métodos Público, Privado, Protegido Modularidad Tipos de módulo Fichero Jerarquía Herencia Simple Unidades genéricas No Metaclases No Tipos Comprobación estricta Sí Polimorfismo Sí Concurrencia Multitarea Indirectamente (mediante clases) Persistencia Objetos persistentes EJB
  42. 42. Bueno… y entonces…
  43. 43.  La programación dinámica en la Web se inició con la incrustación del código del lenguaje seleccionado dentro del código HTML.  Dada la evolución del modelo y la arquitectura de las aplicaciones, se optó por separar la capa de lógica de la capa de presentación.  También han surgido diferentes frameworks que han permitido extender el concepto de reutilización de código.
  44. 44. Un framework, en el desarrollo de software, es una estructura de soporte definida, mediante la cual otro proyecto de software  La programación dinámica en la puede ser organizado y desarrollado. Típicamente, puede incluir Web sesoporte de programas, bibliotecasdel lenguaje interpretado inició con la incrustación y un entre otros software para ayudar a desarrollar y unir los código diferentes componentes de un proyecto. del lenguaje seleccionado dentro del código HTML. Representa una arquitectura de software que modela las  Dada larelaciones generales de las entidades del dominio. Provee una evolución del modelo y la estructura y una metodología de trabajo la cual extiende o arquitectura las aplicaciones del dominio. utiliza de las aplicaciones, se optó por separar la capa de lógica de la capa de presentación.  También han surgido diferentes frameworks que han permitido extender el concepto de reutilización de código.
  45. 45. Y hablaremos entonces de… PHP C#
  46. 46.  Siglas de Hypertext Preprocessor.  Originalmente diseñado en Perl.  Totalmente orientado a la Web.  Inicialmente era un lenguaje procedural.  Desde la versión 4.2.x comenzó su propia implementación de POO, aunque se robusteció en la versión 5.x.  Es un lenguaje interpretado.  Siempre tiene que estar en una etiqueta.  No cuenta con tipos de datos, es decir, cualquier variable puede ser declarada y puede tomar cualquier valor.
  47. 47.  Capacidad de conexión con la mayoría de los motores de base de datos que se utilizan en la actualidad. Se destaca su conectividad con MySQL y PostgreSQL.  Capacidad de expandir su potencial utilizando la enorme cantidad de módulos (llamados ext's o extensiones).  Posee una amplia documentación en su página oficial, entre la cual se destaca que todas las funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda.  Es libre, por lo que se presenta como una alternativa de fácil acceso para todos. <?php $saludo = "Hola"; echo $saludo; ?>
  48. 48. Concepto Características ¿Las implementa? Abstracción Variables de instancia Sí Métodos de instancia Sí Variables de clase Sí Métodos de clase Sí Encapsulamiento De variables Público, Privado, Protegido De métodos Público, Privado, Protegido Modularidad Tipos de módulo Fichero Jerarquía Herencia Simple Unidades genéricas No Metaclases No Tipos Comprobación estricta Sí Polimorfismo No Concurrencia Multitarea Indirectamente (mediante clases) Persistencia Objetos persistentes No
  49. 49.  Su sintaxis básica deriva de C/C++.  A diferencia de PHP, es compilado.  Utiliza el modelo de objetos de la plataforma .NET (o dicho de otra manera, .NET Framework), el cual es similar al de Java, aunque incluye mejoras derivadas de otros lenguajes (entre ellos Delphi).  Aunque forma parte de la plataforma.NET, C# es un lenguaje de programación independiente diseñado para generar programas sobre dicha plataforma.  Una variable de objeto de cierta clase no almacena los valores del objeto sino su referencia (al igual que Java).  El operador de asignación no copia los valores de un objeto, sino su referencia a él (al igual que Java).
  50. 50.  Un constructor tiene el mismo nombre que su clase y es sintácticamente similar a un método.  Un constructor no devuelve ningún valor.  Al igual que los métodos, los constructores también pueden ser sobrecargados.  Si no se especifica un constructor en una clase, se usa uno por defecto que consiste en asignar a todas las variables el valor de 0, null o false según corresponda.  Para crear un nuevo objeto se utiliza la siguiente sintaxis: variable = new nombre_clase();.  Un destructor se declara como un constructor, aunque va precedido por el signo ~.
  51. 51.  Se emplea una desasignación de memoria de objetos no referenciados (recolección de basura), y cuando esto ocurre se ejecuta el destructor de dicha clase.  El destructor de una clase no se llama cuando un objeto sale del ámbito.  Todos los destructores se llamarán antes de que finalice un programa.  La palabra clave this es un apuntador al mismo objeto en el cual se usa.  La palabra clave static hace que un miembro pertenezca a una clase en vez de pertenecer a objetos de dicha clase. Se puede tener acceso a dicho miembro antes de que se cree cualquier objeto de su clase y sin referencias a un objeto.
  52. 52.  Un método static no tiene una referencia this.  Un método static puede llamar sólo a otros métodos static.  Un método static sólo debe tener acceso directamente a datos static.  Un constructor static se usa para inicializar atributos que se aplican a una clase en lugar de aplicarse a una instancia.  C# permite la sobrecarga de operadores con la palabra clave operator.  …
  53. 53. Concepto Características ¿Las implementa? Abstracción Variables de instancia Sí Métodos de instancia Sí Variables de clase Sí Métodos de clase Sí Encapsulamiento De variables Público, Privado, Protegido De métodos Público, Privado, Protegido Modularidad Tipos de módulo Fichero Jerarquía Herencia Simple Unidades genéricas No Metaclases No Tipos Comprobación estricta Sí Polimorfismo Sí Concurrencia Multitarea Indirectamente (mediante clases) Persistencia Objetos persistentes Sí (Web Forms)

×