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

Post on 12-Jun-2015

3.781 views 1 download

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

Didier Fabián Granados Muñoz

Sesión No. 5 – La Web y la Orientación a Objetos

Septiembre 2 de 2009

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.

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.

El mundo está lleno de objetos reales, los

cuales se pueden representar como tales

en una solución computarizada.

Clase

Objeto

Es el molde o plantilla con el que se puede construir

objetos. En otras palabras, es una abstracción de

objetos.

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.

Los objetos no solo tienen sus características. También

tienen la capacidad de ejecutar diferentes acciones.

Encapsulamiento.

Público.

Privado.

Protegido.

Herencia.

Simple.

Múltiple.

Polimorfismo.

Sobrecarga de métodos.

Tipificación.

Concurrencia.

Persistencia.

Entre otras…

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,

class System

Chev rolet

Automóv il

Mazda Renault

Un taxi es un automóvil con número de operación y que trabaja para una empresa.

Asociación Agregación Composición

“es parte de” “debe tener”“se relaciona con”

Genericidad.

Excepciones.

Interfaces.

Clases abstractas.

Hay muchos lenguajes, pero solo vamos a ver lo necesario…

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.

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

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

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)

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()

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")

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;

Los demás conceptos (herencia, interfaces, asociaciones…) son muy variables de acuerdo al lenguaje de programación.

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.

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.

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

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.

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.

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.

Concepto Características ¿Las implementa?

Abstracción Variables de instanciaMétodos de instanciaVariables de claseMétodos de clase

SíSíSíSí

Encapsulamiento De variablesDe métodos

PrivadoPúblico

Modularidad Tipos de módulo Ninguno

Jerarquía HerenciaUnidades genéricasMetaclases

SimpleNoSí

Tipos Comprobación estrictaPolimorfismo

NoSí

Concurrencia Multitarea Indirectamente(mediante clases)

Persistencia Objetos persistentes No

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.

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.

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.

#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;

}

Concepto Características ¿Las implementa?

Abstracción Variables de instanciaMétodos de instanciaVariables de claseMétodos de clase

SíSíSíSí

Encapsulamiento De variablesDe métodos

Público, Privado, ProtegidoPúblico, Privado, Protegido

Modularidad Tipos de módulo Fichero

Jerarquía HerenciaUnidades genéricasMetaclases

MúltipleSíNo

Tipos Comprobación estrictaPolimorfismo

SíSí

Concurrencia Multitarea Indirectamente(mediante clases)

Persistencia Objetos persistentes No

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.

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

class STACK[T]

creation

create

feature {NONE}

elems : ARRAY[T];

feature

max_size : INTEGER;

total : INTEGER;

create(n : INTEGER) is

require

n > 0

do

!!elems.make(1,n);

max_size := n

ensure

max_size = n;

total = 0;

end;

empty : BOOLEAN is do

Result := total = 0

ensure

equal(strip(), old strip())

end;

...

pop is require

not empty

do

total := total -1

ensure

total = old total -1;

not full

end

invariant

0 <= total;

total <= max_size

end – STACK

Concepto Características ¿Las implementa?

Abstracción Variables de instanciaMétodos de instanciaVariables de claseMétodos de clase

SíSíNoNo

Encapsulamiento De variablesDe métodos

Público (sólo lectura), Privado, SelectivamentePúblico, Privado, Selectivamente

Modularidad Tipos de módulo Clase

Jerarquía HerenciaUnidades genéricasMetaclases

MúltipleSíNo

Tipos Comprobación estrictaPolimorfismo

SíSí

Concurrencia Multitarea Sí (mediante clases de bibliotecas)

Persistencia Objetos persistentes Sí (mediante clases)

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.

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.

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();

}

}

Concepto Características ¿Las implementa?

Abstracción Variables de instanciaMétodos de instanciaVariables de claseMétodos de clase

SíSíSíSí

Encapsulamiento De variablesDe métodos

Público, Privado, ProtegidoPúblico, Privado, Protegido

Modularidad Tipos de módulo Fichero

Jerarquía HerenciaUnidades genéricasMetaclases

SimpleNoNo

Tipos Comprobación estrictaPolimorfismo

SíSí

Concurrencia Multitarea Indirectamente(mediante clases)

Persistencia Objetos persistentes EJB

Bueno… y entonces…

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.

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.

Un framework, en el desarrollo de software, es una estructura de soporte definida, mediante la cual otro proyecto de software puede ser organizado y desarrollado. Típicamente, puede incluir soporte de programas, bibliotecas y un lenguaje interpretado entre otros software para ayudar a desarrollar y unir los diferentes componentes de un proyecto.Representa una arquitectura de software que modela las relaciones generales de las entidades del dominio. Provee una estructura y una metodología de trabajo la cual extiende o utiliza las aplicaciones del dominio.

Y hablaremos entonces de…

PHP C#

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.

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;

?>

Concepto Características ¿Las implementa?

Abstracción Variables de instanciaMétodos de instanciaVariables de claseMétodos de clase

SíSíSíSí

Encapsulamiento De variablesDe métodos

Público, Privado, ProtegidoPúblico, Privado, Protegido

Modularidad Tipos de módulo Fichero

Jerarquía HerenciaUnidades genéricasMetaclases

SimpleNoNo

Tipos Comprobación estrictaPolimorfismo

SíNo

Concurrencia Multitarea Indirectamente(mediante clases)

Persistencia Objetos persistentes No

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).

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 ~.

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.

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.

Concepto Características ¿Las implementa?

Abstracción Variables de instanciaMétodos de instanciaVariables de claseMétodos de clase

SíSíSíSí

Encapsulamiento De variablesDe métodos

Público, Privado, ProtegidoPúblico, Privado, Protegido

Modularidad Tipos de módulo Fichero

Jerarquía HerenciaUnidades genéricasMetaclases

SimpleNoNo

Tipos Comprobación estrictaPolimorfismo

SíSí

Concurrencia Multitarea Indirectamente(mediante clases)

Persistencia Objetos persistentes Sí (Web Forms)