SlideShare une entreprise Scribd logo
1  sur  24
Télécharger pour lire hors ligne
Tema 1: Lenguajes de Programación Orientados a Objetos




                                Programación
                             Orientada a Objetos

                                                3º de I.T.I.S
                                                    2001-
                                              Curso 2001-2002

                                      Francisco José García Peñalvo

                            Departamento de Informática y Automática - Universidad de Salamanca




                                                   Tema 1



                                              Lenguajes de Programación
                                                 Orientados a Objetos
                                                                            Versión 3.0 – Febrero de 2002
                                                                           © Francisco José García Peñalvo




                            Departamento de Informática y Automática - Universidad de Salamanca




Departamento de Informática y Automática - Universidad de Salamanca                                          1
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                             Esquema
                              1. Historia y evolución
                              2. Clasificación
                              3. Características
                              4. Revisión general de algunos LPOO
                                 representativos
                              5. Referencias
                              6. Lecturas complementarias



                        Departamento de Informática y Automática - Universidad de Salamanca   3




                                   1. Historia y Evolución




                        Departamento de Informática y Automática - Universidad de Salamanca   4




Departamento de Informática y Automática - Universidad de Salamanca                               2
Tema 1: Lenguajes de Programación Orientados a Objetos




                             1.1 Historia de los LPOO
                          1966      Simula
                           1970                                  ••La historia de los LPOO comienza
                                                                    La historia de los LPOO comienza
                                   Smalltalk 72                    a finales de los años 60, con el lenguaje
                                                                    a finales de los años 60, con el lenguaje
                          1980     Smalltalk 80                    Simula, diseñado en el Norwegian Computing
                                                                    Simula, diseñado en el Norwegian Computing
                                    C++                            Centre
                                                                    Centre
                                    Objective-C                  ••Durante la década de los 70s la poca actividad
                                                                    Durante la década de los 70s la poca actividad
                                                                   en el tema la monopoliza Smalltalk
                                                                    en el tema la monopoliza Smalltalk
                                    Eiffel
                                                                 ••La década de los 80s supone un nuevo auge para
                                                                    La década de los 80s supone un nuevo auge para
                          1990
                                    OO COBOL                       la POO
                                                                    la POO
                                    ADA 95                       ••Entre 1980 yy1983 Stroustrup desarrolla C++
                                                                    Entre 1980 1983 Stroustrup desarrolla C++
                                    SQL3                         ••En la década de los 90s se produce la explosión
                                                                    En la década de los 90s se produce la explosión
                                                                   total de las tecnologías orientadas al objeto
                                                                    total de las tecnologías orientadas al objeto
                                    Delphi
                                    Java




                        Departamento de Informática y Automática - Universidad de Salamanca                                       5




                          1.1 Historia de los LPOO
                                                                                                                   CPL

                                                                      Algol 60
                                                                                                             BCPL

                          COBOL              CLU        Pascal                        Algol 68
                                                                     Simula 67                                 C

                        OO COBOL               ADA 83

                                                                     Smalltalk 72
                                   ADA 95
                                                         LISP                            Actor

                                         Object                                                               C++        Eiffel
                                         Pascal       FLAVORS
                                                                       Smalltalk 80
                                                                                            Objective C
                                         Delphi         LOOPS
                                                                                                              Java


                                                         CLOS
                                                                                                          Evolución de los LPOO


                        Departamento de Informática y Automática - Universidad de Salamanca                                       6




Departamento de Informática y Automática - Universidad de Salamanca                                                                   3
Tema 1: Lenguajes de Programación Orientados a Objetos




                        2. Clasificación de los LPOO




                        Departamento de Informática y Automática - Universidad de Salamanca   7




                                              2.1 Introducción
                               Existen varias clasificaciones de los LPOO,
                                atendiendo a criterios de construcción o
                                características específicas de los mismos

                                                  • Clasificación de Peter Wegner
                                                  • Clasificación de Tesler
                                                  • Clasificación según el origen


                        Departamento de Informática y Automática - Universidad de Salamanca   8




Departamento de Informática y Automática - Universidad de Salamanca                               4
Tema 1: Lenguajes de Programación Orientados a Objetos




                                       2.2 Clasificación de
                                             Wegner
                         • Lenguajes Basados en Objetos: Soportan objetos. Es decir,
                           disponen de componentes caracterizados por un conjunto de
                           operaciones (comportamiento) y un estado

                         • Lenguajes Basados en Clases: Disponen, además de objetos,
                           de componentes tipo clase con operaciones y estado común

                         • Lenguajes Orientados al Objeto: Además de objetos y clases
                           ofrecen mecanismos de herencia
                                                                                                    [Wegner, 1987]

                        Departamento de Informática y Automática - Universidad de Salamanca                           9




                                       2.2 Clasificación de
                                             Wegner
                                                     Objetos      Basado en           + Clases
                                                                   Objetos

                                                                  Ada 83
                                                                  Clipper 5.2           Basado en      + Herencia
                                                                                         Clases
                                                                                          CLU
                                                                                                       Orientado al
                              •   Basado en objeto = encapsulamiento +                                   Objeto
                                  identidad de objetos                                                   Ada 95
                              •   Basado en clases = basado en objetos +                                 C++
                                                                                                         Eiffel
                                  abstracción de conjunto                                                Smalltalk
                                                                                                         Delphi
                              •   Orientados a objetos = Basados en clases +
                                  herencia + autorrecursión


                        Departamento de Informática y Automática - Universidad de Salamanca                           10




Departamento de Informática y Automática - Universidad de Salamanca                                                        5
Tema 1: Lenguajes de Programación Orientados a Objetos




                         2.3 Clasificación de Tesler
                                                   Orientados al                   Orientados al
                                                     proceso                          objeto
                                                        POSL                              OOSL
                                                     Process-Oriented                Object-Oriented
                             Estático                Static Languages                Static Languages
                                                          Pascal, C                       C++, Java

                                                        PODL                              OODL
                                                    Process-Oriented                  Object-Oriented
                             Dinámico              Dinamic Languages                 Dinamic Languages

                                                        Lisp, Scheme                   Smalltalk, Dylan


                                                                                                          [Tesler, 1993]
                        Departamento de Informática y Automática - Universidad de Salamanca                            11




                         2.3 Clasificación de Tesler




                                  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

                        Departamento de Informática y Automática - Universidad de Salamanca                            12




Departamento de Informática y Automática - Universidad de Salamanca                                                         6
Tema 1: Lenguajes de Programación Orientados a Objetos




                         2.3 Clasificación de Tesler
                                                                                                                           Monomórficos
                                                                MOMENTO
                                                                                            Sistemas de tipos
                                                              del CHEQUEO
                                                                                             [Cardelli and Wegner, 1985]   Polimórficos

                                                                                                                           Estática
                                                                           dinámico                       Ligadura
                                                                                                                           Dinámica


                                                    Smalltalk
                                                                            estático
                                                                                       Eiffel,         CAML
                                                                                       Pascal OO
                                                                                C++
                                                                                         declaración       inferencia
                                                                                                                             FORMA
                                                                estricta
                                                      débil

                                        sin tipos

                              RIGUROSIDAD
                        Departamento de Informática y Automática - Universidad de Salamanca                                               13




                         2.3 Clasificación de Tesler

                         • Beneficios del uso de lenguajes con tipos
                           estrictos
                               – Evitan los fallos en tiempo de ejecución
                                 derivados de conflictos con los tipos
                               – Detección temprana en tiempo de compilación
                                 de errores
                               – Declaración de tipos como ayuda para la
                                 documentación
                               – Eficiencia en el código                [Tesler, 1981]

                        Departamento de Informática y Automática - Universidad de Salamanca                                               14




Departamento de Informática y Automática - Universidad de Salamanca                                                                            7
Tema 1: Lenguajes de Programación Orientados a Objetos




                          2.3 Clasificación de Tesler
                                          Tipificación o tipado (“typing”) es el proceso de
                                          Tipificación o tipado (“typing”) es el proceso de
                                         declarar cuál es el tipo de información que puede
                                         declarar cuál es el tipo de información que puede
                                                       contener una variable
                                                        contener una variable

                      Sistemas de tipos estáticos                          Sistemas de tipos dinámicos
                        • También llamados sistemas con                        • También llamados sistemas con tipado
                          tipado fuerte o estricto                               débil,no estricto o dinámico
                        • Exigen asociación explícita de un tipo               • No exigen asociación explícita de un tipo
                          a cada nombre declarado                                a cada variable
                        • El tipo de cada objeto se ha de determinar           • Cada objeto conoce su tipo cuando se crea
                          con anterioridad a la ejecución del programa           durante la ejecución
                        • Menos flexible pero más segura                       • Más flexibilidad
                        • Ejecución más eficiente al no tener que              • Pérdida de eficiencia durante la ejecución del
                          hacer comprobación de tipos en tiempo de               programa, debida a la necesidad de mantener
                          ejecución                                              y comprobar el tipo de todos los objetos
                                                                                 durante la ejecución


                         Departamento de Informática y Automática - Universidad de Salamanca                                15




                          2.3 Clasificación de Tesler
                                 Ligadura es el proceso de asociar un atributo a un nombre.
                                 En el caso de las funciones, el término ligadura (binding) se
                                 refiere a la conexión o enlace entre una llamada a función
                                   y el código real ejecutado como resultado de la llamada
                                                                              [Joyanes, 1998]

                                                                                     Ligadura dinámica o
                                                                                           tardía




                              Ligadura estática o
                                  temprana
                         Departamento de Informática y Automática - Universidad de Salamanca                                16




Departamento de Informática y Automática - Universidad de Salamanca                                                               8
Tema 1: Lenguajes de Programación Orientados a Objetos




                         2.3 Clasificación de Tesler
                         • Ligadura estática o temprana
                               – Resuelve las correspondencias en tiempo de compilación
                               – No hay sobrecarga en tiempo de ejecución y los fallos se detectan
                                 en tiempo de compilación
                               – Los enlaces no pueden hacerse sin volver a compilar

                         • Ligadura dinámica o tardía
                               – La correspondencia se hace al invocar los métodos
                               – Soporta la evolución de los programas sin tener que recompilar
                               – Coste en tiempo de ejecución




                        Departamento de Informática y Automática - Universidad de Salamanca                             17




                         2.3 Clasificación de Tesler
                                                                Comprobación                   Comprobación
                                                                  Estática                       Dinámica


                                   Ligadura                  Garantía de corrección,          Combinación no válida
                                   Estática                  interpretación inflexible           (Sin sentido)

                                                                       C, Cobol

                                  Ligadura                   Garantía de corrección,           No hay garantía de
                                  Dinámica                    Interpretación flexible               corrección,
                                                                                              interpretación flexible
                                                                C++, Object Pascal                   Smalltalk




                        Departamento de Informática y Automática - Universidad de Salamanca                             18




Departamento de Informática y Automática - Universidad de Salamanca                                                          9
Tema 1: Lenguajes de Programación Orientados a Objetos




                           2.3 Clasificación según el
                                     Origen
                                                    Lenguajes Puros              Lenguajes Híbridos

                                                        Objetos                         Objetos
                                                        Mensajes                        Mensajes
                                                         Clases                          Clases

                                                       Smalltalk                            +
                                                        Eiffel
                                                                                        Lenguajes
                                                                                         con base
                                                                                       tradicional

                                                                                         C++
                                                                                     Object Pascal




                         Departamento de Informática y Automática - Universidad de Salamanca                                      19




                           2.3 Clasificación según el
                                     Origen

                                 Lenguajes Puros                                           Lenguajes Híbridos
                          Ventajas                    Desventajas                    Ventajas                      Desventajas
                      • Obligan a seguir los        • En general, son menos       • Rápidos                    • Pierden con frecuencia
                        principios del paradigma      rápidos que los híbridos    • Permiten una mayor           alguna característica
                        objetual                    • Son difíciles de codificar    integración con el entorno   del paradigma objetual
                      • Proporcionan su máxima        en toda clase de operaciones existente                   • No permiten modificar
                        flexibilidad para cambiar     fundamentales               • Los programadores pueden las características de
                        los aspectos esenciales del • Pérdida de eficiencia en      seguir siendo productivos    construcción del
                        lenguaje                      tiempo de ejecución           mientras aprenden las        lenguaje base
                                                                                    extensiones orientadas al
                                                                                    objeto




                         Departamento de Informática y Automática - Universidad de Salamanca                                      20




Departamento de Informática y Automática - Universidad de Salamanca                                                                       10
Tema 1: Lenguajes de Programación Orientados a Objetos




                                 3. Características de los
                                          LPOO




                        Departamento de Informática y Automática - Universidad de Salamanca                             21




                                3.1 Elementos Concretos
                         • Objetos                                             • Polimorfismo
                         • Clases                                              • Excepciones
                         • Herencia simple                                     • Concurrencia
                         • Herencia múltiple                                   • Persistencia
                         • Comprobación estricta de                            • Metadatos
                           tipos frente a comprobación débil                   • Afirmaciones y restricciones
                         • Encapsulamiento                                     • Bibliotecas de clases
                         • Empaquetamiento                                     • Eficiencia
                         • Genericidad                                         • Administración de memoria
                         • Paso de mensajes                                    • Entorno de desarrollo


                                                                                              [Rumbaugh et al., 1991]

                        Departamento de Informática y Automática - Universidad de Salamanca                             22




Departamento de Informática y Automática - Universidad de Salamanca                                                          11
Tema 1: Lenguajes de Programación Orientados a Objetos




                               3.2 Requisitos Deseables
                                     en los LPOO
                           • Conceptos claros                                   • Eliminación de la
                           • Orientación al Objeto                                redundancia
                             pura                                               • Pequeño
                           • Seguridad                                          • De fácil transición a
                                                                                  otros lenguajes
                           • Alto nivel
                                                                                • Soporte para el
                           • Modelo de ejecución                                  aseguramiento de la
                             simple                                               corrección
                           • Sintaxis fácil de leer                             • Entornos agradables
                                                                [Kölling, 1999]
                        Departamento de Informática y Automática - Universidad de Salamanca                       23




                              4. Revisión de algunos de
                                  los Principales LPOO
                                                           C+
                                                                                        Java




                                       ta lk                  +
                                   all        Eif
                                                                                                   u la




                               S m Ja             fel
                                                                                               Si m




                                           va
                                                                                                          i   E




                                                      C++
                                                                                                            ffe




                             C++
                                                                                                          l




                                                                                                       u la
                                                          a




                                                Smalltal
                                                      Jav




                                                         k                                         Si m
                        Departamento de Informática y Automática - Universidad de Salamanca                       24




Departamento de Informática y Automática - Universidad de Salamanca                                                    12
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                          4.1 Simula
                           • El Simula 67 fue considerado como el
                             primer LPOO
                           • 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 [SIS, 1987]

                        Departamento de Informática y Automática - Universidad de Salamanca   25




                                                        4.1 Simula
                            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




                        Departamento de Informática y Automática - Universidad de Salamanca   26




Departamento de Informática y Automática - Universidad de Salamanca                                13
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                        4.1 Simula
                            CORRUTINAS




                                       a
                                                            resume a                   resume a


                                                 resume b                 resume b

                                       b




                        Departamento de Informática y Automática - Universidad de Salamanca       27




                                                        4.1 Simula
                                                                 CORRUTINAS
                            begin
                            class CONTROLLER; begin
                                     integer i;
                               detach;
                               for i:= 1 step 1 until 1000 resume printer
                            end CONTROLLER;

                            class PRINTER; begin
                                     integer i;
                              detach;
                              while true do
                                for i:=1 step 1 until 8 do begin
                                  resume producer;
                                  outreal(producer.last_input);
                                  resume controller;
                                end;
                                next_line
                              end
                            end PRINTER; ...
                            ref(PRINTER) printer; ref(CONTROLLER) controller; ...
                            printer :- new PRINTER; controller :- new CONTROLLER;...
                            resume controller
                            end

                        Departamento de Informática y Automática - Universidad de Salamanca       28




Departamento de Informática y Automática - Universidad de Salamanca                                    14
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                      4.2 Smalltalk
                           - 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
                           - 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
                        Departamento de Informática y Automática - Universidad de Salamanca                    29




                                                      4.2 Smalltalk
                           - 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
                           - Una referencia clásica sobre Smalltalk es [Goldberg and Robson, 1983]




                        Departamento de Informática y Automática - Universidad de Salamanca                    30




Departamento de Informática y Automática - Universidad de Salamanca                                                 15
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                 4.2 Smalltalk
                        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


                        Departamento de Informática y Automática - Universidad de Salamanca                       31




                                                            4.3 C++
                             - 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


                        Departamento de Informática y Automática - Universidad de Salamanca                       32




Departamento de Informática y Automática - Universidad de Salamanca                                                    16
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                            4.3 C++
                                 - 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
                                 - [Stroustrup, 1997] es una referencia válida para este lenguaje

                        Departamento de Informática y Automática - Universidad de Salamanca                 33




                                                            4.3 C++
                            #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;
                            }


                        Departamento de Informática y Automática - Universidad de Salamanca                 34




Departamento de Informática y Automática - Universidad de Salamanca                                              17
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                            4.3 C++
                        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


                        Departamento de Informática y Automática - Universidad de Salamanca                                 35




                                                              4.4 Eiffel
                         - 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
                         - [Meyer, 1992] es una de las referencias obligadas, aunque con unas miras
                           más amplias, se recomienda [Meyer, 1997]

                        Departamento de Informática y Automática - Universidad de Salamanca                                 36




Departamento de Informática y Automática - Universidad de Salamanca                                                              18
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                               4.4 Eiffel
                        - Diseño por contrato
                             • Precondiciones: que deben cumplirse antes de que se invoque un método
                               Precondiciones
                         Aserciones




                             • Postcondiciones: que se garantizan han de cumplirse después de que se
                               Postcondiciones
                                               haya ejecutado el método
                             • Invariantes:
                               Invariantes     condició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 invoque
                                             El proveedor de la clase garantizará que las postcondiciones se cumplan
                                             después que se ha aplicado el método



                        Departamento de Informática y Automática - Universidad de Salamanca                       37




                                                               4.4 Eiffel
                         - Violación de Aserciones
                               ¿De quién es la responsabilidad?
                              • Precondiciones: De quien solicita el servicio (cliente)
                              • Postcondiciones: De quien ofrece el servicio (servidor)
                                Postcondiciones
                              • Invariantes:
                                Invariantes      De quien esté actuando en ese momento sobre el objeto

                                      • ¿Qué provoca la violación de una aserción? Excepciones

                                      • ¡Qué se encargue el responsable!
                                              Manejo de la excepción: tratar de arreglar la situación,
                                              cláusula de rescate:        , intentar nuevamente:
                                              Pasar la responsabilidad... ¿Nadie? El sistema aborta


                                Aserciones y Herencia: La subcontratación
                                el subcontratado pide menos y garantiza más (sino no es negocio          )

                        Departamento de Informática y Automática - Universidad de Salamanca                       38




Departamento de Informática y Automática - Universidad de Salamanca                                                    19
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                                       4.4 Eiffel
                                   class STACK[T]                         full : BOOLEAN is do                  pop is require
                                   creation                                    Result := total =                     not empty
                                      create                                   max_size                         do
                                   feature {NONE}                         ensure                                     total := total -1
                                      elems : ARRAY[T];                       equal(strip(), old strip())       ensure
                                   feature                                end;                                       total = old total -1;
                                      max_size : INTEGER;                top : T is require                          not full
                                      total : INTEGER;                       not empty                          end
                                      create(n : INTEGER) is             do                                  invariant
                                      require                               Result := elems@total               0 <= total;
                                         n>0                             ensure                                 total <= max_size
                                     do                                      equal(strip(), old strip())     end – STACK
                                        !!elems.make(1,n);              end
                                        max_size := n                   push(x : T) is require
                                      ensure                                not full
                                         max_size = n;                  do
                                         total = 0;                         total := total + 1;
                                      end;                                  elems.put(x,total)
                                      empty : BOOLEAN is do             ensure
                                        Result := total = 0                 not empty;
                                      ensure                                total = old total + 1;
                                         equal(strip(), old strip())        top = x
                                      end;                              end;


                        Departamento de Informática y Automática - Universidad de Salamanca                                                  39




                                                                       4.4 Eiffel
                        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, Selectivamente
                                                                 De métodos                                 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                                 Si (mediante clases de
                                                                                                            bibliotecas)
                        Persistencia                             Objetos persistentes                       Si (mediante clases)

                        Departamento de Informática y Automática - Universidad de Salamanca                                                  40




Departamento de Informática y Automática - Universidad de Salamanca                                                                               20
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                            4.5 Java
                           - 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++
                           - Se le atribuyen las siguientes características
                                 • Simple y poderoso
                                 • Seguro
                                 • Robusto
                                 • Interactivo
                                 • Independiente de la arquitectura
                                 • Interpretado
                                 • Sencillo de aprender
                           - Soporta threads
                           -Recogida de basura automática
                           - De la abundante bibliografía existente se recomienda [SUN, 2001]

                        Departamento de Informática y Automática - Universidad de Salamanca                              41




                                                            4.5 Java
                        - 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
                                                                                   la
                                                                                de
                                                                            ulo
                                                                        rí c s
                                                                    cur      e
                                                                 del sidad
                                                              ro    r
                                                         d ent nive
                                                      pal rias U
                                                  nci
                                             e pri are va
                                          ent ftw                         En los primer
                                       pon l So                       apareció en la
                                                                                        os seis meses
                                                                                                      de 1996, Java
                                  com ría de                                          prensa de US
                               u n ni e                                  punto de com                4325 veces, co
                           a es ge                                                     paración Bill                mo
                       Jav     In
                                                                                         5096 veces
                                                                                                     Gates apareció




                        Departamento de Informática y Automática - Universidad de Salamanca                              42




Departamento de Informática y Automática - Universidad de Salamanca                                                           21
Tema 1: Lenguajes de Programación Orientados a Objetos




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

                        Departamento de Informática y Automática - Universidad de Salamanca                           43




                                                            4.5 Java
                         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                        Sí

                         Persistencia                       Objetos persistentes              No

                        Departamento de Informática y Automática - Universidad de Salamanca                           44




Departamento de Informática y Automática - Universidad de Salamanca                                                         22
Tema 1: Lenguajes de Programación Orientados a Objetos




                                                      5. Referencias
                                   [Cardelli and Wegner, 1985] Cardelli, L., Wegner, P. “On Understanding Types, Data Abstraction and
                                       Polymorphism”. ACM Computing Surveys, 17(4). 1985.
                                   [Goldberg and Robson, 1983] Goldberg, A., Robson, D. “Smalltalk-80: The Language and its
                                       Implementation”. Addison-Wesley, 1983.
                                   [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.
                                   [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.
                                   [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, 2001] SUN Microsystems. “The Java Tutorial. A Practical Guide for Programmers”.
                                      http://java.sun.com/docs/books/tutorial/index.html. [Última vez visitado, 13/2/2002]. December
                                      2001.
                                   [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.
                                   [Wegner, 1987] Wegner, P. “The Object-Oriented Classification Paradigm in Research Directions on
                                      Object-Oriented Programming”. MIT Press, Cambridge, MA, 1987.


                        Departamento de Informática y Automática - Universidad de Salamanca                                             45




                               6. Lecturas Complementarias
                                  “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, 13-2-2002]. 2001.
                                               Tablas 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://www.progsoc.uts.edu.au/~geldridg/cpp/cppcv3/cppcv3.pdf.
                                      [Última vez visitado 7/1/2000]. 1996.
                                               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, 1993.
                                               Artículo sobre los orígenes de Smalltalk.
                                  Meyer, B. “Approaches to Portability”. Journal of Object-Oriented Programming (JOOP),
                                     11(4):68-70. July/August, 1998.
                                               Comparativa 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.
                        Departamento de Informática y Automática - Universidad de Salamanca                                             46




Departamento de Informática y Automática - Universidad de Salamanca                                                                          23
Tema 1: Lenguajes de Programación Orientados a Objetos




                               6. Lecturas Complementarias
                             Meyer, B. “Construcción de Software Orientado a Objetos”. 2ª Edición. Prentice Hall, 1999.
                                         En 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, 1994.
                                         Artí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 1999.
                                         Artí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,
                                13/2/2002]. November 1999.
                                         Resumen 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 1995.
                                         Libro del autor de C++ explicando la historia, diseño y evolución de C++.




                        Departamento de Informática y Automática - Universidad de Salamanca                                                  47




Departamento de Informática y Automática - Universidad de Salamanca                                                                               24

Contenu connexe

Similaire à Lenguajes POO

Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajesPedro Contreras Flores
 
Prohibiendo los bucles: Hacia la programación del siglo XXI.
Prohibiendo los bucles:  Hacia la programación del siglo XXI.Prohibiendo los bucles:  Hacia la programación del siglo XXI.
Prohibiendo los bucles: Hacia la programación del siglo XXI.Facultad de Informática UCM
 
Línea de-tiempo-del-lenguaje-de-programación
Línea de-tiempo-del-lenguaje-de-programaciónLínea de-tiempo-del-lenguaje-de-programación
Línea de-tiempo-del-lenguaje-de-programaciónArmandoC42
 
UDESA 2010 - Educación y Tecnología - Ciencias de la Educación - Taller 08
UDESA 2010 - Educación y Tecnología - Ciencias de la Educación - Taller 08UDESA 2010 - Educación y Tecnología - Ciencias de la Educación - Taller 08
UDESA 2010 - Educación y Tecnología - Ciencias de la Educación - Taller 08Ramiro Nahuel Pol
 
Lenguajes De Programacion
Lenguajes De ProgramacionLenguajes De Programacion
Lenguajes De ProgramacionROSA859
 
Ambiente virtual y Lenguaje de Domino Específico para la enseñanza de la prog...
Ambiente virtual y Lenguaje de Domino Específico para la enseñanza de la prog...Ambiente virtual y Lenguaje de Domino Específico para la enseñanza de la prog...
Ambiente virtual y Lenguaje de Domino Específico para la enseñanza de la prog...José Albert
 
Metreología programacion
Metreología programacionMetreología programacion
Metreología programaciontamaaraa
 
Metreología programacion
Metreología programacionMetreología programacion
Metreología programaciontamaaraa
 
El c++ por la práctica, introducción al lenguaje y su filoso prev
El c++ por la práctica, introducción al lenguaje y su filoso prevEl c++ por la práctica, introducción al lenguaje y su filoso prev
El c++ por la práctica, introducción al lenguaje y su filoso prevjtk1
 
Historia de los_lenguajes
Historia de los_lenguajesHistoria de los_lenguajes
Historia de los_lenguajesAquino1912
 
Lógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de PascalLógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de PascalFernando Galvez
 
Aprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primeroAprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primeroAndy Juan Sarango Veliz
 

Similaire à Lenguajes POO (20)

Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajes
 
Prohibiendo los bucles: Hacia la programación del siglo XXI.
Prohibiendo los bucles:  Hacia la programación del siglo XXI.Prohibiendo los bucles:  Hacia la programación del siglo XXI.
Prohibiendo los bucles: Hacia la programación del siglo XXI.
 
Línea de-tiempo-del-lenguaje-de-programación
Línea de-tiempo-del-lenguaje-de-programaciónLínea de-tiempo-del-lenguaje-de-programación
Línea de-tiempo-del-lenguaje-de-programación
 
Prologo Lenguajes FO
Prologo Lenguajes FOPrologo Lenguajes FO
Prologo Lenguajes FO
 
UDESA 2010 - Educación y Tecnología - Ciencias de la Educación - Taller 08
UDESA 2010 - Educación y Tecnología - Ciencias de la Educación - Taller 08UDESA 2010 - Educación y Tecnología - Ciencias de la Educación - Taller 08
UDESA 2010 - Educación y Tecnología - Ciencias de la Educación - Taller 08
 
Lenguajes De Programacion
Lenguajes De ProgramacionLenguajes De Programacion
Lenguajes De Programacion
 
Presentación unidad I
Presentación unidad IPresentación unidad I
Presentación unidad I
 
Linea del Tiempo
Linea del TiempoLinea del Tiempo
Linea del Tiempo
 
Ambiente virtual y Lenguaje de Domino Específico para la enseñanza de la prog...
Ambiente virtual y Lenguaje de Domino Específico para la enseñanza de la prog...Ambiente virtual y Lenguaje de Domino Específico para la enseñanza de la prog...
Ambiente virtual y Lenguaje de Domino Específico para la enseñanza de la prog...
 
Metreología programacion
Metreología programacionMetreología programacion
Metreología programacion
 
Metreología programacion
Metreología programacionMetreología programacion
Metreología programacion
 
Cap1 intro
Cap1 introCap1 intro
Cap1 intro
 
El c++ por la práctica, introducción al lenguaje y su filoso prev
El c++ por la práctica, introducción al lenguaje y su filoso prevEl c++ por la práctica, introducción al lenguaje y su filoso prev
El c++ por la práctica, introducción al lenguaje y su filoso prev
 
Historia de los_lenguajes
Historia de los_lenguajesHistoria de los_lenguajes
Historia de los_lenguajes
 
Historia Lenguajes y sus Tipos
Historia Lenguajes y sus TiposHistoria Lenguajes y sus Tipos
Historia Lenguajes y sus Tipos
 
Lógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de PascalLógica De La Programación Y Lenguaje de Pascal
Lógica De La Programación Y Lenguaje de Pascal
 
Cppbasico
CppbasicoCppbasico
Cppbasico
 
Tutorial de C
Tutorial de CTutorial de C
Tutorial de C
 
Aprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primeroAprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primero
 
C++ basico subido JHS
C++ basico subido JHSC++ basico subido JHS
C++ basico subido JHS
 

Plus de Aldo Hernán Zanabria Gálvez

“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...Aldo Hernán Zanabria Gálvez
 
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...
Organizadores visuales sobre las corrientes contemporaneas   aldo zanabria ga...Organizadores visuales sobre las corrientes contemporaneas   aldo zanabria ga...
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...Aldo Hernán Zanabria Gálvez
 
Resumen final - Seminario Taller TIC Emprede Turismo
Resumen final - Seminario Taller TIC Emprede TurismoResumen final - Seminario Taller TIC Emprede Turismo
Resumen final - Seminario Taller TIC Emprede TurismoAldo Hernán Zanabria Gálvez
 
Clase de Tecnologías de la Información y Comunicaciones
Clase de Tecnologías de la Información y ComunicacionesClase de Tecnologías de la Información y Comunicaciones
Clase de Tecnologías de la Información y ComunicacionesAldo Hernán Zanabria Gálvez
 

Plus de Aldo Hernán Zanabria Gálvez (20)

“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
“PERSPECTIVAS DEL DESARROLLO ECONÓMICO REGIONAL EN EL CONTEXTO DEL CAMBIO CLI...
 
mejorando la web guia de html 5
mejorando la web guia de html 5mejorando la web guia de html 5
mejorando la web guia de html 5
 
Guía de Prácticas word beta.pdf
Guía de Prácticas word beta.pdfGuía de Prácticas word beta.pdf
Guía de Prácticas word beta.pdf
 
emprendimiento en la era del conocimiento.pptx
emprendimiento en la era del conocimiento.pptxemprendimiento en la era del conocimiento.pptx
emprendimiento en la era del conocimiento.pptx
 
Fundamentos de Programación
Fundamentos de ProgramaciónFundamentos de Programación
Fundamentos de Programación
 
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...
Organizadores visuales sobre las corrientes contemporaneas   aldo zanabria ga...Organizadores visuales sobre las corrientes contemporaneas   aldo zanabria ga...
Organizadores visuales sobre las corrientes contemporaneas aldo zanabria ga...
 
didactica
didacticadidactica
didactica
 
Tarea1 aldo zanabria
Tarea1 aldo zanabriaTarea1 aldo zanabria
Tarea1 aldo zanabria
 
Tarea 2 aldo zanabria
Tarea 2 aldo zanabriaTarea 2 aldo zanabria
Tarea 2 aldo zanabria
 
Carolinos del milenio pasado - Puno
Carolinos del milenio pasado - PunoCarolinos del milenio pasado - Puno
Carolinos del milenio pasado - Puno
 
ingenieria de sistemas
ingenieria de sistemasingenieria de sistemas
ingenieria de sistemas
 
Electricidad con recursos renovables
Electricidad con recursos renovablesElectricidad con recursos renovables
Electricidad con recursos renovables
 
Variables
VariablesVariables
Variables
 
Estructura y modelo organizacional estatal
Estructura y modelo organizacional estatal Estructura y modelo organizacional estatal
Estructura y modelo organizacional estatal
 
Calidad de Agua
Calidad de AguaCalidad de Agua
Calidad de Agua
 
Resumen final - Seminario Taller TIC Emprede Turismo
Resumen final - Seminario Taller TIC Emprede TurismoResumen final - Seminario Taller TIC Emprede Turismo
Resumen final - Seminario Taller TIC Emprede Turismo
 
Clase de Tecnologías de la Información y Comunicaciones
Clase de Tecnologías de la Información y ComunicacionesClase de Tecnologías de la Información y Comunicaciones
Clase de Tecnologías de la Información y Comunicaciones
 
Plan de Trabajo Integración de la Mujer
Plan de Trabajo Integración de la MujerPlan de Trabajo Integración de la Mujer
Plan de Trabajo Integración de la Mujer
 
peritaciones y tasación puno
peritaciones y tasación punoperitaciones y tasación puno
peritaciones y tasación puno
 
producción en la empresa turística
producción en la empresa turísticaproducción en la empresa turística
producción en la empresa turística
 

Lenguajes POO

  • 1. Tema 1: Lenguajes de Programación Orientados a Objetos Programación Orientada a Objetos 3º de I.T.I.S 2001- Curso 2001-2002 Francisco José García Peñalvo Departamento de Informática y Automática - Universidad de Salamanca Tema 1 Lenguajes de Programación Orientados a Objetos Versión 3.0 – Febrero de 2002 © Francisco José García Peñalvo Departamento de Informática y Automática - Universidad de Salamanca Departamento de Informática y Automática - Universidad de Salamanca 1
  • 2. Tema 1: Lenguajes de Programación Orientados a Objetos Esquema 1. Historia y evolución 2. Clasificación 3. Características 4. Revisión general de algunos LPOO representativos 5. Referencias 6. Lecturas complementarias Departamento de Informática y Automática - Universidad de Salamanca 3 1. Historia y Evolución Departamento de Informática y Automática - Universidad de Salamanca 4 Departamento de Informática y Automática - Universidad de Salamanca 2
  • 3. Tema 1: Lenguajes de Programación Orientados a Objetos 1.1 Historia de los LPOO 1966 Simula 1970 ••La historia de los LPOO comienza La historia de los LPOO comienza Smalltalk 72 a finales de los años 60, con el lenguaje a finales de los años 60, con el lenguaje 1980 Smalltalk 80 Simula, diseñado en el Norwegian Computing Simula, diseñado en el Norwegian Computing C++ Centre Centre Objective-C ••Durante la década de los 70s la poca actividad Durante la década de los 70s la poca actividad en el tema la monopoliza Smalltalk en el tema la monopoliza Smalltalk Eiffel ••La década de los 80s supone un nuevo auge para La década de los 80s supone un nuevo auge para 1990 OO COBOL la POO la POO ADA 95 ••Entre 1980 yy1983 Stroustrup desarrolla C++ Entre 1980 1983 Stroustrup desarrolla C++ SQL3 ••En la década de los 90s se produce la explosión En la década de los 90s se produce la explosión total de las tecnologías orientadas al objeto total de las tecnologías orientadas al objeto Delphi Java Departamento de Informática y Automática - Universidad de Salamanca 5 1.1 Historia de los LPOO CPL Algol 60 BCPL COBOL CLU Pascal Algol 68 Simula 67 C OO COBOL ADA 83 Smalltalk 72 ADA 95 LISP Actor Object C++ Eiffel Pascal FLAVORS Smalltalk 80 Objective C Delphi LOOPS Java CLOS Evolución de los LPOO Departamento de Informática y Automática - Universidad de Salamanca 6 Departamento de Informática y Automática - Universidad de Salamanca 3
  • 4. Tema 1: Lenguajes de Programación Orientados a Objetos 2. Clasificación de los LPOO Departamento de Informática y Automática - Universidad de Salamanca 7 2.1 Introducción Existen varias clasificaciones de los LPOO, atendiendo a criterios de construcción o características específicas de los mismos • Clasificación de Peter Wegner • Clasificación de Tesler • Clasificación según el origen Departamento de Informática y Automática - Universidad de Salamanca 8 Departamento de Informática y Automática - Universidad de Salamanca 4
  • 5. Tema 1: Lenguajes de Programación Orientados a Objetos 2.2 Clasificación de Wegner • Lenguajes Basados en Objetos: Soportan objetos. Es decir, disponen de componentes caracterizados por un conjunto de operaciones (comportamiento) y un estado • Lenguajes Basados en Clases: Disponen, además de objetos, de componentes tipo clase con operaciones y estado común • Lenguajes Orientados al Objeto: Además de objetos y clases ofrecen mecanismos de herencia [Wegner, 1987] Departamento de Informática y Automática - Universidad de Salamanca 9 2.2 Clasificación de Wegner Objetos Basado en + Clases Objetos Ada 83 Clipper 5.2 Basado en + Herencia Clases CLU Orientado al • Basado en objeto = encapsulamiento + Objeto identidad de objetos Ada 95 • Basado en clases = basado en objetos + C++ Eiffel abstracción de conjunto Smalltalk Delphi • Orientados a objetos = Basados en clases + herencia + autorrecursión Departamento de Informática y Automática - Universidad de Salamanca 10 Departamento de Informática y Automática - Universidad de Salamanca 5
  • 6. Tema 1: Lenguajes de Programación Orientados a Objetos 2.3 Clasificación de Tesler Orientados al Orientados al proceso objeto POSL OOSL Process-Oriented Object-Oriented Estático Static Languages Static Languages Pascal, C C++, Java PODL OODL Process-Oriented Object-Oriented Dinámico Dinamic Languages Dinamic Languages Lisp, Scheme Smalltalk, Dylan [Tesler, 1993] Departamento de Informática y Automática - Universidad de Salamanca 11 2.3 Clasificación de Tesler 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 Departamento de Informática y Automática - Universidad de Salamanca 12 Departamento de Informática y Automática - Universidad de Salamanca 6
  • 7. Tema 1: Lenguajes de Programación Orientados a Objetos 2.3 Clasificación de Tesler Monomórficos MOMENTO Sistemas de tipos del CHEQUEO [Cardelli and Wegner, 1985] Polimórficos Estática dinámico Ligadura Dinámica Smalltalk estático Eiffel, CAML Pascal OO C++ declaración inferencia FORMA estricta débil sin tipos RIGUROSIDAD Departamento de Informática y Automática - Universidad de Salamanca 13 2.3 Clasificación de Tesler • Beneficios del uso de lenguajes con tipos estrictos – Evitan los fallos en tiempo de ejecución derivados de conflictos con los tipos – Detección temprana en tiempo de compilación de errores – Declaración de tipos como ayuda para la documentación – Eficiencia en el código [Tesler, 1981] Departamento de Informática y Automática - Universidad de Salamanca 14 Departamento de Informática y Automática - Universidad de Salamanca 7
  • 8. Tema 1: Lenguajes de Programación Orientados a Objetos 2.3 Clasificación de Tesler Tipificación o tipado (“typing”) es el proceso de Tipificación o tipado (“typing”) es el proceso de declarar cuál es el tipo de información que puede declarar cuál es el tipo de información que puede contener una variable contener una variable Sistemas de tipos estáticos Sistemas de tipos dinámicos • También llamados sistemas con • También llamados sistemas con tipado tipado fuerte o estricto débil,no estricto o dinámico • Exigen asociación explícita de un tipo • No exigen asociación explícita de un tipo a cada nombre declarado a cada variable • El tipo de cada objeto se ha de determinar • Cada objeto conoce su tipo cuando se crea con anterioridad a la ejecución del programa durante la ejecución • Menos flexible pero más segura • Más flexibilidad • Ejecución más eficiente al no tener que • Pérdida de eficiencia durante la ejecución del hacer comprobación de tipos en tiempo de programa, debida a la necesidad de mantener ejecución y comprobar el tipo de todos los objetos durante la ejecución Departamento de Informática y Automática - Universidad de Salamanca 15 2.3 Clasificación de Tesler Ligadura es el proceso de asociar un atributo a un nombre. En el caso de las funciones, el término ligadura (binding) se refiere a la conexión o enlace entre una llamada a función y el código real ejecutado como resultado de la llamada [Joyanes, 1998] Ligadura dinámica o tardía Ligadura estática o temprana Departamento de Informática y Automática - Universidad de Salamanca 16 Departamento de Informática y Automática - Universidad de Salamanca 8
  • 9. Tema 1: Lenguajes de Programación Orientados a Objetos 2.3 Clasificación de Tesler • Ligadura estática o temprana – Resuelve las correspondencias en tiempo de compilación – No hay sobrecarga en tiempo de ejecución y los fallos se detectan en tiempo de compilación – Los enlaces no pueden hacerse sin volver a compilar • Ligadura dinámica o tardía – La correspondencia se hace al invocar los métodos – Soporta la evolución de los programas sin tener que recompilar – Coste en tiempo de ejecución Departamento de Informática y Automática - Universidad de Salamanca 17 2.3 Clasificación de Tesler Comprobación Comprobación Estática Dinámica Ligadura Garantía de corrección, Combinación no válida Estática interpretación inflexible (Sin sentido) C, Cobol Ligadura Garantía de corrección, No hay garantía de Dinámica Interpretación flexible corrección, interpretación flexible C++, Object Pascal Smalltalk Departamento de Informática y Automática - Universidad de Salamanca 18 Departamento de Informática y Automática - Universidad de Salamanca 9
  • 10. Tema 1: Lenguajes de Programación Orientados a Objetos 2.3 Clasificación según el Origen Lenguajes Puros Lenguajes Híbridos Objetos Objetos Mensajes Mensajes Clases Clases Smalltalk + Eiffel Lenguajes con base tradicional C++ Object Pascal Departamento de Informática y Automática - Universidad de Salamanca 19 2.3 Clasificación según el Origen Lenguajes Puros Lenguajes Híbridos Ventajas Desventajas Ventajas Desventajas • Obligan a seguir los • En general, son menos • Rápidos • Pierden con frecuencia principios del paradigma rápidos que los híbridos • Permiten una mayor alguna característica objetual • Son difíciles de codificar integración con el entorno del paradigma objetual • Proporcionan su máxima en toda clase de operaciones existente • No permiten modificar flexibilidad para cambiar fundamentales • Los programadores pueden las características de los aspectos esenciales del • Pérdida de eficiencia en seguir siendo productivos construcción del lenguaje tiempo de ejecución mientras aprenden las lenguaje base extensiones orientadas al objeto Departamento de Informática y Automática - Universidad de Salamanca 20 Departamento de Informática y Automática - Universidad de Salamanca 10
  • 11. Tema 1: Lenguajes de Programación Orientados a Objetos 3. Características de los LPOO Departamento de Informática y Automática - Universidad de Salamanca 21 3.1 Elementos Concretos • Objetos • Polimorfismo • Clases • Excepciones • Herencia simple • Concurrencia • Herencia múltiple • Persistencia • Comprobación estricta de • Metadatos tipos frente a comprobación débil • Afirmaciones y restricciones • Encapsulamiento • Bibliotecas de clases • Empaquetamiento • Eficiencia • Genericidad • Administración de memoria • Paso de mensajes • Entorno de desarrollo [Rumbaugh et al., 1991] Departamento de Informática y Automática - Universidad de Salamanca 22 Departamento de Informática y Automática - Universidad de Salamanca 11
  • 12. Tema 1: Lenguajes de Programación Orientados a Objetos 3.2 Requisitos Deseables en los LPOO • Conceptos claros • Eliminación de la • Orientación al Objeto redundancia pura • Pequeño • Seguridad • De fácil transición a otros lenguajes • Alto nivel • Soporte para el • Modelo de ejecución aseguramiento de la simple corrección • Sintaxis fácil de leer • Entornos agradables [Kölling, 1999] Departamento de Informática y Automática - Universidad de Salamanca 23 4. Revisión de algunos de los Principales LPOO C+ Java ta lk + all Eif u la S m Ja fel Si m va i E C++ ffe C++ l u la a Smalltal Jav k Si m Departamento de Informática y Automática - Universidad de Salamanca 24 Departamento de Informática y Automática - Universidad de Salamanca 12
  • 13. Tema 1: Lenguajes de Programación Orientados a Objetos 4.1 Simula • El Simula 67 fue considerado como el primer LPOO • 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 [SIS, 1987] Departamento de Informática y Automática - Universidad de Salamanca 25 4.1 Simula 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 Departamento de Informática y Automática - Universidad de Salamanca 26 Departamento de Informática y Automática - Universidad de Salamanca 13
  • 14. Tema 1: Lenguajes de Programación Orientados a Objetos 4.1 Simula CORRUTINAS a resume a resume a resume b resume b b Departamento de Informática y Automática - Universidad de Salamanca 27 4.1 Simula CORRUTINAS begin class CONTROLLER; begin integer i; detach; for i:= 1 step 1 until 1000 resume printer end CONTROLLER; class PRINTER; begin integer i; detach; while true do for i:=1 step 1 until 8 do begin resume producer; outreal(producer.last_input); resume controller; end; next_line end end PRINTER; ... ref(PRINTER) printer; ref(CONTROLLER) controller; ... printer :- new PRINTER; controller :- new CONTROLLER;... resume controller end Departamento de Informática y Automática - Universidad de Salamanca 28 Departamento de Informática y Automática - Universidad de Salamanca 14
  • 15. Tema 1: Lenguajes de Programación Orientados a Objetos 4.2 Smalltalk - 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 - 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 Departamento de Informática y Automática - Universidad de Salamanca 29 4.2 Smalltalk - 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 - Una referencia clásica sobre Smalltalk es [Goldberg and Robson, 1983] Departamento de Informática y Automática - Universidad de Salamanca 30 Departamento de Informática y Automática - Universidad de Salamanca 15
  • 16. Tema 1: Lenguajes de Programación Orientados a Objetos 4.2 Smalltalk 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 Departamento de Informática y Automática - Universidad de Salamanca 31 4.3 C++ - 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 Departamento de Informática y Automática - Universidad de Salamanca 32 Departamento de Informática y Automática - Universidad de Salamanca 16
  • 17. Tema 1: Lenguajes de Programación Orientados a Objetos 4.3 C++ - 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 - [Stroustrup, 1997] es una referencia válida para este lenguaje Departamento de Informática y Automática - Universidad de Salamanca 33 4.3 C++ #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; } Departamento de Informática y Automática - Universidad de Salamanca 34 Departamento de Informática y Automática - Universidad de Salamanca 17
  • 18. Tema 1: Lenguajes de Programación Orientados a Objetos 4.3 C++ 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 Departamento de Informática y Automática - Universidad de Salamanca 35 4.4 Eiffel - 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 - [Meyer, 1992] es una de las referencias obligadas, aunque con unas miras más amplias, se recomienda [Meyer, 1997] Departamento de Informática y Automática - Universidad de Salamanca 36 Departamento de Informática y Automática - Universidad de Salamanca 18
  • 19. Tema 1: Lenguajes de Programación Orientados a Objetos 4.4 Eiffel - Diseño por contrato • Precondiciones: que deben cumplirse antes de que se invoque un método Precondiciones Aserciones • Postcondiciones: que se garantizan han de cumplirse después de que se Postcondiciones haya ejecutado el método • Invariantes: Invariantes condició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 invoque El proveedor de la clase garantizará que las postcondiciones se cumplan después que se ha aplicado el método Departamento de Informática y Automática - Universidad de Salamanca 37 4.4 Eiffel - Violación de Aserciones ¿De quién es la responsabilidad? • Precondiciones: De quien solicita el servicio (cliente) • Postcondiciones: De quien ofrece el servicio (servidor) Postcondiciones • Invariantes: Invariantes De quien esté actuando en ese momento sobre el objeto • ¿Qué provoca la violación de una aserción? Excepciones • ¡Qué se encargue el responsable! Manejo de la excepción: tratar de arreglar la situación, cláusula de rescate: , intentar nuevamente: Pasar la responsabilidad... ¿Nadie? El sistema aborta Aserciones y Herencia: La subcontratación el subcontratado pide menos y garantiza más (sino no es negocio ) Departamento de Informática y Automática - Universidad de Salamanca 38 Departamento de Informática y Automática - Universidad de Salamanca 19
  • 20. Tema 1: Lenguajes de Programación Orientados a Objetos 4.4 Eiffel class STACK[T] full : BOOLEAN is do pop is require creation Result := total = not empty create max_size do feature {NONE} ensure total := total -1 elems : ARRAY[T]; equal(strip(), old strip()) ensure feature end; total = old total -1; max_size : INTEGER; top : T is require not full total : INTEGER; not empty end create(n : INTEGER) is do invariant require Result := elems@total 0 <= total; n>0 ensure total <= max_size do equal(strip(), old strip()) end – STACK !!elems.make(1,n); end max_size := n push(x : T) is require ensure not full max_size = n; do total = 0; total := total + 1; end; elems.put(x,total) empty : BOOLEAN is do ensure Result := total = 0 not empty; ensure total = old total + 1; equal(strip(), old strip()) top = x end; end; Departamento de Informática y Automática - Universidad de Salamanca 39 4.4 Eiffel 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, Selectivamente De métodos 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 Si (mediante clases de bibliotecas) Persistencia Objetos persistentes Si (mediante clases) Departamento de Informática y Automática - Universidad de Salamanca 40 Departamento de Informática y Automática - Universidad de Salamanca 20
  • 21. Tema 1: Lenguajes de Programación Orientados a Objetos 4.5 Java - 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++ - Se le atribuyen las siguientes características • Simple y poderoso • Seguro • Robusto • Interactivo • Independiente de la arquitectura • Interpretado • Sencillo de aprender - Soporta threads -Recogida de basura automática - De la abundante bibliografía existente se recomienda [SUN, 2001] Departamento de Informática y Automática - Universidad de Salamanca 41 4.5 Java - 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 la de ulo rí c s cur e del sidad ro r d ent nive pal rias U nci e pri are va ent ftw En los primer pon l So apareció en la os seis meses de 1996, Java com ría de prensa de US u n ni e punto de com 4325 veces, co a es ge paración Bill mo Jav In 5096 veces Gates apareció Departamento de Informática y Automática - Universidad de Salamanca 42 Departamento de Informática y Automática - Universidad de Salamanca 21
  • 22. Tema 1: Lenguajes de Programación Orientados a Objetos 4.5 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(); } } Departamento de Informática y Automática - Universidad de Salamanca 43 4.5 Java 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 Sí Persistencia Objetos persistentes No Departamento de Informática y Automática - Universidad de Salamanca 44 Departamento de Informática y Automática - Universidad de Salamanca 22
  • 23. Tema 1: Lenguajes de Programación Orientados a Objetos 5. Referencias [Cardelli and Wegner, 1985] Cardelli, L., Wegner, P. “On Understanding Types, Data Abstraction and Polymorphism”. ACM Computing Surveys, 17(4). 1985. [Goldberg and Robson, 1983] Goldberg, A., Robson, D. “Smalltalk-80: The Language and its Implementation”. Addison-Wesley, 1983. [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. [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. [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, 2001] SUN Microsystems. “The Java Tutorial. A Practical Guide for Programmers”. http://java.sun.com/docs/books/tutorial/index.html. [Última vez visitado, 13/2/2002]. December 2001. [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. [Wegner, 1987] Wegner, P. “The Object-Oriented Classification Paradigm in Research Directions on Object-Oriented Programming”. MIT Press, Cambridge, MA, 1987. Departamento de Informática y Automática - Universidad de Salamanca 45 6. Lecturas Complementarias “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, 13-2-2002]. 2001. Tablas 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://www.progsoc.uts.edu.au/~geldridg/cpp/cppcv3/cppcv3.pdf. [Última vez visitado 7/1/2000]. 1996. 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, 1993. Artículo sobre los orígenes de Smalltalk. Meyer, B. “Approaches to Portability”. Journal of Object-Oriented Programming (JOOP), 11(4):68-70. July/August, 1998. Comparativa 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. Departamento de Informática y Automática - Universidad de Salamanca 46 Departamento de Informática y Automática - Universidad de Salamanca 23
  • 24. Tema 1: Lenguajes de Programación Orientados a Objetos 6. Lecturas Complementarias Meyer, B. “Construcción de Software Orientado a Objetos”. 2ª Edición. Prentice Hall, 1999. En 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, 1994. Artí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 1999. Artí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, 13/2/2002]. November 1999. Resumen 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 1995. Libro del autor de C++ explicando la historia, diseño y evolución de C++. Departamento de Informática y Automática - Universidad de Salamanca 47 Departamento de Informática y Automática - Universidad de Salamanca 24