Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Programacion orientada a objetos en C++, Apuntes de Electrónica

Asignatura: Fonaments de programació, Profesor: , Carrera: Enginyeria Tèc. Telecomunicació, Especialitat de Sistemes Electrònics, Universidad: UAB

Tipo: Apuntes

Antes del 2010

Subido el 08/11/2007

deivid87
deivid87 🇪🇸

4

(2)

7 documentos

1 / 9

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Lo mínimo, mínimo, mínimo sobre
programación orientada a objetos, clases y programación modular en
Visual C++
Objetivos
Al acabar esta actividad guiada serás capaz de:
Enumerar algunas ventajas e inconvenientes de la programación orientada a
objetos.
Definir clases sencillas en Visual C++ que incluyan:
Métodos que reciben parámetros (incluidos otros objetos) por valor y por
referencia
Constructores (uno o más para cada clase)
Destructor
Construir aplicaciones que utilicen clases de Visual C++.
Construir clases de Visual C++ que utilicen otras clases.
Construir módulos (ficheros de cabecera y fichero de código).
Utilizar un módulo en una aplicación.
Incorporar los ficheros adecuados en un proyecto de Visual C++ en el que se
utilicen módulos.
Documentar adecuadamente cada uno de los procedimientos y funciones de un
módulo.
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.
PAGE 1
pf3
pf4
pf5
pf8
pf9

Vista previa parcial del texto

¡Descarga Programacion orientada a objetos en C++ y más Apuntes en PDF de Electrónica solo en Docsity!

Lo mínimo, mínimo, mínimo sobre

programación orientada a objetos, clases y programación modular en

Visual C++

Objetivos

Al acabar esta actividad guiada serás capaz de:

  • Enumerar algunas ventajas e inconvenientes de la programación orientada a objetos.
  • Definir clases sencillas en Visual C++ que incluyan:
    • Métodos que reciben parámetros (incluidos otros objetos) por valor y por referencia
  • (^) Constructores (uno o más para cada clase)
  • Destructor
  • Construir aplicaciones que utilicen clases de Visual C++.
  • Construir clases de Visual C++ que utilicen otras clases.
  • Construir módulos (ficheros de cabecera y fichero de código).
  • Utilizar un módulo en una aplicación.
  • Incorporar los ficheros adecuados en un proyecto de Visual C++ en el que se utilicen módulos.
  • Documentar adecuadamente cada uno de los procedimientos y funciones de un módulo.

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:

  • facilita una buena organización del código
  • facilita el reparto de trabajo entre varios programadores (cada uno puede dedicarse a implementar uno de los módulos)
  • facilita el mantenimiento de las aplicaciones (se puede mejorar un módulo sin tener que cambiar más que los ficheros de ese módulo)

¿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.

  • Los ficheros de cabeceras y de código de los métodos no están en la** carpeta en la que se ha creado el proyecto, con lo que el sistema se **quejará a la hora del montaje.
  • En el proyecto hay varios programas principales (hay más de un main).** Esto suele ocurrir cuando se han ido generando varios programas principales para probar los módulos, y se ha empezado un nuevo proyecto sin eliminar los ficheros del proyecto anterior. Para verificar que estamos en ese caso, clicar sobre FileView y comprobar que hay más de un fichero con un programa principal. Si hay algún fichero que sobre, se selecciona con el ratón y se elimina con la tecla Supr.

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.

4. Modifica la definición de la clase CPersona cambiando el nombre del atributo

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.

5. Añade la siguiente línea a la lista de métodos del fichero CPersona.h:

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.

8. Añade la siguiente línea de código al fichero de cabecera de la clase

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.

9. Añade a la clase CPersona el método soy_mayor_que, cuyo código es el

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.

10. Añade a la clase CPersona el método siguiente:

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;

  1. Comprueba que la sentencia anterior hace correctamente la copia de los atributos de q sobre p.

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........