1/10. Diseño Modular III. 25 de febrero de 2017

Documentos relacionados
1/30. Diseño Modular II. 23 de septiembre de 2016

Implementación de módulos en C++

1/1. Diseño Modular. 18 de febrero de 2017

Tipos Recursivos de Datos

Implementación de las Clases Pila, Cola, Lista y Arbol

Tipos de Datos Recursivos

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Implementación de las Clases Pila, Cola, Lista y Arbol

Tema: Punteros: Puntero this en C#.

Programación Orientada a Objetos en C++

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

18. Interfaces Declaración de una interfaz

Tema: Punteros.Puntero this en C#.

TEMA 7. ARRAYS (LISTAS Y TABLAS).

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

directamente indirectamente

Clases y Objetos en C++

Bloque 1. Conceptos y técnicas básicas en programación

Examen Teórico Convocatoria de Junio de 2012

Sesión 6. TEMA 8 COMPORTAMIENTO AVANZADO CON OBJETOS

Guia#9: Punteros en C#.

Examen de Fundamentos de Computadores y Lenguajes

Elementos de un programa en C

Introducción a OOP. Programación Orientada a Objeto

Las plantillas permiten definir funciones genéricas.

Instituto Tecnológico de Celaya

Ingeniera de Sistemas: Luz Esperanza Espitia Tutora de Estructura de datos.

SOFTWARE Microsoft Visual Studio 2005.NET FrameWork 2.0

Diseño de compiladores Recordando la clase anterior

El operador contenido ( ) permite acceder al contenido de

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

UE#03 PROBLEMAS DE SOLUCIÓN DIRECTA FUNCIONES

1. Corrección de un programa TEMA 2: ESPECIFICACIÓN Y CORRECCIÓN DE ALGORITMOS. 1. Corrección de un programa. 1. Corrección de un programa

PUNTEROS (Apuntadores)

Solución al Examen de Fundamentos de Computadores y Lenguajes

Apuntes de Programación y estructuras de datos. Abstracción y modularidad

Especificación y uso de módulos en C++ (I)

APELLIDOS, Nombre: // Resto de s e r v i c i o s p ú b l i c o s e n t r e l o s que s e e n c u e n t r a n i n s e r t a r y // b o r r a r //...

Sebastián García Galán

Ejercicio 1. Ejercicio 2

Herencia. Implementación en Java

Clases y métodos parciales (Guía de programación de C#)

Examen Teórico. Convocatoria de Febrero de 2015

Estructuras de Datos Lineales y Arborescentes

Especificación y uso de módulos en C++ (I)

Procesadores de lenguaje Tema 6 La tabla de símbolos

Se debe disponer sobre la mesa un documento de identificación con fotografía.

Tema 2: Programación basada en Objetos

Programación de la lógica: Se programa el funcionamiento de la aplicación, haciendo uso de los diagramas de clases y de actividad.

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Arrays, Cadenas y Vectores Tipos Genéricos

Contenido. P á g i n a 1

Estructura de datos y Programación

Tema 1. Herencia y Polimorfismo

Procesadores de lenguaje Tema 6 La tabla de símbolos

1.2.4 Listas enlazadas

Funciones Definición de función

Laboratorio de Arquitectura de Redes. Datos en lenguaje C

Tabla de Símbolos. Programación II Margarita Álvarez

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

PROGRAMACIÓN ORIENTADA A OBJETOS

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Tema 01: Abstracción en los lenguajes de programación y tipo abstracto de dato (TAD)

Programación en Visual Basic Ricardo Rodríguez García

Tabla de Símbolos. Programación II Margarita Álvarez

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS

2.2 Nombres, Ligado y Ámbito

U.A.B.C. Facultad de Ingeniería Programación Estructurada UNIDAD III

Concurso: Cuánto sabes de JAVA?

Los Constructores(1)

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Sesión 8. Diseño modular en C Proyecto: Gestión de una lavadora

Examen escrito de Programación 1. Viernes 22 de enero de Problema 1 o (3.0 puntos) Problema 2 o (3.0 puntos)

INTRODUCCIÓN A LA POO EN C++

Examen escrito de Programación 1

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

SUBPROGRAMAS. Los subprogramas pueden ser invocados varias veces desde diferentes partes del programa.

Tema 2: Lenguajes de Programación de Sistemas: C

Un puntero no es más que una variable estática cuyo contenido es una dirección de memoria.

Tema 2: Clase y objetos en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

EDA. Tema 8 Colas de Prioridad: Heaps

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial

Apuntes de Programación y estructuras de datos. Control de datos

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

Programación Orientada a Objetos (Grado en Ingeniería Informática y Grado en Ingeniería en Tecnologías de la Información - UNED)

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Programación n de sistemas

Análisis semántico. Análisis semántico. Índice (I)

Caso de estudio: experimentos inmunologicos. Laboratorio de PRO2.

Arreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas

Universidad Nacional del Santa E.A.P. Sistemas e Informática Microcomputación III

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

Transcripción:

1/10 Diseño Modular III Josefina Sierra Santibáñez 25 de febrero de 2017

2/10 Implementación de Clases en C++ La implementación una clase requiere elegir una representación para el tipo de datos, i.e. una estructura de atributos definidos en términos de tipos existentes, e implementar sus métodos. public y private determinan respectivamente los miembros de una clase que se pueden usar fuera de la clase y los que no. Los atributos se declaran privados, para que no puedan ser manipulados directamente fuera de la clase. Para implementar los atributos se puede usar cualquier combinación de tipos del lenguaje o tipos definidos por nosotros. En el cuerpo de un método de una clase se puede acceder al contenido de los atributos del parámetro impĺıcito directamente (i.e. utilizando sólo el nombre del atributo). También se puede acceder al contenido de los atributos de otros objetos de dicha clase (distintos del p.i.). Pero en este caso es preciso utilizar la notación nombre objeto.nombre atributo.

3/10 Implementación de Clases en C++ La implementación de una clase en C++ normalmente consta de dos archivos. El archivo.hh, denominado interfaz, debe contener las cabeceras de todos los métodos y la representación del tipo. El archivo.cc, denominado implementación, debe contener la implementación de todos los métodos. En los apuntes de Introducción al Diseño Modular (páginas 25 a 29) se describe la implementación de la clase Estudiant.

4/10 Representación del Tipo Estudiant La representación del tipo en el archivo Estudiant.hh consta de: Tres atributos: dni entero, nota double, y amb nota de tipo booleano para especificar si el estudiante tiene nota. MAX NOTA es una constante que limita el rango de notas válidas. Se declara static, para que sea compartida por todos los objetos de la clase Estudiant. Las operaciones static, como nota maxima(), sólo tienen acceso a los atributos static de la clase. La invariante de la representación es un conjunto de propiedades que deben cumplir los valores de los atributos para representar objetos válidos de la clase. La invariante se debe de mantener en todo momento, y se considera impĺıcita a las precondiciones y postcondiciones de los métodos. La invariante de Estudiant sólo requiere que dni sea un natural, y que si el estudiante tiene nota ésta sea válida.

5/10 Implementación de la clase Estudiant En el archivo de implementación (e.g. Estudiant.cc) cada método debe indicar la clase a la que pertenece. Si no, C++ asumiría que pertenece al ámbito global y se producirían errores de compilación. La sintáxis es NombreClase::NombreMetodo. El operador :: se denomina operador de resolución de alcance o ámbito. En Estudiant.cc la cabecera de cada método está precedida por Estudiant:: Esto permite identificar cada método con su correspondiente cabecera en el archivo Estudiant.hh, dándole permiso para acceder a los atributos de los objetos de la clase. En la implementación de una clase se puede usar la palabra this para referirnos al parámetro impĺıcito. Será necesario usar this cuando exista en un bloque de código una variable con el mismo nombre que un atributo, o necesitemos referirnos al parámetro impĺıcito en su conjunto (e.g. se pase como argumento en una llamada a otro método).

6/10 Implementación de la clase Estudiant Si en un bloque de código existe una variable con el mismo nombre que un atributo de la clase es preciso usar this para distinguir a cuál de los dos nos referimos en cada momento. void Estudiant :: afegir_nota ( double nota ) { /* Pre : el p.i. no tiene nota y 0 <= " nota " <= nota_maxima () */ /* Post : la nota del p.i. pasa a ser " nota "*/ this -> nota = nota ; amb_nota = true ; } Si no hay problemas de ambiguedad, se utiliza el nombre del atributo (amb nota) para referirnos al valor del atributo del p.i. Los nombres de los atributos no deben mencionarse en las especificaciones Pre/Post de los métodos públicos.

7/10 Implementación de la clase Cjt Estudiants En primer lugar comentamos la representación del tipo, contenida en el archivo Cjt Estudiants.hh La constante MAX NEST se introduce para limitar la capacidad de los conjuntos. Este atributo se declara static para que sea compartido por todos los objetos de la clase Cjt Estudiants. Los estudiantes del conjunto se almacenan en el atributo vest, un vector de objetos de tipo Estudiant. El atributo nest indica el número de estudiantes que tiene el conjunto. Los estudiantes del conjunto están almacenados en la parte del vector correspondiente a los índices [0...nest-1]. La invariante establece que los estudiantes deben estar ordenados crecientemente por DNI. Esta decisión de implementación permite usar el método de búsqueda dicotómica en operaciones de consulta y modificación. Sin embargo requiere mantener el orden en inserciones y en la operación de lectura.

8/10 Implementación de la clase Cjt Estudiants Comentamos los métodos privados declarados en Cjt Estudiants.hh Se introducen métodos privados, ordenar cjt estudiants y cerca dicot, que se utilizan como operaciones auxiliares en distintos métodos públicos. En la especificación de un método privado pueden aparecer elementos privados de la clase como sus atributos. Los métodos privados no se suelen detectar durante la fase de especificación. Se añaden durante la fase de implementación. El método cerca dicot se declara static, porque no utiliza el parámetro impĺıcito. Ya que le pasamos el vector de estudiantes como argumento.

9/10 Implementación de la clase Cjt Estudiants En las páginas 31 a 34 de los apuntes de Introducción al Diseño Modular se presenta el contenido del archivo Cjt Estudiants.cc, en el que se implementan todos los métodos. Recordad que para ordenar los n primeros elementos de un vector v, suponiendo que n v.size(), se puede usar sort ( vest. begin (), vest. begin ()+n, comp ); En las páginas 34 y 35 de los apuntes se presenta la implementación de la segunda opción para la ampliación de la clase Cjt estudiants, i.e. el módulo funcional E Cjt estudiants que supone un enriquecimiento de la clase. La implementación de esborrar estudiant es ineficiente, porque no podemos acceder a los atributos de la clase. La primera opción consiste en modificar Cjt estudiants.hh añadiendo las especificaciones Pre/Post de los nuevos métodos, y el archivo Cjt estudiants.cc con sus implementaciones.

10/10 Ampliación de la clase Cjt Estudiants También se puede modificar la representación del tipo, para implementar de forma eficiente los nuevos métodos. Concretamente se añade un nuevo atributo imax para recordar la posición del estudiante con nota máxima. En la página 36 de los apuntes se presenta la implementación de los nuevos métodos, y se proponen los siguientes ejercicios que forman parte de la sesión 3 de laboratorio: Implementar el método recalcular posicio imax. Mejorar la implementación de esborrar estudiant utilizando el método de búsqueda dicotómica. Aplicar todas las modificaciones necesarias a la implementación de los métodos de Cjt estudiants para que inicialicen y mantengan actualizado el atributo imax.