Proyecto Poo

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

INSTITUTO POLITECNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERIA MECANICA Y


ELECTRICA
UNIDAD ZACATENCO
DEPARTAMENTO DE INGENIERIA ELECTRICA
PROGRAMACION ORIENTADA A OBJETOS

Profesor: Jesús Sánchez Macias

Proyecto de tercer parcial


Grupo: 2EV7
Nombre: Castillo Salgado César David

Fecha: 18/06/2020
INDICE
-Objetivo
-Marco teórico
1. Clases
2. Objetos
3. Constructores
4. Destructores
5. Herencia
6. Polimorfismo
7. Asignación dinámica
8. Fun. Friend
9. Templates
10. Ficheros

-Desarrollo
-Conclusion
-Bibliografía
OBJETIVO:
Que el alumno demuestre lo aprendido en el curso de programación
orientada a objetos mediante uno o varios programas escritos por él.

MARCO TEORICO:
La clase es la fundación de C++ para el soporte de la programación orientada a
objetos, y se encuentra en el núcleo de muchas de sus más avanzadas
características. La clase es la unidad básica de C++ de la encapsulación y esta
provee el mecanismo por el cual los objetos son creados.

Clases:
Una clase es en general un modelo, receta o plantilla que define el estado y
comportamiento de cierto tipo de objetos. Una clase puede pensarse como una
colección de variables (atributos o propiedades) y funciones (métodos) que
permiten representar un conjunto de datos y especificar las operaciones o
procedimientos que permiten manipular tales datos. Se puede inclusive entender
una clase como un tipo de dato personalizado, similar a las estructuras (structs),
donde cada programador define los miembros que va a tener su tipo de dato. De
hecho, los tipos de dato nativos de C++ son en realidad clases.
Objetos:

Un objeto es una instancia de una clase, es decir una entidad que se construye a
partir de las descripciones consignadas en una clase (datos y funciones). Por
tanto, un objeto se puede entender como una "variable" que se declara del tipo de
dato de cierta clase. Un objeto es como tal la entidad tangible que permite acceder
a los datos y funciones modeladas al interior de la clase

Ejemplo:

Una analogía para entender las clases y los objetos puede ser una fábrica
ensambladora de carros. Hay un modelo o diseño (clase) especifico de un auto,
pero este modelo en si no es un carro, es solo una descripción de que
características y funcionalidades deben tener los carros que sean de ese modelo.
Los carros ensamblados en la fábrica de acuerdo a dicho modelo serían los
objetos, es decir entidades tangibles que se construyeron a partir de las
descripciones y especificaciones consignadas en el diseño o modelo (o sea la
clase).

Constructor en C++.

Los constructores tienen el mismo nombre que la clase, no retornan ningún valor y no
pueden ser heredados. Además, deben ser públicos, no tendría ningún sentido
declarar un constructor como privado, ya que siempre se usan desde el exterior de la
clase, ni tampoco como protegido, ya que no puede ser heredado. Con el es
posible acceder a los datos miembro de la clase.

Destructor en C++

El destructor es un método de la clase que se usa para destruir objetos del tipo de
la clase, no tiene parámetros de entrada ni valor de retorno. Para declarar un
destructor se utiliza el carácter virgulilla (~) seguido del nombre la clase, es decir,
el destructor también se denomina del mismo modo que la clase. Los destructores
se ejecutan automáticamente justo cuando un objeto alcanza el límite de su
tiempo de vida. Ese tiempo de vida está definido por el contexto (scope) donde se
ha declarado el objeto. Recuerde que un contexto (scope) está delimitado en C++
por las llaves { y }. El tiempo de vida para un objeto de almacenamiento estático es
de toda la ejecución del programa. Mientras que el tiempo de vida de un objeto de
almacenamiento automático depende enteramente de su contexto, si es global o
local.

Los destructores son especialmente útiles para destruir objetos de


almacenamiento dinámico, es decir, aquellos para los que se reserva memoria con
ayuda de un apuntador y el operador new. Ese tema se verá más adelante cuando
se estudie el manejo dinámico de memoria en C++. En el siguiente ejemplo se
puede observar la ejecución del destructor de una clase.

Herencia

La Herencia es uno de los conceptos fundamentales de la programación orientada


a objetos ya que permite la reusabilidad de variables y funcionalidades que se han
definido en otras clases. Para hablar de herencia se deben introducir los
conceptos de clase base y clase derivada. Se conoce como clase base a una
clase que va a heredar sus propiedades (variables) y funcionalidades (métodos) a
otras clases; por otro lado, se conoce como clase derivada a una clase que se
implementa mediante la reutilización de las propiedades y funcionalidades que se
heredan de una (o varias) clase base. La herencia contribuye en cierto grado con
la escalabilidad de una aplicación ya que cuando se debe modificar o eliminar una
variable o un método heredado en todas las clases derivadas, entonces no es
necesario que se haga individualmente en cada clase sino que se hace
directamente en la clase base y las clases derivadas simplmente heredan la
actualización de esos miembros.
La herencia en C++ se expresa en la implementación de una clase mediante el
uso del operador dos puntos : seguido del tipo de herencia (que lo veremos más
adelante) y del nombre de la clase base de la que se busca heredar. Vale anotar
que el tipo de herencia por defecto en C++, cuando no se especifica
explicitamente ese campo, es la herencia privada.

Polimorfismo

En programación orientada a objetos se denomina polimorfismo a la capacidad


que tienen los objetos de una clase de responder al mismo mensaje o evento en
función de los parámetros utilizados durante su invocación. Un objeto polimórfico
es una entidad que puede contener valores de diferentes tipos durante la
ejecución del programa. Dicho de otra forma, el polimorfismo consiste en
conseguir que un objeto de una clase se comporte como un objeto de cualquiera
de sus subclases, dependiendo de la forma de llamar a los métodos de dicha
clase o subclases. Una forma de conseguir objetos polimórficos es mediante el
uso de punteros a la superclase. De esta forma podemos tener dentro de una
misma estructura (arrays, listas, pilas, colas, ...) objetos de distintas subclases,
haciendo que el tipo base de dichas estructuras sea un puntero a la superclase.
Otros lenguajes nos dan la posibilidad de crear objetos polimórficos con el
operador new
Asignación dinámica de memoria.

Esto significa que la reserva de memoria se realiza dinámicamente en tiempo de


ejecución, no siendo necesario entonces tener que especificar en la declaración
de variables la cantidad de memoria que se va a requerir. La reserva de memoria
dinámica añade una gran flexibilidad  a los programas porque permite al
programador la posibilidad de reservar la cantidad de memoria exacta en el
preciso instante en el que se necesite, sin tener que realizar una reserva por
exceso en prevención a la que pueda llegar a necesitar.
 

Dado que los punteros se pueden aplicar a cualquier tipo de variable se puede
entonces realizar una asignación de memoria dinámica para cualquier variable. La
función new es la que se utiliza para realizar una reserva de memoria y se
encuentra en el archivo de cabecera <stdlib.h>.

Friend
Una función o una clase "Amiga" es aquella a la que se le ha otorgado la
capacidad de tener acceso a los miembros privados de la clase que la ha
declarado como amiga. Para que una clase declare a otra clase o a una función
como amiga se debe declarar esa función o esa clase al interior de la clase y se
debe utilizar la palabra reservada friend en esa declaración.

Nota: La amistad en C++ es unívoca, es decir, si la clase A declara a la clase B


como amiga eso no quiere decir que la clase B considere a la clase A como
amiga.

Las funciones amigas o los métodos de una clase amiga pueden en ocasiones
recibir como parámetro de entrada una referencia a un objeto de la clase que las
declaro amigos.

Templates

Los templates o plantillas tienen la función de acoplarse al declarar funciones o


clases dejando sin especificar el tipo de algunos de sus parámetros y datos, o el
tipo de algunos de sus datos miembros en clases o estructuras.
Una template de función es un prototipo de función que el compilador de C++
usará para construir diferentes versiones de una misma función, según los tipos de
datos que se especifiquen al llamarla en main ;La plantilla permite escribir
funciones que difieren exclusivamente en el tipo de datos que manejan.  
Las template de clases permiten definir versiones de una misma clase que difieren
en el tipo de dato de algunos de sus datos miembro. Es decir, se crea el modelo
de una clase el cual permitirá definir distintas instancias de la misma para
diferentes tipos de datos. 
En programas sencillos parece ser que esta característica no cambia mucho el
curso de ejecución, pero en programas más complejos donde no se sabe con qué
tipo de dato se trabajara , se puede ahorrar declarar lo mismo varias veces con
diferente tipo de dato, y es muy útil.

Una template permite que una función o clase funcione en muchos tipos de datos
diferentes sin tener que reescribirse para cada uno

Ficheros

Muy a menudo necesitamos almacenar cierta cantidad de datos de forma más o


menos permanente. La memoria del ordenador es volatil, escasa y cara. De modo
que cuando tenemos que guardar nuestros datos durante cierto tiempo tenemos
que recurrir a sistemas de almacenamiento más económicos, aunque sea a costa
de que sean más lentos.
En cuanto al tipo de acceso, en C y C++ podemos clasificar los archivos según
varias categorías:
 De entrada: los datos se leen por el programa desde el
archivo.
 De salida: los datos se escriben por el programa hacia el
archivo.
 De entrada/salida: los datos pueden ser escritos o leídos.
 Dependiendo del tipo de valores permitidos a cada byte:
 De texto: sólo están permitidos ciertos rangos de valores para
cada byte. Algunos bytes tienen un significado especial, por
ejemplo, el valor hexadecimal 0x1A marca el fin de fichero. Si
abrimos un archivo en modo texto, no será posible leer más
allá de un byte con ese valor, aunque el fichero sea más largo.
 Binarios: están permitidos todos lo valores para cada byte. En
estos archivos el final del fichero se detecta de otro modo,
dependiendo del soporte y del sistema operativo. La mayoría
de las veces se hace guardando la longitud del fichero.
Cuando queramos almacenar valores enteros, o en coma
flotante, o imágenes, etc, deberemos usar este tipo de
archivos.
Es posible crear archivos combinando cada una de estas categorías, por ejemplo:
archivos secuenciales de texto de longitud de registro variable, que son los típicos
archivos de texto. Archivos de acceso aleatorio binarios de longitud de registro
constante, normalmente usados en bases de datos. Y también cualquier
combinación menos corriente, como archivos secuenciales binarios de longitud de
registro constante, etc.

En cuanto a cómo se definen estas propiedades, hay dos casos. Si son binarios o
de texto o de entrada, salida o entrada/salida, se define al abrir el fichero,
mediante el método open de fstream en C++.
La biblioteca que se ocupa es :
#include <fstream.h>//<fstream>.
 PRIMERO: declaramos la dirección del flujo de entrada
-ifstream descriptor; // Para ficheros de entrada
-ofstream descriptor; // Para ficheros de salida
SEGUNDO: Asociamos el descriptor de ficheros al fichero en sí.
descriptor.open(“nombre.extensión”,int modo);
Donde modo puede ser una combinación (empleando |) de lo siguiente:
ios:: in // Modo entrada
ios:: out // Modo salida (por defecto)
ios:: app // Modo añadir, o sea, posicionar el cursor del fichero al final del fichero
antes de cada escritura
ios:: binary // El archivo se abre en modo binario
ios:: ate // El archivo se abre y el cursor se posiciona al final
ios:: nocreate // Genera un error si el fichero no existe
ios:: noreplace // Genera un error si el fichero existe
ejemplo:
 ifstream in; // descriptor del fichero a abrir
in.open(“mio.txt”); // Apertura del fichero; //.open
Esas dos líneas equivalen a la siguiente:
 ifstream in (“mio.txt”); // Apertura del fichero;
siendo lo mismo para su contraparte:
 ofstream out("salida.txt", ios::out);//ofstream
Cierre de ficheros:
descriptor.close();.

Desarrollo

El programa presentado constituye de los temas vistos en el curso de


programación orientada a objetos desde clases, hasta archivos.
El programa comienza con un menú en int main(), donde el usuario es libre de
escoger la opción presentada que el quiera, las cuales son:
1-area de figuras, que tiene como propósito calcular el área de algunas figuras
geométricas, la particularidad de esta opción, es que los procesos se hacen
mediante templates o plantillas, mostrando al usuario un sencillo ejemplo de como
implementarlo.
2-Guardar alumnos, en el cual se implementan ficheros y la asignación dinámica
de memoria, con los ficheros es posible guardar los datos de los alumnos que el
usuario desee, y posteriormente extraerlos y mostrarlos en pantalla, la asignación
dinámica de memoria es para reservar la cantidad justa de bytes a ocupar para
guardar los nombres de los alumnos
3-potencia eléctrica, donde se hace uso de clases padre, clases hija y funciones
amigas, la cual es para comprobar el resultado que se da en la función calculo de
la clase hija, mostrando al usuario la manera de declarar clases, funciones amigas
y llevar acabo distintas tareas con esos elementos, para poder acceder a estos
datos fue necesario declarar objetos en main.
4-calculadora de fracciones, consta de una clase llamada fracción, donde se
declaran los datos miembro necesarios para operar 2 fracciones, en la parte
publica nos encontramos con las funciones miembro las cuales sobrecargan
operadores aritméticos, tiene un menú donde el usuario escoge que hacer con las
cantidades introducidas, sumar, restar, multiplicar o dividir, también tiene una
función amiga, que es donde se muestra el resultado final en pantalla.
El programa también tiene variables globales, que fungen como centinelas y
contadores, también funciones de usuario, que sirven como catalizadores a
submenús, para llevar un mejor orden.
Conclusiones:
En el programa presentado se pueden apreciar varios de los conceptos vistos en
los 3 parciales, en C++, el uso de clases llega a facilitar mas medios para llegar a
la resolución de un problema de forma más directa, algo parecido a las structs,
también ayuda a optimizar el código por la versatilidad que estas tienen, el uso de
archivos sigue siendo similar al lenguaje C, con la diferencia de que es un poco
más sencillo obtener datos mas precisamente; Con el uso de templates es posible
no declarar el tipo de dato de retorno y dejarlo a gusto del usuario dentro de los
parámetros a escoger, lo que ahorra código, en general C++ es un lenguaje, a mi
punto de vista, mas entendible y un poco mas generalizado en comparación a C,
gracias a estos conocimientos adquiridos a lo largo de 2 semestres, la
programación ya no me parece cosa de otro mundo, al contrario, me ha surgido la
curiosidad por esta rama de estudios y aplicaciones, y me alienta a seguir
adquiriendo conocimientos por mi propia cuenta.
Bibliografía:
https://www.codingame.com/
http://decsai.ugr.es/

 Bjarne Stroustrup, The C++ Programming Language, Addison-Wesley Pub Co; Tercera


edición (15 de febrero de 2000); ISBN 0-201-70073-5
 Bjarne Stroustrup, The Design and Evolution of C++, Addison-Wesley Pub Cp; Primera
edición (29 de marzo de 1994); ISBN 0-201-54330-3

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy