





Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Fonaments de programació, Profesor: , Carrera: Enginyeria Tèc. Telecomunicació, Especialitat de Sistemes Electrònics, Universidad: UAB
Tipo: Apuntes
1 / 9
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!






Objetivos
Al acabar esta actividad guiada serás capaz de:
Motivación
Un programa se compone de los datos y las operaciones o funciones que realizamos con esos datos. En la programación funcional o estructurada que hemos visto hasta ahora hemos definido las funciones de forma independiente de los datos. En cambio en el mundo real, los datos vienen definidos por las operaciones que podemos realizar con ellos. Por ejemplo lo que nos interesa de una pantalla son las operaciones que podemos realizar con ella como dibujar, borrar, etc. La programación orientada a objetos (POO) nos permite acercarnos a esta visión más real mediante el concepto de clase que permite relacionar los datos con las operaciones sobre dichos datos. Un objeto de una determinada clase solamente será accesible mediante las operaciones definidas para esa clase.
Con esta actividad guiada aprenderás a definir tus propias clases que utilizarás en tus programas. Aprenderás también a descomponer tus aplicaciones en módulos logrando de esta forma que tus aplicaciones sean más estructuradas y flexibles.
¿Qué es la programación modular?
La programación modular consiste en descomponer la aplicación a realizar en módulos que se programan y compilan por separado. Después, la aplicación se construye a partir de un programa principal que usa los módulos previamente programados.
Cuando los programas son grandes es absolutamente necesario descomponerlos en módulos. Cuando se desarrolla una aplicación informática en equipo, cada programador se puede encargar de la realización de una parte que se materializará en uno o varios módulos y podrá de esta forma trabajar de forma independiente. Posteriormente los diferentes módulos se unirán para constituir la aplicación final.
Otro aspecto importante de la programación modular es que ofrece la posibilidad de reutilizar partes de programas ya desarrollados en el diseño de programas nuevos sin necesidad de volverlos a diseñar. Este aspecto de la programación modular ya lo has utilizado cuando “reutilizas” algunas de las librerías (o módulos) estándar que nos ofrece el lenguaje C++. Por ejemplo cuando utilizas la librería de entrada/salida stdio
mediante la directiva include del preprocesador C++ que contiene, entre otras, las funciones printf y scanf que utilizas para leer y escribir en pantalla:
#include <stdio.h>
La programación modular tiene muchas ventajas:
¿Qué es un objeto?
Un objeto es una estructura de datos (cuyos componentes denominaremos atributos ) y un conjunto de procedimientos y funciones (que denominaremos métodos ) para manipular la estructura de datos. La única forma de manipular la información del objeto es a través de sus métodos.
El primer objeto
Para trabajar con objetos en Visual C++ primero hay que definir la clase (es decir, la plantilla que determina las características del objeto). Veamos la definición de una clase que llamaremos CPersona.
Para definir la clase CPersona (y cualquier clase en general) debemos construir dos ficheros: el de cabecera (persona.h) y el de código (persona.cpp).
El fichero de cabecera contiene la declaración de los atributos (lo que hay debajo de la palabra clave private:) y la declaración de los métodos que pueden usarse para manipular los objetos de esta clase (la lista de procedimientos y funciones que hay debajo de la palabra clave public:).
En el fichero de código debe incluirse el fichero de cabecera y definirse el código de cada uno de los métodos. Observa que en esa declaración, el nombre de cada método debe venir precedido por el nombre de la clase (CPersona) seguida de ::.
Estamos utilizando el concepto de la programación modular para crear el módulo persona que nos permitirá trabajar con objetos de clase persona (CPersona). El módulo se compone de dos ficheros, el fichero persona.h que contiene la
Deberás decidir cuáles deben ser los parámetros y resultados de estos métodos. Completa después el programa principal con las sentencias necesarias para verificar que tus nuevos métodos funcionan correctamente. Para realizar este ejercicio probablemente necesitarás el procedimiento strcpy, de la librería <string.h>. Un ejemplo de uso de este procedimiento es el siguiente: fuente = “Pedro”; strcpy (destino,fuente); Tanto destino como fuente son cadenas de caracteres. El procedimiento copia fuente sobre destino.
Errores típicos
Algunos de los errores típicos que se cometen cuando se trabaja con módulos que contienen clases son los siguientes:
- No se hace el #include del fichero de cabeceras en el fichero de código **de los métodos o en el programa principal que usa la clase.
Ventajas y desventajas de la programación orientada a objetos
La programación orientada a objetos pretende reflejar el mundo real, que se compone de objetos con los que (en general) sólo podemos realizar aquellas operaciones (métodos) previstos por los diseñadores del objeto. Una lavadora, por ejemplo, se compone de una serie de elementos (atributos) tales como: un motor, cables, tubos, una caja metálica, etc. Para usar una lavadora a nadie se le ocurre abrir la caja metálica y empezar a manipular esos elementos. Si hiciera eso lo más probable es que estropease la lavadora. Lo que hará es usar alguno de los programas de lavado pre-establecidos. Con los objetos pasa lo mismo: el hecho de que no podamos acceder directamente a sus atributos, sino usar solamente sus métodos hace que se reduzca la probabilidad de cometer errores, siempre y cuando los objetos hayan sido probados a fondo previamente.
La programación orientada a objetos facilita la modularización del código, puesto que fuerza a que cada clase esté en ficheros (de cabecera y de código) diferentes. Por tanto, las aplicaciones estarán mejor organizadas y serán más claras de entender.
Por otra parte, se facilita el mantenimiento de las aplicaciones. Podemos hacer cambios en la definición de una clase (por ejemplo, un cambio en uno de los métodos usando un algoritmo más rápido) sin tener que cambiar el programa principal.
altura por talla (deberás cambiar también los métodos que manipulan este
atributo). Ejecuta el proyecto y comprueba que todo sigue funcionando correctamente sin necesidad de modificar el programa principal que usa la clase CPersona.
Obviamente, si modificamos los parámetros o resultado de los métodos, entonces si será necesario cambiar el programa principal que usa esos métodos.
Las ventajas que acabamos de señalar (modularidad y facilidad de modificación) son especialmente evidentes cuando el tamaño de la aplicación es grande. Si la aplicación es pequeña entonces probablemente no vale la pena usar la programación orientada a objetos. Observa por ejemplo, que en la aplicación que acabas de hacer has tenido que escribir mucho código para hacer bien poca cosa. Programando directamente en C hubieras podido hacer lo mismo con menos líneas de código y probablemente con igual grado de claridad y estructuración.
Por último, otra ventaja importante de la programación orientada a objetos es la facilidad para reutilizar código. Podrías ahora poner en tu página web personal los ficheros de cabecera y de código del objeto CPersona para que todo el mundo pueda usarlo en sus aplicaciones. Periódicamente podrías ir haciendo mejoras de tu objeto (y publicando esas nuevas versiones en tu página web) de forma que las personas que se hayan animado a usar tu objeto se beneficien de esas mejoras. De hecho, el WWW está lleno de código de objetos (en Visual C++, en Java y en otros lenguajes) a libre disposición de todo el mundo (naturalmente, esos objetos hacen cosas más interesantes que nuestro objeto CPersona).
El constructor
El constructor de una clase es un método que se ejecuta de forma automática en el momento de declarar un objeto de esa clase. Para poder usar esta característica de Visual C++ hay que añadir el constructor a la lista de métodos.
CPersona (); Añade el código siguiente en el fichero CPersona.cpp: CPersona::CPersona () { edad = 7; }
Con esto estamos declarando un constructor que hará que cuando se declare un objeto de la clase CPersona automáticamente se asignará un 7 al atributo edad.
Construye una aplicación que use el objeto CPersona y el siguiente programa principal:
printf (“\nEscribe el nombre:”); scanf(“%s”,nom); } Ejecuta ahora la aplicación y observa que al declarar el objeto p se ejecuta automáticamente el nuevo constructor que pide los datos del objeto por pantalla.
El destructor
El destructor es un método que se ejecuta automáticamente cuando desaparece el objeto (por ejemplo, al final del programa principal en el que fue declarado, o cuando acaba un procedimiento en el que se declaró el objeto de forma local).
La forma de incorporar el destructor es similar a lo visto para el constructor, con la diferencia de que ahora no tiene sentido hablar de diferentes destructores para una misma clase, puesto que el destructor no tiene parámetros.
CPersona: ~CPersona (); Añade el código siguiente al fichero de código de la clase CPersona: CPersona:: ~CPersona () { printf (“La persona %s se autodestruirá inmediatamente.\n”, nom); } Ejecuta la aplicación anterior con esta nueva versión de la clase CPersona, que incluye el destructor. No es necesario que hagas ninguna modificación en el programa principal. Ejecuta la aplicación y verifica que al final aparecen esos mensajes de autodestrucción para los dos objetos de la clase CPersona.
Paso de parámetros en Visual C++
Los métodos de Visual C++ pueden tener parámetros por valor y por referencia. Lo interesante es que esos parámetros pueden ser objetos.
siguiente:
int CPersona::soy_mayor_que (CPersona q) { if (edad > q.dame_edad ()) return 0 else return 1 }
El método compara la edad propia con la edad de la persona que recibe como parámetro (objeto q).
El programa principal para probar este método puede ser el siguiente:
PAGE 1
6........
Construye la aplicación y comprueba que funciona correctamente.
Naturalmente, la aplicación anterior podría construirse también haciendo que sea la persona q quien se compare con la persona p (q.soy_mayor_que (p)).
El método que hemos construido recibe como parámetro un objeto por valor. Veamos ahora un ejemplo de un método que recibe como parámetro un objeto por referencia. Esto será necesario cuando en el método vamos a modificar los atributos del objeto que hemos recibido como parámetro.
void CPersona:: copia (CPersona& q) { q.pon_edad (edad); q.pon_altura (altura); q.pon_nombre (nom); } El método copia los atributos propios en el objeto q, que recibe como parámetro por referencia (observa la forma en que se indica que q se recibe por referencia).
El programa principal para probar este método puede ser el siguiente:
Construye la aplicación y verifica que funciona correctamente.
Ciertamente, el método que acabamos de añadir es un poco inútil, porque podemos hacer una copia de un objeto a otro directamente. En el ejemplo anterior, bastaría que el programa principal hiciese:
p =q;
Un objeto que usa otros objetos Vamos a construir ahora la clase CLista, que servirá para manejar una lista de personas. Esta clase usará la clase CPersona. Una primera versión sencilla de la clase CLista puede ser la siguiente:
7........