Você está na página 1de 9

Anlisis Comparativo de Lenguajes

Teora 12: Programacion Orientada a Objetos

Departamento de Informatica Facultad de Cs. Fco. Matematicas y Naturales

Universidad Nacional de San Luis San Luis - Argentina

Analisis Comparativo de Lenguajes p.1/17

Introduccin
Corresponde a pgs. 457-467, Cap. 12, Concepts of Programming Languages, Sixth Edition, Robert Sebesta
1 Casi todos los leng. de prog. proveen hoy en d 2 soporte para la Programacin Orientada a

Objetos (POO) (incluyendo a Lisp y Cobol). POO tiene sus races en SIMULA-67. El concepto se completa con el surgimiento del primer lenguaje de POO puro: SMALLTALK 80.

Caractersticas claves de un lenguaje orientado a objetos: Tipos de Datos Abstractos (TDAs). Herencia Ligadura dinmica de mensajes a mtodos.

Analisis Comparativo de Lenguajes p.2/17

Tipos de Datos Abstractos (TDAs)


Caracterstica provista por distintos lenguajes (como ADA83). Si el lenguaje slo soporta esta caracterstica se suele hablar de lenguajes basados en objetos. Propuestos como las unidades de reso candidatas para incrementar la produccin de software

Problemas: reso de TDAs normalmente involucraba su modicacin (y entendimiento). los TDAs, son independientes y se encuentran todos al mismo nivel diculta reejar organizacin en categoras del dominio (jeraquas).

El concepto de herencia permite abordar ambos tipos de problemas.

Analisis Comparativo de Lenguajes p.3/17

Herencia
Permite reusar un TDA existente sin modicarlo. El programador slo debe seleccionar un TDA adecuado, declarar una subclase de ste que herede la funcionalidad y estructura necesaria y moldearla para alcanzar los nuevos requerimientos del problema. Adems permite denir jerarquas que reejan el espacio del problema.

Figura

centro mover(x,y)

Circulo

Cuadrado

MiFigura

Analisis Comparativo de Lenguajes p.4/17

Terminologa usual en POO

Trmino Clase Objeto Subclase o clase derivada Superclase o clase padre Mtodo Mensaje Protocolo (interface) de mensaje

Descripcin Nueva forma de referenciar a los TDA Instancia de una clase (TDA) Clase denida desde otra clase a partir de la herencia Clase a partir de la cual se crea una nueva clase Subprograma que describe operacin para objetos de una clase Invocacin (o llamada) a un mtodo. Coleccin completa de mtodos de un objeto

Analisis Comparativo de Lenguajes p.5/17

Otros conceptos bsicos en POO

clase padre (o clase base o superclase)

m1() m2() . . . mn()

subclase (o clase derivada)

Protocolo o Interfase de mensajes

Partes de un mensaje: 1. objeto receptor 2. nombre del mensaje 3. argumentos


Analisis Comparativo de Lenguajes p.6/17

Otros conceptos bsicos en POO


Control de acceso: pblico privado protegido

Tipos de variables y mtodos: de instancia de clase

Herencia: simple mltiple


Analisis Comparativo de Lenguajes p.7/17

Polimorsmo y ligadura dinmica (1)


Tercera caracterstica clave de un lenguaje de POO. Polimorsmo provisto por: la ligadura dinmica de mensajes a deniciones de mtodos. las variables polimrcas del tipo de la clase padre, que son capaces de referenciar a objetos de cualquiera de las subclases. La clase padre dene mtodos que son sobreescritos por las subclases. Un mensaje enviado a una variable polimrca es ligado dinmicamente al mtodo de la clase correspondiente. Enfoques usuales: las variables polimrcas corresponden a una clase comn (Object) y todos los mensajes se ligan dinmicamente (Java y SMALLTALK). especicar la clase de la variable polimrca y los mtodos con ligadura dinmica (C++)
Analisis Comparativo de Lenguajes p.8/17

Polimorsmo y ligadura dinmica (2)


Ejemplo: Soporte para Polimorsmo en C++

C *p;

C *p; p = new C1; p->imprimir(); /* el de C1 */ p = new C2; p->imprimir(); /* el de C2 */ C *ar[3]; ar[0] = new C1; ar[1] = new C2; ar[2] = new C3; for(int i=0;i <3;i++) ar[i]->imprimir();

C
virtual imprimir()

Variable polimorfica (puede apuntar a objetos de la clase C o de sus derivadas)

C1
imprimir()

C2
imprimir()

C3
imprimir()

Analisis Comparativo de Lenguajes p.9/17

Aspectos del diseo de lenguajes Or. a objetos


Exclusividad de objetos Son las subclases subtipos? Herencia simple y mltiple Asignacin y liberacin de objetos Ligadura esttica y dinmica

Analisis Comparativo de Lenguajes p.10/17

Exclusividad de objetos
Todas las cosas son objetos (SMALLTALK) Ventajas: elegancia y uniformidad. Desventajas: hasta las operaciones ms elementales se realizan mediante pasaje de mensajes. No hay distincin entre clases predenidas y denidas por el usuario. Todas las computaciones se realizan a travs del pasaje de mensajes. Al modelo imperativo le agrego el modelo objeto (C++) Estructura de tipo con estilo imperativo para escalares primitivos (lo dems son clases) (Java). Desventajas: Necesidad de clases wrapper para poder mezclar objetos y no objetos.

Analisis Comparativo de Lenguajes p.11/17

Son las subclases subtipos?


Pregunta clave: se verica entre una clase B y su superclase A una relacin es-un? En caso armativo, B es subtipo de A, y signica que una variable de la clase B podr aparecer en cualquier lugar donde el uso de una variable de la clase A fuera legal. Ejemplo: subtipos en Ada
subtype SmallInt is Integer range -100..100;

Caractersticas que usual/ tiene una subclase que es subtipo Slo agrega variables y mtodos (no restringe comportamiento de la superclase) Sobreescribe mtodos heredados en una manera compatible

Analisis Comparativo de Lenguajes p.12/17

Herencia de implementacin e interfase


Herencia de interfase: slo la interfase del padre es visible a la clase derivada. Herencia de implementacin: la clase derivada tiene acceso a la representacin interna del padre (como en SMALLTALK) Cuales son las ventajas y desventajas? La herencia de interfase garantiza encapsulamiento pero es ms ineciente. La herencia de implementacin permite, en cierta forma violar el encapsulamiento, con todas las consecuencias que esto implica, aunque es ms eciente.

Analisis Comparativo de Lenguajes p.13/17

Herencia simple y mltiple


Herencia mltiple: una nueva clase puede heredar desde dos o ms clases Simple (Smalltalk, Java) Mltiple (C++) Desventajas de herencia mltiple: Necesidad de operadores de resolucin de alcance (tipo ::) para resolver ambiguedades En la herencia diamante se deben heredar una o ambas versiones del dato de la clase abuela? Un poco ms ineciente

Analisis Comparativo de Lenguajes p.14/17

Asignacin y liberacin de objetos


Ubicacin de los objetos Esttica. Ej.: Variables externas. Stack en tiempo de ejecucin (variable local) En el heap Liberacin de los objetos Explcita (C++). Delete. (Problema: referencias bamboleantes) Implcita. Garbage Collection. Cuentas de referencias.

Analisis Comparativo de Lenguajes p.15/17

Ligadura de mensajes a mtodos


Slo dinmica (Smalltalk, Java). El programador decide si es esttico o dinmico (funciones virtual en C++).

Analisis Comparativo de Lenguajes p.16/17

Caractersticas de lenguajes de POO

Exclusividad Lenguaje de objetos SMALLTALK Java C++ SI

Herencia (simple o mltiple) SIMPLE

Herencia (implementacin o interface) IMPLEMENT.

Ubicacin de objetos HEAP

Liberacin de objetos IMPLCITA

Ligadura de mensajes DINM.

Analisis Comparativo de Lenguajes p.17/17

Você também pode gostar