tema 1 - lenguajes de programación orientados a objetosjjap/tema3lenguajespoo.pdf · programación...
Post on 10-Apr-2018
221 Views
Preview:
TRANSCRIPT
Tema 1. LPOO 1
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
Tema 1
Lenguajes de Programación Orientados a Objetos
Versión 6.0 – 14 de febrero de 2005 © Francisco José García Peñalvo
2Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
ResumenEn este tema se exponen los principios fundamentales que, de forma genérica, se deben conocer sobre los lenguajes de programación orientados a objetos. Se comienza con la historia de estos lenguajes, se sigue con las diferentes clasificaciones de los múltiples lenguajes de programación y con los elementos concretos que pueden aparecer en un lenguaje de programación orientado a objetos. También se mencionan las características que pueden servir para la elección de un determinado lenguaje de programación. Por último, se presentan las características más destacables de algunos lenguajes de programación orientados a objetos
Resumen
[Deitel y Deitel, 2003] Capítulo 1[Meyer, 1999] Capítulos 33, 34, 35 y 36[Rumbaugh et al., 1998] Capítulos 14, 15 y 16[Stroustrup, 2002] Capítulo 1
Bibliografía
Programación orientada a objetos; Lenguaje de programación orientado a objetos; Lenguaje basado en objetos; Lenguaje basado en clases; Lenguaje orientado a objetos; Comprobación de tipos; Lenguaje orientado a objetos puro; Lenguaje orientado a objetos híbrido; Ligadura temprana; Ligadura tardía; Metadato; Biblioteca de clases; Entorno de desarrollo
Descriptores
Tema 1. LPOO 2
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
3Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Esquema
1. Historia y evolución2. Clasificación3. Características4. Revisión general de algunos LPOO
representativos5. Referencias6. Lecturas complementarias
4Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
1. Historia y Evolución
Tema 1. LPOO 3
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
5Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
1.1 Marco histórico de la OO (i)La OO ha seguido pasos similares a otros paradigmas de desarrollo
Primeramente el énfasis estuvo en las técnicas de programaciónPosteriormente se centró la atención en las fases de desarrollo de mayor nivel de abstracción, diseño y análisis Actualmente los procesos de negocio son el foco de interés
La evolución temporal de la OO ha sido más irregularPrimeros pasos dados a finales de la década de los sesentaParada significativa en su evolución hasta la segunda mitad de la década de los ochenta Resurge con tremenda fuerza, especialmente a partir de la primera conferencia OOPSLA en 1986
Gran diversidad, que podría calificarse de caótica en algunas parcelas
En los últimos años de la década de los noventa se produjo una cierta madurez en la tecnología de objetos, caminando hacia la unificación y los primeros estándares
6Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
1.1 Marco histórico de la OO (ii)
El término objeto surge de forma independiente en varios campos de la informática en la década de los setenta
Se refiriere a nociones que eran diferentes en su apariencia pero relacionadas entre síTratan de manejar la complejidad de los sistemas software
De forma que los objetos representabanComponentes de un sistema descompuesto modularmente Unidades modulares de representación del conocimiento
Tema 1. LPOO 4
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
7Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
1.1 Marco histórico de la OO (iii)Acontecimientos que contribuyeron a la evolución de los conceptos orientados a objetos [Levy, 1984]
Avances en la arquitectura de los computadores, incluyendo los sistemas de capacidades y el apoyo en hardware para conceptos de sistemas operativos Avances en los lenguajes de programación Avances en metodología de la programación, incluyendo la modularización y la ocultación de la información [Parnas, 1972]
A los anteriores deberían unirse [Booch, 1994]Avances en los modelos de bases datosInvestigación en Inteligencia ArtificialAvances en Filosofía y Ciencia Cognitiva
8Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
1.1 Marco histórico de la OO (iv)El concepto de un objeto tuvo sus inicios en el hardware con la aparición de arquitecturas basadas en descriptores y arquitecturas basadas en capacidades Muy relacionados con las arquitecturas orientadas a objetos están los sistemas operativos orientados a objetos
THE, UCLA Secure UNIX, StarOS, Medusa, iMAX, Microsoft Windows NT…
Aunque la tecnología de Bases de Datos ha evolucionado un tanto independientemente de la Ingeniería del Software, también ha contribuido al modelo de objetos
Aproximación entidad-relación al modelado de datos
En el campo de la Inteligencia Artificial, los avances en representación del conocimiento han contribuido a una comprensión de las abstracciones orientadas a objetos
Teoría de marcos para representar objetos del mundo real
Tema 1. LPOO 5
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
9Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
1.1 Marco histórico de la OO (v)
La Filosofía y la Ciencia Cognitiva han contribuido al avance del modelo de objetos
La idea de que el mundo podía verse en términos de objetos o procesos procede de los filósofos griegos
Concretamente de la Teoría de las Ideas desarrollada por Platón, a partir de las enseñanzas de Sócrates, y estudiada y ampliada por Aristóteles
Se puede decir que la OO se acerca más al enfoque Aristotélico-Tomista frente al enfoque Kantiano de los métodos estructurados
10Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Simula
Smalltalk 721970
Smalltalk 72
1980 Smalltalk 80
1966
C++Objective-C
Eiffel1990
OO COBOLADA 95SQL3DelphiJava
La historia de los LPOO comienza a finales de los años 60, con el lenguaje Simula, diseñado en el Norwegian Computing CentreDurante la década de los 70s la poca actividaden el tema la monopoliza SmalltalkLa década de los 80s supone un nuevo auge para la POOEntre 1980 y 1983 Stroustrup desarrolla C++En la década de los 90s se produce la explosión total de las tecnologías orientadas al objetoEn mayo 1995 de 1995 SUN presenta JavaEn octubre de 2000 Hewlett-Packard, Intel y Microsoft remiten C# a la EuropeanManufacturers Association (ECMA) para su estandarización. En diciembre de 2001 ECMA lo adopta como estándar
1.2 Historia de los LPOO (i)
2000C#
Tema 1. LPOO 6
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
11Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Algol 60
Pascal
Simula 67
Algol 68CLUCOBOL
Smalltalk 72
ADA 83
BCPL
C
ActorLISP
FLAVORS
LOOPS
CLOS
OO COBOL
ADA 95
ObjectPascal Smalltalk 80
Objective C
C++
Java
Eiffel
Delphi
Evolución de los LPOO
CPL1.2 Historia de los LPOO (ii)
C#
12Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
2. Clasificación de los LPOO
Tema 1. LPOO 7
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
13Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Existen varias clasificaciones de los LPOO,atendiendo a criterios de construcción ocaracterísticas específicas de los mismos
Clasificación de Peter WegnerClasificación de TeslerClasificación según el origen
2.1 Introducción
14Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
2.2 Clasificación de Wegner (i)
Lenguajes Basados en ObjetosSoportan objetos
Disponen de componentes caracterizados por un conjunto de operaciones (comportamiento) y un estado
Lenguajes Basados en ClasesDisponen, además de objetos, de componentes tipo clase con operaciones y estado común
Lenguajes Orientados al ObjetoAdemás de objetos y clases ofrecen mecanismos de herencia
[Wegner, 1987]
Tema 1. LPOO 8
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
15Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Basado en objeto = encapsulamiento + identidad de objetosBasado en clases = basado en objetos + abstracción de conjuntoOrientados a objetos = Basados en clases + herencia + autorrecursión
Basado enObjetos
Objetos
Basado enClases
Orientado alObjeto
+ Clases
+ HerenciaAda 83Clipper 5.2
CLU
Ada 95C++EiffelSmalltalkDelphi
2.2 Clasificación de Wegner (ii)
[Graham, 1994]
16Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Orientados alproceso
Orientados alobjeto
Estático
Dinámico
POSLPOSL OOSLOOSL
OODLOODLPODLPODLPascal, C
Process-OrientedStatic Languages
Object-OrientedStatic Languages
C++, Java
Object-OrientedDinamic Languages
Process-OrientedDinamic Languages
Lisp, Scheme Smalltalk, Dylan
2.3 Clasificación de Tesler (i)
[Tesler, 1993]
Tema 1. LPOO 9
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
17Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
2.3 Clasificación de Tesler (ii)
Un sistema de tipos son las reglas que establecen la utilización de los tipos su corrección en un lenguaje
de modelado o realización
Lenguajes de programación OOCon comprobación estricta de tipos (Eiffel)
La concordancia se impone de forma estrictaNo puede llamarse a una operación sobre un objeto a menos que en la clase o la superclase del objeto esté definido el prototipo exacto de esa operación
Puede detectarse en tiempo de compilación cualquier violación a la concordancia de tipos
Comprobación débil de tiposSin tipos
Un cliente puede enviar un mensaje a cualquier clase (aunque ésta desconozca cómo responder al mensaje)No puede saberse si hay incongruencias de tipos hasta la ejecución
18Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
FORMA
MOMENTOdel CHEQUEO
RIGUROSIDAD
dinámico
estricta
débil
sin tipos
declaración inferencia
estático
C++
CAMLEiffel,Pascal OO
Smalltalk
Sistemas de tiposMonomórficos
Polimórficos
LigaduraEstática
Dinámica
[Cardelli y Wegner, 1985]
2.3 Clasificación de Tesler (iii)
Tipificación o tipado (typing) es el proceso de declarar cuál es el tipo de información que puede
contener una variable
Tema 1. LPOO 10
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
19Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Beneficios del uso de lenguajes con tipos estrictosEvitan los fallos en tiempo de ejecución derivados de conflictos con los tiposDetección temprana en tiempo de compilación de erroresDeclaración de tipos como ayuda para la documentaciónEficiencia en el código
[Tesler, 1981]
2.3 Clasificación de Tesler (iv)
20Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Ligadura es el proceso de asociar un atributo a un nombre.En el caso de las funciones, el término ligadura (binding) serefiere a la conexión o enlace entre una llamada a funcióny el código real ejecutado como resultado de la llamada
[Joyanes, 1998]
Ligadura estática otemprana
Ligadura dinámica otardía
2.3 Clasificación de Tesler (v)
Tema 1. LPOO 11
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
21Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Ligadura estática o tempranaResuelve las correspondencias en tiempo de compilaciónNo hay sobrecarga en tiempo de ejecución y los fallos se detectan en tiempo de compilaciónLos enlaces no pueden hacerse sin volver a compilar
Ligadura dinámica o tardíaLa correspondencia se hace al invocar los métodosSoporta la evolución de los programas sin tener que recompilarCoste en tiempo de ejecución
2.3 Clasificación de Tesler (vi)
22Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Comprobación Estática
Comprobación Dinámica
Ligadura Estática
Garantía de corrección, interpretación inflexible
C, Cobol
Combinación no válida (Sin sentido)
Ligadura Dinámica
Garantía de corrección,Interpretación flexible
C++, Object Pascal
No hay garantía de corrección,
interpretación flexible Smalltalk
2.3 Clasificación de Tesler (vii)
Tema 1. LPOO 12
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
23Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Lenguajes Puros
ObjetosMensajes
Clases
Lenguajes Híbridos
ObjetosMensajes
Clases
+
Lenguajescon basetradicional
SmalltalkEiffel
C++Object Pascal
2.4 Clasificación según el origen (i)
24Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Lenguajes Puros Lenguajes Híbridos
Ventajas Desventajas Ventajas DesventajasObligan a seguir los principios del paradigma objetualProporcionan su máxima flexibilidad para cambiar los aspectos esenciales del lenguaje
En general, son menos rápidos que los híbridosSon difíciles de codificar en toda clase de operacionesfundamentalesPérdida de eficiencia en tiempo de ejecución
RápidosPermiten una mayorintegración con el entorno existenteLos programadores pueden seguir siendo productivos mientras aprenden las extensiones orientadas al objeto
Pierden con frecuencia alguna característica del paradigma objetualNo permiten modificarlas características de construcción del lenguaje base
2.3 Clasificación según el origen (ii)
Tema 1. LPOO 13
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
25Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
3. Características de los LPOO
26Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
• Objetos• Clases• Herencia simple• Herencia múltiple• Comprobación estricta de
tipos frente a comprobación débil• Encapsulamiento• Empaquetamiento• Genericidad• Paso de mensajes
• Polimorfismo • Excepciones• Concurrencia• Persistencia• Metadatos• Afirmaciones y restricciones • Bibliotecas de clases• Eficiencia• Administración de memoria• Entorno de desarrollo
[Rumbaugh et al., 1991]
3.1 Elementos Concretos
Tema 1. LPOO 14
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
27Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
3.2 Requisitos Deseables en los LPOO
Conceptos clarosOrientación al Objeto puraSeguridadAlto nivelModelo de ejecución simpleSintaxis fácil de leer
Eliminación de la redundanciaPequeñoDe fácil transición a otros lenguajesSoporte para el aseguramiento de la correcciónEntornos agradables
[Kölling, 1999]
28Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Smalltalk
Eiffel
C++
Java
Smalltalk
C++
Java
Eiffel
C++
Java
4. Revisión de algunos de los PrincipalesLPOO
Sim
ula
Simula
C#
C#
C#
Tema 1. LPOO 15
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
29Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
4.1 Simula (i)
El Simula 67 fue considerado como el primer LPOOFue diseñado en 1967 por Ole-Johan Dhal y Kristen Nygaard en el Norwegian ComputingCenter en OsloEl nombre de Simula 67 fue acortado a Simula en 1986, existiendo un estándar del lenguaje desde 1987 [SIS, 1987]
30Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
4.1 Simula (ii)class POLIGONO;
virtual: procedure set_verticesbegin
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
Tema 1. LPOO 16
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
31Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
a
bresume b
resume a
resume b
resume a
4.1 Simula (iii)
CORRUTINAS
32Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
beginclass CONTROLLER; begin
integer i;detach;for i:= 1 step 1 until 1000 resume printer
end CONTROLLER;
class PRINTER; begininteger i;
detach; while true dofor i:=1 step 1 until 8 do beginresume producer;outreal(producer.last_input);resume controller;
end;next_line
endend PRINTER; ...ref(PRINTER) printer; ref(CONTROLLER) controller; ...printer :- new PRINTER; controller :- new CONTROLLER;...resume controllerend
4.1 Simula (iv)CORRUTINAS
Tema 1. LPOO 17
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
33Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
4.2 Smalltalk (i)Primer lenguaje creado con tecnología de objetos purosEl origen de Smalltalk está alrededor de 1970 en la Universidad de Utah de la mano de Alan KaySmalltalk se desarrolla en el Xerox Palo Alto Research Center (PARC) por Alan Kay, Adele Goldberg y Daniel IngallsLos 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 MotifSmalltalk 72, Smalltalk 74, Smalltalk 76, Smalltalk 78 y Smalltalk 80Smalltalk/V de DigitalEntorno de programación
Lenguaje Smalltalk básicoColección de clasesEntorno real de programación
El estilo del lenguaje se enfatiza la ligadura dinámica y no realiza chequeo de tiposEl bloque fundamental es la clase, que contiene la descripción de variables y métodosLos métodos contienen el código y definen cómo responde un objeto a un mensaje
34Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
4.2 Smalltalk (ii)La ejecución de una rutina de un objeto se denomina en la terminología de Smalltalk “enviar un mensaje” al objeto
La clase del objeto encontrará la forma apropiada de manejar dicho mensaje
Todo en Smalltalk son objetos, incluyendo a las propias clasesEl entorno de Smalltalk permite un rápido desarrollo de programasLa biblioteca de clases fue diseñada para ser extendida y adaptada por adición de subclases para satisfacer las necesidades de la aplicaciónLa arquitectura Modelo/Vista/Controlador (MVC) es una importantecontribución de SmalltalkUna referencia clásica sobre Smalltalk es [Goldberg y Robson, 1983]
Tema 1. LPOO 18
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
35Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Abstracción Variables de instancia Métodos de instancia Variables de clase Métodos de clase
Sí Sí Sí Sí
Encapsulamiento De variables De métodos
Privado Público
Modularidad Tipos de módulo Ninguno
Jerarquía Herencia Unidades genéricas Metaclases
Simple No Sí
Tipos Comprobación estricta Polimorfismo
No Sí
Concurrencia Multitarea Indirectamente (mediante clases)
Persistencia Objetos persistentes No
4.2 Smalltalk (iii)
36Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
4.3 C++ (i)C++ es un lenguaje híbrido, extensión del lenguaje CFue desarrollado por Bjarne Stroustrup en los laboratorios AT&TLas primeras versiones del lenguaje se denominaron C con clases, y datan de 1980El nombre de C++ se debe a Rick Mascitti, quien lo bautizó de estamanera en el verano de 1983C++ fue instalado por primera vez fuera del grupo de investigación del autor en julio de 1983En 1987 surge la necesidad de estandarización de C++Dispone de capacidades para la herencia simple y múltiplePor defecto C++ tiene ligadura estáticaLas funciones definidas como virtuales pueden beneficiarse del concepto de ligadura dinámica
Tema 1. LPOO 19
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
37Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
4.3 C++ (ii)C++ es estrictamente tipado, aunque admite la posibilidad de castingNo cuenta con un recolector de basuraLa ausencia de un gestor automático de memoria por defecto, obliga al concepto de destructorOcultamiento de la información, incluso a los descendientesCuenta con un mecanismo de acceso especial por parte de una clase o una función que se declare como friendSoporte de manejo de excepcionesSoporte de genericidad mediante las plantillasPermite sobrecarga de operadoresSintaxis oscura y gramática difícil de analizarLenguaje 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
[Stroustrup, 1997] es una referencia válida para este lenguaje
38Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
#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;
}
4.3 C++ (iii)
Tema 1. LPOO 20
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
39Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Abstracción Variables de instancia Métodos de instancia Variables de clase Métodos de clase
Sí Sí Sí Sí
Encapsulamiento De variables De métodos
Público, Privado, Protegido Público, Privado, Protegido
Modularidad Tipos de módulo Fichero
Jerarquía Herencia Unidades genéricas Metaclases
Múltiple Sí No
Tipos Comprobación estricta Polimorfismo
Sí Sí
Concurrencia Multitarea Indirectamente (mediante clases)
Persistencia Objetos persistentes No
4.3 C++ (iv)
40Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
4.4 Eiffel (i)Eiffel fue desarrollado por Bertrand MeyerEs un lenguaje orientado al objeto puroSoporta ligadura dinámicaTiene comprobación estricta de tiposAdmite herencia múltipleSoporta clases parametrizadasLa gestión de memoria la lleva a cabo el entorno de programaciónEiffel proporciona una biblioteca de clases predefinidas muy completaEiffel cuenta con la clase como único criterio de estructuraciónUna 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ísticasCuenta con manejo de excepciones[Meyer, 1992] es una de las referencias obligadas, aunque con unas miras más amplias, se recomienda [Meyer, 1997]
Tema 1. LPOO 21
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
41Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Diseño por contratoPrecondicionesPrecondiciones
Deben cumplirse antes de que se invoque un método
PoscondicionesPoscondicionesSe garantizan que han de cumplirse después de que se haya ejecutado el método
InvariantesInvariantesCondición que debe cumplir la clase en toda circunstancia estable
Un contrato entre el proveedor y el usuario de una clase espera que
El usuario de una clase asegurará que las precondiciones de un método se cumplan antes de que el método se invoqueEl proveedor de la clase garantizará que las poscondiciones se cumplandespués que se ha aplicado el método
Ase
rcio
nes
4.4 Eiffel (ii)
42Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
class STACK[T]creation
createfeature {NONE}
elems : ARRAY[T];feature
max_size : INTEGER;total : INTEGER;create(n : INTEGER) isrequire
n > 0do
!!elems.make(1,n);max_size := n
ensuremax_size = n;total = 0;
end;empty : BOOLEAN is do
Result := total = 0ensure
equal(strip(), old strip())end;
full : BOOLEAN is doResult := total =max_size
ensureequal(strip(), old strip())
end;top : T is require
not emptydo
Result := elems@totalensure
equal(strip(), old strip())endpush(x : T) is require
not fulldo
total := total + 1;elems.put(x,total)
ensurenot empty;total = old total + 1;top = x
end;
pop is requirenot empty
dototal := total -1
ensuretotal = old total -1;not full
endinvariant
0 <= total;total <= max_size
end – STACK
4.4 Eiffel (iii)
Tema 1. LPOO 22
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
43Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Abstracción Variables de instancia Métodos de instancia Variables de clase Métodos de clase
Sí Sí No No
Encapsulamiento De variables De métodos
Público (sólo lectura), Privado, Selectivamente Público, Privado, Selectivamente
Modularidad Tipos de módulo Clase
Jerarquía Herencia Unidades genéricas Metaclases
Múltiple Sí No
Tipos Comprobación estrictaPolimorfismo
Sí Sí
Concurrencia Multitarea Si (mediante clases de bibliotecas)
Persistencia Objetos persistentes Si (mediante clases)
4.4 Eiffel (iv)
44Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
4.5 Java (i)Realizado por un equipo de Sun Microsystems en 1995Ha recibido una especial atención desde los primeros meses de 1996Es un lenguaje orientado al objeto puro diseñado desde cero, querecibe muchas influencias de C++Se le atribuyen las siguientes características
Simple y poderosoSeguroRobustoInteractivoIndependiente de la arquitecturaInterpretadoSencillo de aprender
Soporta threadsRecogida de basura automáticaDe la abundante bibliografía existente se recomienda [SUN, 2004]
Tema 1. LPOO 23
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
45Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Java es un componente principal dentro del curríc
ulo de la
Ingeniería del Software varias Universidades
En los primeros seis meses de 1996, Javaapareció en la prensa de US 4325 veces, comopunto de comparación Bill Gates apareció5096 veces
4.5 Java (ii)Java produce un bytecode que será interpretado por una máquina virtualLa máquina virtual se encuentra a menudo en navegadores WebLa explosión de Internet ha influido en el auge de Java
46Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
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();
}}
4.5 Java (iii)
Tema 1. LPOO 24
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
47Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
Abstracción Variables de instancia Métodos de instancia Variables de clase Métodos de clase
Sí Sí Sí Sí
Encapsulamiento De variables De métodos
Público, Privado, Protegido Público, Privado, Protegido
Modularidad Tipos de módulo Fichero
Jerarquía Herencia Unidades genéricas Metaclases
Simple No No
Tipos Comprobación estricta Polimorfismo
Sí Sí
Concurrencia Multitarea Sí
Persistencia Objetos persistentes No
4.5 Java (iv)
48Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
C# (i)C# es el nuevo lenguaje diseñado por Microsoft para su plataforma .NET
Es posible escribir código para la plataforma .NET en muchos otros lenguajes C# es el único que ha sido diseñado específicamente para ser utilizado en esta plataforma
Microsoft suele referirse a C# como el lenguaje nativo de .NETGran parte de la biblioteca de clases base de .NET ha sido escrita en C#
C# ha sido diseñado por Scott Wiltamuth y Anders HejlsbergC# es un lenguaje orientado a objetos que intenta recoger las mejores características de muchos otros lenguajes
Unir la alta productividad y facilidad de aprendizaje de Visual Basic con la potencia de C++
Algunas referencias interesantes pueden ser [Troelsen, 2001; Mayo, 2002]
Tema 1. LPOO 25
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
49Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
C# (ii)Principales características (i)
Orientado a objetosModelo de programación orientada a objetos homogéneo
Todo el código se escribe dentro de clases y todos los tipos de datos, incluso los básicos, son clases que heredan de System.Object
Permite definir estructurasClases un tanto especiales
Sus objetos se almacenan en pila, por lo que se trabaja con ellos directamente y no con referencias al montículo, lo que permite accederlos más rápido El tiempo necesario para pasarlas como parámetros a métodos es mayor (sólo paso por valor)No admiten herencia, pero sí implementación de interfaces
Fuertemente tipadoTiene recolector de basuraIncluye soporte nativo para eventos y delegados
50Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
C# (iii)Principales características (ii)
Incorpora propiedadesSoporta redefinición de operadoresAdmite atributos
No son miembros de las clases sino información sobre éstas que se pueden incluir en su declaración
Soporte de XMLSoporte de threadsGestión de excepcionesIncluye espacios de nombres
Tema 1. LPOO 26
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
51Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
C# (iv)
// HolaMundo1.cs
class HolaMundo1 {public static void Main(){
System.Console.WriteLine(“¡Hola Mundo!”);}
}
52Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
C# (v)Abstracción Variables de instancia
Métodos de instancia Variables de clase Métodos de clase
Sí Sí Sí Sí
Encapsulamiento De variables De métodos
Público, Privado, Protegido, Interno Público, Privado, Protegido, Interno
Modularidad Tipos de módulo Fichero Jerarquía Herencia
Unidades genéricas Metaclases
Simple No No
Tipos Comprobación estricta Polimorfismo
Sí Sí
Concurrencia Multitarea Sí Persistencia Objetos persistentes No
Tema 1. LPOO 27
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
53Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
5. Referencias (i)[Booch, 1994] Booch, G. “Object Oriented Analysis and Design with Applications”. 2nd Edition.
The Benjamin/Cummings Publishing Company, 1994[Cardelli y Wegner, 1985] Cardelli, L., Wegner, P. “On Understanding Types, Data
Abstraction and Polymorphism”. ACM Computing Surveys, 17(4). 1985[Goldberg y Robson, 1983] Goldberg, A., Robson, D. “Smalltalk-80: The Language and its
Implementation”. Addison-Wesley, 1983[Graham, 1994] Graham, I. “Object-Oriented Methods”. 2nd Edition. Addison-Wesley, 1994[Joyanes, 1998] Joyanes Aguilar, L. “Programación Orientada a Objetos”. 2ª Edición.
McGraw-Hill, 1998.[Kölling, 1999] Kölling, M. “The Problem of Teaching Object-Oriented Programming, Part 1:
Languages”. Journal of Object-Oriented Programming, 11(8):8-15. January 1999[Levy, 1984] Levy, H. “Capability-Based Computer Systems”. Digital Press, 1984[Mayo, 2002]Mayo, J. “C# Unleashed”. Sams Publishing, 2002[Meyer, 1992] Meyer, B. “Eiffel: The Language”. Prentice Hall Object-Oriented Series, 1991;
second revised printing, 1992[Meyer, 1997] Meyer, B. “Object Oriented Software Construction”. 2nd Edition. Prentice Hall,
1997
54Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
5. Referencias (ii)[Parnas, 1972] Parnas, D. L. “On the Criteria To Be Used in Decomposing Systems into
Modules”. Communications of the ACM, 15(12):1053-1058. December 1972[Rumbaugh et al., 1991] Rumbaugh, J., Blaha, M., Premerlani, W., Eddy, F.,
Lorensen, W. “Object-Oriented Modeling and Design”. Prentice-Hall, 1991[SIS, 1987] SIS. “Data Processing - Programming Languages — SIMULA”.
Standardiseringskommissionen i Sverige (Swedish Standards Institute), Svensk Standard SS 63 61 14, 20 May, 1987
[Stroustrup, 1997] Stroustrup, B. “The C++ Programming Language”. 3rd Edition, Addison Wesley, 1997
[SUN, 2004] SUN Microsystems. “The Java Tutorial. A Practical Guide for Programmers”. http://java.sun.com/docs/books/tutorial/index.html. [Última vez visitado, 14/02/2005]. March 2004
[Tesler, 1981] Tesler, L. “The Smalltalk Environment”. Byte, 6(8). August 1981[Tesler, 1993] Tesler, L. “Object-Oriented Dynamic Languages”. In Proceedings of the Object
Expo Conference. July 1993[Troelsen, 2001] Troelsen, A. “C# and the .NET Platform”. Apress, 2001[Wegner, 1987] Wegner, P. “The Object-Oriented Classification Paradigm in Research
Directions on Object-Oriented Programming”. MIT Press, Cambridge, MA, 1987
Tema 1. LPOO 28
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
55Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
6. Lecturas complementarias (i)“The C# Corner”. http://www.c-sharpcorner.com/ [Última vez visitado, 14/2/2005]. 2005
Sitio especializado en el lenguaje C#“The Real Stroustrup Interview”. IEEE Computer, 31(6):110-114. June 1998
En 1998 se difundió por Internet una supuesta entrevista con Bjarne Stroustrup en la prácticamente el autor de C++ tiraba por los suelos su obra. Así en el mes de junio de este mismo año se publica en la revista IEEE Computer una entrevista, esta vez de verdad, con Stroustrup, donde da su opinión sobre el papel de C++ en el mundo de la Programación Orientada a Objetos
Interactive Software Engineering. “Object-Oriented Languages: A Comparison”. Interactive Software Engineering (ISE). http://www.eiffel.com/doc/manuals/technology/oo_comparison/page.html [Última vez visitado, 14-2-2005]. 2005Tablas comparativas entre Eiffel, C++, Java y Smalltalk
Joyner, I. “C++?? A Critique of C++ and Programming and Language Trends of the 1990s”. 3rd edition http://burks.brighton.ac.uk/burks/pcinfo/progdocs/cppcrit. [Última vez visitado 14/2/2005]. 2000.Informe crítico sobre C++, comparando sus características con otros lenguajes de programación, en especial con Eiffel
Kay, A C. “The Early History of Smalltalk”. In Proceedings of the second ACM SIGPLAN conference on History of programming languages – HOPL II. (April 20 - 23, 1993, Cambridge United States). ACM SIGPLAN Notices, 28(3):69-75. March 1993Artículo sobre los orígenes de Smalltalk
56Universidad de Salamanca – Departamento de Informática y Automática © Dr. Francisco J. García Peñalvo
Tema 1. LPOO
6. Lecturas complementarias (ii)Meyer, B. “Approaches to Portability”. Journal of Object-Oriented Programming (JOOP), 11(4):68-70.
July/August 1998Comparativa de los bytecodes de Java con el método propio de Eiffel consistente en utilizar C como lenguaje intermedio para conseguir la portabilidad del software
Meyer, B. “Construcción de Software Orientado a Objetos”. 2ª Edición. Prentice Hall, 1999En relación con el presente tema se destaca en capítulo 35, De Simula a Java y más allá: los principales entornos y lenguajes O-O, donde se repasan algunos de los lenguajes de programación orientados a objetos de mayor peso
Piattini, M. G. “Selección de Lenguajes de Programación Orientados al Objeto: ¿Cuestión de Religión?”. Revista BASE de la ALI (Asociación de Doctores, Licenciados e Ingenieros en Informática), Nº24:58-62. Abril, 1994Artículo intoductorio al mundo de los LPOO
Prechelt, L. “Comparing Java vs. C/C++ Efficiency Differences to Interpersonal Differences”. Communications of the ACM, 42(10):109-112. October 1999Artículo en el que se presenta un experimento llevado a cabo para comparar la eficiencia de estos lenguajes de programación
Rans, M. “A History of Object-Oriented Programming Languages and their Impact on Program Design and Software Development”. http://jeffsutherland.com/papers/Rans/OOlanguages.pdf [Última vez visitado, 14/2/2005]. November 1999Resumen de la historia de algunos lenguajes de programación orientados a objetos destacados
Stroustrup, B. “The Design and Evolution of C++”. Addison-Wesley, 1994. Reprinted with corrections in April 1995Libro del autor de C++ explicando la historia, diseño y evolución de C++
Tema 1. LPOO 29
Programación Orientada a Objetos3º de I.T.I.S.
Departamento de Informática y AutomáticaUniversidad de Salamanca
Tema 1
Lenguajes de Programación Orientados a Objetos
Versión 6.0 – 14 de febrero de 2005 © Francisco José García Peñalvo
top related