Departamento de Informática Departamento de Informática Lenguajes de Programación Universidad Técnica Federico Santa María Lenguajes de Programación Universidad Técnica Federico Santa María Capítulo III 3.1 Introducción a TDA y OO Tipos de Datos Abstractos y Orientación a Objetos Abstracción y encapsulación, TDA, Clases, TDA parametrizados 1 2 Departamento de Informática Universidad Técnica Federico Santa María Departamento de Informática Lenguajes de Programación Universidad Técnica Federico Santa María Problemas en el Desarrollo de Grandes Programas Œ¿Cómo organizar una pieza de software, de manera que sea fácil de mantener y administrar? •¿Cómo evitar tener que recompilar todo un sistema, en vista de un pequeño cambio? Lenguajes de Programación Modularidad y Reutilización del Software (1) • Ideas: – Organizar el programa en grupos de subprogramas y data, lógicamente relacionados, denominados módulos. – Agrupar en subprogramas que puedan ser compilados de forma independiente, sin necesidad de recompilar todo el sistema. III-3 Departamento de Informática Universidad Técnica Federico Santa María III-4 Departamento de Informática Lenguajes de Programación Universidad Técnica Federico Santa María Modularidad y Reutilización del Software (2) Lenguajes de Programación Encapsulación • El proceso de diseñar los módulos o contenedores sintácticos, se denomina modularización. • Una unidad de compilación es un conjunto de subprogramas que pueden compilarse de manera independiente al resto del sistema III-5 • Encapsulación: Agupar un conjunto de subprogramas junto con los datos que ellos manipulan. • La encapsulación permite resolver los dos problemas presentados. III-6 Departamento de Informática Universidad Técnica Federico Santa María Departamento de Informática Lenguajes de Programación Lenguajes de Programación Universidad Técnica Federico Santa María Tipos de Datos Abstractos (TDAs) Ocultamiento de Información (1) • Un TDA, corresponde a una encapsulación que incluye: – La representación de un tipo de dato específico – Las operaciones asociadas a ese tipo • Una instancia de un TDA se denomina objeto • Mediante control de acceso, detalles innecesarios de la implementación de un TDA se ocultan a aquellas unidades fuera de la encapsulación • Un cliente es una unidad de programa que hace uso de una instancia de TDA III-7 Departamento de Informática Universidad Técnica Federico Santa María III-8 Departamento de Informática Lenguajes de Programación Lenguajes de Programación Universidad Técnica Federico Santa María Clases Ocultamiento de Información (2) • Ventajas: – El código de los clientes (unidades de programa que usan un TDA), no dependen de los detalles de implementación, dado que no los conocen. – Aumento de confiabilidad. Los clientes no pueden cambiar la representación de los objetos, ni accidental ni intencionalmente. • Introducidas en SIMULA 67 • Una clase permite implementar un TDA • Una clase define: – Los tipos de datos manipulados – Las operaciones sobre esos tipos • Los objetos son instancias particulares de una clase, y son independientes entre sí. III-9 Departamento de Informática Universidad Técnica Federico Santa María III-10 Departamento de Informática Lenguajes de Programación Universidad Técnica Federico Santa María Clases: Ejemplo en C++ class complex { private : float re, im; public : complex() { Constructor re = im = 0.0; } float getRealPart (); Operaciones float getImPart (); ... Datos Lenguajes de Programación Clases: Ejemplo en Java Campos privados Campos públicos } int main(void ) { complex cpl; // Crea una instancia de la clase (objeto) cout << cpl.getRealPart(); ... } III-11 Datos Constructor Operaciones class complex { private float re, im; Campos privados public complex() { re = im = 0.0; } public float getRealPart (){ return re; Campos públicos } public float getImPart (){ return im; } ..... } public class MainClass { complex cpl = new complex(); public static void main (String [] args ) { System.out.println(“Parte Real” + cpl .getRealPart()); ... } } III-12 Departamento de Informática Universidad Técnica Federico Santa María Departamento de Informática Lenguajes de Programación Universidad Técnica Federico Santa María TDA Parametrizados Ejemplo: Constructores en C++ TDA Parametrizados • Idea: Crear tipos de datos abstractos en los que mediante el uso de parámetros se pueda cambiar su comportamiento inicial, o el tipo de datos sobre el que se opera. • Ventaja: Flexibiliza el uso de los TDA, para una mayor amplitud de casos. Permite crear clases genéricas III-13 Departamento de Informática Universidad Técnica Federico Santa María Lenguajes de Programación Lenguajes de Programación TDA Parametrizados Ejemplo: Templates en C++ • El uso de templates en C++ permite hacer que los tipos de datos utilizados por una clase sean genéricos. template <class Type > //Type es el parámetro template class MyClass { private: Type *dataClass; .... public: MyClass () { dataClass = new Type [MAX_SIZE] } ~MyClass() {delete dataClass} //Un destructor Type getFirstElement() { return dataClass[0]; } ... } III-15 • En el ejemplo anterior, agregar el siguiente constructor: complex(float realPart , float imPart ) { re = realPart; im = imPart; } • Así, al declarar un objeto quedaría complex(10,5) cpl; // Crea el numero complejo (10,5) Obs:ambos constructores pueden coexistir III-14