18/2/10

LABORATORIO 1 “REPASANDO C++; ABSTRACCIONES, CONSTRUCTORES Y DESTRUCTORES.”




INTEGRANTES:

  • Andrés Gerardo Bernal Arias. Cód.:258029
  • Joanna Dulima Ochoa Mancipe. Cód.:258050
  • Pedro Alejandro Valderrama Tapias. Cód.:258031
Primera Parte: Repasando C.



Una pila es un concepto que permite el manejo de los datos mediante operaciones de inclusión (push) y expulsión (pop) de modo que el orden de los datos es del tipo LIFO (Last In - First Out). En la primera sección del archivo Anexos_Lab1.pdf se observa una implementación de una pila en C++, obtenida parcialmente del libro Practical C++ Programming por Steve Oualline. Observe el código, y responda las siguientes preguntas:


 

  1. ¿A que se refieren con el modificador _inline_ en el momento de declarar las funciones?


    La función inline indica al compilador que cada llamado a ésta deberá ser reemplazado por el cuerpo de esta función, en otras palabras es como si el programador escribiera el código de la función cada vez que esta fuera invocada.




  2. Intente correr el programa. Observe el código fuente. ¿Qué expresiones hacen falta y en qué lugares?


    Se tuvieron varios errores sintácticos y de expresiones lógicas que se explicarán en la exposición.




  3. Complete el código fuente y corra el programa. Teniendo en cuenta su salida, modifíquelo para que solicite un conjunto de datos definido por usuario para introducir a la pila, y una expulsión gradual posterior (que pregunte al usuario si desea seguir expulsando datos o no). Incluya como anexos al laboratorio algunas pruebas de escritorio de su programa.


    Vér código corregido en: www.sites.google.com/site/progorientadao/190210



Segunda Parte: Abstracción, Constructores y Destructores.


 

  1. Investigue sobre diagramas de clases. Comience por la referencia en las primeras diapositivas de la clase. Trate de abstraer una clase para la versión del programa que construyó en el numeral 3, con sus atributos, métodos, constructores y destructores a partir del código fuente ejemplo, y represente su abstracción como un diagrama de clases.


    Un diagrama de clases es tipo de modelo que describe la vista estática de un sistema en términos de clases y relaciones entre ellas. Ésta tiene tres compartimentos o bandas en una tabla vertical, que son: banda de nombre, banda de atributos y banda de operaciones, la sintáxis de la tabla puede ser diferente a la del lenguaje de programación, pero es recomendable usar la misma.

    Banda de nombre: la parte superior del rectángulo que representa a la clase contiene el nombre de la misma; se escribe centrado y en letra negrita. Es conveniente que el nombre se deduzca del dominio del problema y sea lo menos ambiguo posible, tampoco debe tener prefijo o sufijo.

    Banda de atributos: las clases tiene atributos que describen las características de los objetos. La figura muestra el ejemplo de la clase Avión con sus atributos. Los atributos correctos capturan la información que describe e identifica una instancia específica de la clase, sin embargo, deben incluirse los atributos que sean importantes en el moldeamiento del sistema, también influye utilizar el propósito del sistema.



Avión
número de matrícula

marca

velocidad

número de pasajeros

 
Un atributo tiene un tipo, que indica la clase de atributo. Los tipos ususales de atributos son los primitivos (boolean, entero, numeración…). Pueden ser específicos para ciertos lenguajes de programación, sin embargo se puede utilizar cualquier tipo, incluido otra clase.
Los atributos pueden ser de diferente visibilidad. Ésta describe si el atributo es visible y puede ser referenciado por otras clases distintas de aquella en que se ha definido. Se puede clasificar así:

 
Públicos Se pueden utilizar y visualizar fuera de la clase (se representa con un signo + delante del nombre.)
Privados              No se puede acceder al mismo desde otras clases (se representa con un signo - delante del nombre.)
Protegidos     Se utiliza en notaciones de generalización y especialización para representar atributos protegidos relacionados con clases derivadas.

 
Banda de operaciones: las operaciones de una clase se utilizan para manipular los atributos (modificar el estado de la clase) o realizar alguna otra acción; son funciones a las que se llama o invoca, son interiores a la clase y se pueden aplicar a objetos de esa clase. Las operaciones describen lo que puede hacer la clase, es decir, sus servicios; tienen análoga visibilidad a la de los atrributos. La sintáxis formal de una operación es:

 
visibilidad nombre (lista-parámetros): tipo-expresión-retorno (cadena-propiedad)

 
Donde lista-parámetros es una lista de parámetros formales separados por coma, especificados cada uno con la siguiente sintaxis:
nombre: tipo-expresión=valor por omisión

 
Ejemplo de diagrama de clases

 
Figura
diámetro: Longitud
pos: Posición
+dibujar ()
+escalaFigura(x:Integer=50, y:Integer=10)
+devolverPosición():Posición

 
JOYANES AGUILAR, Luis. Programación Orientada a Objetos. 2ed. Ed Alfaomega.

  1. Escriba en C++ el constructor que tendría la clase que conceptualizó en el tercer punto de la primera parte de este laboratorio.


    stack(){cout<<"\n\tCONSTRUYENDO...";};




  2. ¿Es posible hacer que un programa bajo objetos en C++ corra sin necesidad de tener un constructor en el sentido estricto de la palabra?


    Si es posible, puesto que si el constructor no es declarado por el programador, el compilador crea uno para poder inicializar objetos de la clase(s) utilizada(s) en el programa, y reservar espacio de memoria para el objeto a crear, o bien se pueden realizar las siguientes operaciones para crear un objeto: declarando un objeto global, declarando un objeto local u objeto temporal o invocando al operador en vez de llamar explícitamente al constructor en cuestión.




  3. Escriba en C++ el destructor que tendría la clase que conceptualizó en el tercer punto de la primera parte de este laboratorio.


    ~stack(){cout<<"\n\tDESTRUYENDO...";};




  4. ¿Es posible hacer un programa bajo objetos en C++ que corra sin necesidad de tener un destructor en el sentido estricto de la palabra?


    También es posible, pues es un caso parecido al de los constructores, pues el compilador declararía uno con una estructura como ~nombreclase (); o en el caso de los objetos creados dinámicamente por el operador new, tienen que ser destruidos utilizando el operador delete, de lo contrario el sistema destruiría la variable puntero pero no liberaría el espacio de memoria referenciado por ella.