100%(1)100% encontró este documento útil (1 voto) 533 vistas48 páginasProgramacion Orientada A Objetos Con C++
programación orientada a objetos con c++
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido,
reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
ORIENTADA A OBJETOS
TIPOS DE DATOS Y OPERADORES
aaa UE ST YAM SUL TER
DIAGRAMAS DE CLASES Y DE OBJETOS
HERENCIA Y POLIMORFISMO
ESTRUCTURAS DE DATOS DINAMICAS Y PLANTILLAS
TRO NLS eNO eee PENCE Messer coUSERS
TITULO: CH
AUTOR: Diego Ruiz
COLECCION: — Manuales USERS
FORMATO: 24x17 em
PAGINAS: 352
Copyright © MMV, Es una publicacién de Fox Andina en coedicion con DALAGA S.A, Hecho el depdsito que marca la ley 11723,
Todos los derechos reservados. Esta publicacidn no puede ser reproducida ni en todo ni en parte, por ningcn medio actual 0
futuro sin el permiso preva y por escrito de Fox Andina S.A. Su infraccién esta penada por las leyes 11723 y 25446. La editorial
no asume responsablidad alguna por cualquier consecuencia derivada de la fabricacién, funcionamiento y/o utiizacion de los
servicios y productos que se describen y/o analizan, Todas las marcas mencionadas en este litro son propiedad exclusiva de sus
respectivos duefios. Impreso en Argentina. Libro de edicicn argentina. Primera impresion realzada en Sevagraf, Costa Rica 5226,
Grand Bourg, Malvinas Argentinas, Pcia. de Buenos Aires en Vil, MMXIV
ISBN 978-987-1949-64-9
Ruiz, Diego
C++ / Diego Ruiz ; coordinado por Gustavo Carballo. - 1a ed. - Ciudad Autonoma de Buenos
‘res: Fox Andina; Buenos Alres: Dalaga, 2014.
352 p. | 24 x 17 om. - (Manual users; 268)
ISBN 978-987-1949-64-9
1. Informatica |. Carballeiro, Gustavo, coord. I Titulo
DD 005.3LRUSERS
PRELIMINARES:
El libro de un vistazo
En este libro abarcaremos los principales temas que componen la pro-
gramacién orientada a objetos con C++: cudles son sus caracteristicas y
c6mo se utilizan sus funciones. El contenido de cada capitulo es eminente-
mente te6rico, acompafiado siempre de diagramas y consejos practicos.
“uv ¥@ vee
PROGRAMACION ORIENTADA A OBJETOS eae
En este primer capitulo abordaremos
los conceptos principales que hacen a la
programacién orientada a objetos y haremos
una introduccidn a los sistemas complejos.
*o “ve
FUNDAMENTOS DE C++
Estudiaremos los elementos que componen
este lenguaje de programacién y
conoceremos sus principales virtudes.
*O “vu
ee TTT
‘Aprenderemos a interactuar con el usuario,
veremos qué es un array y cémo empleario,
y comenzaremos a trabajar con variables que
contengan texto, Ademas, explicaremos cémo
crear nuestras propias funciones.
Zi wer
ASE Y OBJETO
En este capitulo profundizaremos aspectos
del lenguaje estudiando, bésicamente, una
de sus estructuras principales: la clase.
>> [Link]
Descubriremos cémo solicitar memoria
desde un programa en forma dinamica
or medio de los punteros, para hacer
un uso més eficiente de los recursos de
la computadora. Veremos también qué
son las referencias.
* vee
En este capitulo abordaremos herencia y
composicién, dos recursos fundamentales en
el momento de crear el madelo de datos de
nuestro sistema. Veremos cémo trabajan los
constructores y destructores y crearemos
una pila y una cola utilizando un array.
¥n “iv
Bae
Estudiaremos el polimorfismo, tercer
gran pilar de la programacién orientada @
objetos. Tambien veremos mecanismos que
implementa el lenguaje para dar soporte
a esta caracteristica: la sobrecarga de
funciones y operadores, los métodos
virtuales y las clases abstractas.CH Geass 5
*ng vee
‘esta formado por una serie de diagramas:
-que nos ayudardn a disefiar y documentar los
Veremos cémo trabajar con los recursos que diferentes componentes de! sistema.
ofrece C++ para la manipulacién de archivos:
escritura y lectura de datos binatios, y cuales
‘son los pasos a seguir para almacenar el
estado de un objeto en y desde un archivo.
Cates
ES ao yet ec)
STi
* no vee Aprenderemos a implementar una lista
fate] 7 cenlazada, una lista doblemente enlazada,
Las una pila dindmica y una cola dinamica.
Los patrones de disefio son soluciones Finalmente, aprenderemos a reimplementar
documentadas a problemas clésicos todas estas estructuras, pero de modo
surgidos en la construccién de sistemas independiente del tipo de dato que manejen,
orientados a objetos. En este capitulo, por medio de las plantas.
veremos algunos de los patrones mas
populares que podremos aplicar.
ayoys LLL a ibreria STL es un poderoso aliado ala
TSA CDE ELSES hora de codificar sistemas que requieran
Este sistema de notaciones esta destinado estructuras de datos, como arrays, listas,
al modelado de aplicaciones que se pilas, colas y mapas. En este capitulo
basan, principalmente, en conceptos de la veremos cémo hacer uso de ella y, asi,
programacion orientada a objetos. Este sistema mejorar nuestra productividad.
i Pee Ree Ves Le
‘Alo lergo de este manual podré encontrar una serie de recuadros que le brindarén informacisn complementaria:
‘curiosidades, trucos, ideas y consejos sobre los temas tratados. Para que pueda distinguirlos en forma mas sencila,
cada recuado esta identiicado con diferentes iconos:
‘CURIOSIDADES. ATENCION DATOS UTILES sITios WEB,
EIDEAS ‘YNOVEDADES
[Link] <«USERS!
Contenido
El libro de un vistazo.
Informacién complementaria..
Introduccion.
Programacion orientada
a objetos
Introduccion
Programacién no estructurada 6
Programacion procedural. lS
Programacién modular... 16
Programacion orientada a objets. 6
Qué es un objeto? 7
‘Mas caracteristicas de los objetos ....... 1D
‘Adin mas caracteristicas de los objetos. 20
El andlisis y el disefo en la programacion
orientada a objeto:
El lenguaje unificado de modelado..
Resumen
Actividades
ava
>> [Link]
PRELIMINARES
Fundamentos de C++
{Qué es un lenguaje de pragramacién’.
Proceso de compilaci6n sin.
Proceso de enlace.
Entornes de programacién
Un poco de historia.
Diferencias entre C y C++
Nuestro primer programa en C++.
Comentarios.
[sentencta
|
Constantes..
Tipos de datos fundamentales..
Nameros entero
Nameros no enters...
El operador sizeo..
Caracteres. ns
El tipo de dato void
Booleans.
Operadores..
Precedencia de operadores.CH
Control del flujo de ejecucién.
Sentencias condicionales.
‘Sentencia de bucle 62
Resumen.
Actividades...
Aspectos avanzados
del lenguaje
Entratia y salida en C44.
El objeto cout n
Elobjeto cin.
El preprocesador
array
Funciones..
Funciones que retornan ValOr€S snc
Funciones con parametros...
Aguitectura de un programa complejo.
Los string en C++,
Funciones para la manipulacion
Uso de una estructura qa.
Enumeradore:
Enumeradores sin valor numérico asociado.
Fijando un valor iicial
Resumen...
Actividades
inAuto2
Clase y objeto
Laclase..
Las funciones miembros 0 métodos...
El diagrama de clases
El diagrama de objetos.
El constructor...
El destructor noms
‘Modificadores de acceso..
Propiedades estitica:
‘Matodos estaticos
Restricciones de os métodos estaticos.
El juego de ta vida.
La resolucion.. 158
La propiedad 158
Los métodos 159
La funcion main, 168
Patrones de interés 170
Resumen
Actividades.
Class Foo
(
We mse nda prvadas
public:
i. ‘fide aoa
protected:
U).. iad ores proteins
private:
Hae Ove mite y rains prnas
public:
hss foves rmétodotypropladades pions
}
[Link] <«8 CESS
Gestion de memoria
Los punteros. 174
Como declarar una variable
tipo punter. ATS
El operador new. wl TB
Operatior delete 178
179
Punteros a array.
Cadenas de texto
Aritmética de punteros..
Las referencias aa
Los punteros como parametros
de funciones.. ae
Los punteros como valor de veto. 198
Variables estticas 201
Puntero a objetos....
Las propiedades
Uttlizar la clase Cadena...
El constructor de copia.
Array de objetos...
El puntero this.
Resumen
Actividades
fa pkeawe
a
“eh 250; eh
L:
tie p
>> [Link]
PRELIMINARES
Herencia
Métodos constantes..
Crear subelases..
Madificadores de acceso en la herencia
El modificador de acceso protected...
Invocacién de construtore...
NNRERS
Invocacion de destructores
5. Extraigo un elemento,
dienentoqueingess | |] (51
‘enlapila, 6 |)
> 3 B]
mWtinottnento Le [ 5] [21
4 [1]
9 |t0)
Constructores con paraémetros..
Composicién..
Ocultar el nombre de un método..
Compasicién vs. Herencia
Herencia mattiple
El caso del diamante...
Caso de estudio.
Cémo funciona una pila
Cémo funciona una cola,
Declaracion de la clase Array...
Definicion de la clase Array...
Declaracién de la clase Pla.
Definicin dela clase Pila...
Declaracion dela clase Cola..CH
Defnicion dela clase Col 259
Usar Ia pila y la cola. wn 262
Resumen...
Actividades
Polimorfismo
Qué es el polimorfismo?
‘Sobrecarga de funciones.
Parametrosopcionales
Sobrecarga de operadores.
El morlicadr rit nan
Sobrecarga de operadores unarios
‘Operadores que no modifcan
elestado del objeto 282
Operadores que modifican el estado del objeto...263
Sobrecarga de operadores binavios.
Métodos virtuales
Destructores virtuales.
Resumen...
Actividades
Objetos persistentes
{Qué es un objeto persistente?.
‘Manejo de archivos en C+...
Escritura de un archivo.
Lectura de un archivo.
Lectura y escritura de datos binarlos. 34
Almacenar el estado de un objeto
Objetos con punters.
Resumen
Actividades.
{Pot mach dts opanatrinos xc eit
[Bia bie ble
‘[Link] (eho)
2. tain cr iacamiend crac acho yb eames
unt doen,
bla ble bla
‘sJemplotat (eho)
sxBuf (memoria)
2am een
Patrones de disefio
{Qué es un patrén de diseRo
E! patrén Singletos
El patron Método Plantil..
El patron Fabrica.
El patron Estrategia.
El patrén Observador
Resumen
[Link] <«lo GES
Lenguaje Unificado
de Modelado
Introduccion.
Diagramas de Casos de uso...
Diagramas de Clases..
Diagramas de Objeto:
Diagramas de Secuencia .
Diagramas de Estado:
Diagramas de Colaboracion..
ad,
Diagramas de A
Diagramas de Componentes
Estructuras de datos
jamicas y plantillas
Listas enlazadas
2Qut es una lista enlazada.
Implementacion de lista enlazada ..
Laclase Nodo
Laclase Lista...
>> [Link]
PRELIMINARES
Plantillas...
Listas dablemente enlazadas con plantillas......47
Pil
Clans
Los iteradores.
Resumen...
Actividades...
| Anc _,,,
La libreria
de plantillas STL
La libreria ST
Las clases contenedoras.
La clase vector.
La case list...
La clase stack.
La clase queue...
La clase map
Resumen2 BSS PRELIMINARES,
Introduccion »
Este libro esta dirigido principalmente al programador novato
y de nivel medio, asi como al estudiante o al autodidacta. Los
primeros cuatro capitulos son Introductorios, y alli explicaremos
detalladamente cuales son los fundamentos del lenguaje, su
sintaxis y sus sentencias basicas. También veremos como realizar
nuestro primer programa.
Llegando a la mitad del libro profundizaremos los conceptos
relacionados con la programacién orientada a objetos, Descubriremos
qué es un objeto cuando hablamos de C++ y como tratar con él.
Si usted es estudiante del nivel terciario o universitario de alguna
carrera relacionada con la programacion, seguramente encontraré
muy titil el capitulo 5, en el que se explican algunos conceptos mas
avanzados, como la gestién dinamica de la memoria.
Por otro lado, si es un programador practico, tal vez desee
utilizar las estructuras de datos de la libreria STL; en el apéndice
C veremos en detalle como emplearla. Entre otros temas,
descubriremos qué es un iterador, qué es un contenedor y como
hacer uso de ellos.
Finalizado el libro, sera capaz de crear sus propias aplicaciones
C+ haciendo uso de las herramientas de disefio adecuadas. Con
los conceptos aprendidos y los ejemplos vistos, estara preparado
para comenzar a experimentar y realizar diversos proyectos.
Todos los temas son tratados a través de diagramas visuales
y ejemplos practicos, en busqueda de facilitar la comprensién de
los conceptos.
>> [Link]ESATA
Programacion
orientada a objetos
En este primer capitulo, comenzaremos por conocer
qué es la programacion orientada a objetos y en qué puede
ayudarnos. También veremos sus conceptos principales,
la evolucion del diseno y una introduccion a la construccion
de sistemas complejos.
is y el disefio en la os
vy Introduccién y El anil
Programacién no estructurada......15 programacién orientada
Programacién procedural a objetos.
Programacién modular El lenguaje unificado
Programacién orientada a objetos.. de MOdELAMO nnrnenenannene A
2Qué es un objeto?. -
Mas caracteristicas de los objetos...19 _» Resumen.
Ain mas caracteristicas
de los objetos vw 20 Actividades.
AAA14 BSS 1, PROGRAMACION ORIENTADA A OBJETOS
©) Introduccion
Queremos utilizar la computadora para resolver problemas,
ino es asi? Podria ser un problema propuesto por un profesor
de la facultad en un enunciado, el calculo del saldo de una cuenta
bancaria o la programacién de un juego. El asunto es que para
esto deberemos trasladar dichos problemas a nuestra PC, y este
proceso de traslacién implica una abstraccién. Tal vez el término
resulte extrafo, pero desde nifos estamos acostumbrados a realizar
abstracciones: en aquellos tiempos, a veces jugébamos a ser otra
persona situada en otro mundo; incluso la bafiera podia convertirse
en un mar embravecido. Tales ejemplos no son otra cosa que
abstracciones, modelos de una realidad llevada a otro contexto
por medio de una operacién intelectual.
Como deciamos, para trasladar un problema a la PC, también
realizamos abstracciones; 0 sea, debemos crear un modelo
simplificado de la realidad tomando los elementos que nos parezcan
pertinentes y transformandolos en variables, por ejemplo, dentro
de un programa. De este modo, nuestra maquina podrd entenderlo,
ejecutarlo y, finalmente, habremos obtenido el resultado que
estébamos buscando.
Programa
l
Problema ——> [7
Figura 1. Para introducir un problema en una computadora,
debemos realizar un proceso de abstraccién.
Para esto, sin duda, deberemos acudir a un lenguaje de
programacién, que no es otra cosa que una herramienta. El lenguaje
nos permitird especificar, a modo de instrucciones, cudles son
los pasos que tendra que seguir la computadora para resolver el
problema. Pero cémo especifiquemos la solucién dependera del
modelo de programacién que utilicemos. Entonces, lo mejor sera
repasar un poco los modelos mas comunes.
>> [Link]CH Gas 15
Programacion no estructurada
Si no estamos empleando ningtin modelo de programacion
en particular, probablemente estemos programando de modo
no estructurado. La programacién no estructurada
consiste en un programa extenso desarrollado {
dentro de una funcién principal que utiliza
solo variables del tipo global. Este modo de
programaci6n puede ser aceptable para la
resoluci6n de problemas triviales; sin embargo,
a medida que la complejidad se incrementa,
comienza a ser muy engorroso su mantenimiento
y el agregado de nuevas caracteristicas.
Figura 2. En la programacin no estructurada
es dificil seguir el flujo de ejecucién.
Programaci6n procedural
La mayor parte de los lenguajes de alto nivel soportan la creacion
de procedimientos, que son trozos de cédigo que realizan una tarea
determinada. Un procedimiento podra ser invocado muchas veces
desde otras partes del programa con el fin de aislar la tarea en
cuestion y, una vez que finaliza su ejecucién, retorna al punto
del programa desde donde se realizo la llamada. Ademas, cada
procedimiento tendra su propio conjunto de datos, aunque podra
acceder a datos globales y a los pasados como parametros desde
el programa principal o desde otros procedimientos. De esta forma,
podemos dividir nuestro problema en problemas mas pequeiis y, asi,
levar la complejidad a un nivel manejable.
E Programa principal _ i
bi] p2 3
Figura 3. Programacion procedural en programas pequefios o medianos.
[Link] — ««CRUSERS| 1, PROGRAMACION ORIENTADA A OBJETOS
Figura 4. Programacién procedural en un programa de tamafio mayor.
Programacion modular
La programacién modular va un paso mas alla con la creacion de
procedimientos: los agrupa en médulos segun su funcién. De esta manera,
el modelo es apto para sistemas mas complejos que requieren programas
mis extensos. Cada médulo tendra su propio conjunto de datos, creando
un nivel intermedio de datos globales, ya que el conjunto de datos del
médulo sera global para los procedimientos
del médulo, pero inaccesible a los
brogyama principal procedimientos de otros médulos.
De este modo, la representacién de un
determinado concepto del problema podra
A ser llevado a un médulo; por ejemplo,
» bs. ‘ ‘g
T t T T la manipulacion de archivos, donde dentro
2 [pt del médulo en cuesti6n existiran distintas
tt funciones para su creacién, destruccion,
ps lectura, escritura, etcétera.
Médulo 1 Médulo 2 Figura 5. En la programacién modular,
cada médulo agrupa procedimientos.
Programacion orientada a objetos
En la programacién orientada a objetos, el concepto de médulo es
profundizado y se transforma en un objeto. Ademés, alli, un programa
>> [Link]IE SSOSSSCCCCG
En este capitulo haremos una introduccién al lenguaje C++,
expondremos sus principales virtudes, estudiaremos los
elementos que lo componen y cémo crear programas con él.
+ 2Qué es un lenguaje de
programe
Proceso de compilacién.
Proceso de enlace....
Entornos de programacié
I esse
¥ Un poco de historia
Diferencias entre Cy [Link] 34
y Primer programa en C++.
Comentarios
Variables.
Las palabras
reservadas de CH [Link] nn 38
+ Asignacién,
+ Constantes.
+ Tipos de datos
El operador sizeof.
Caracteres
El tipo de dato void.
Booleanos.
y Operadores,
Precedencia de operadore:
-y Control del flujo de ejecucion.51.
‘Sentencias condicionale:
Sentencia de bucle...
y Resumen.
+ Actividades.
ws
AAA30
Gas 2. FUNDAMENTOS DE C++
al Que es un lenguaje
»>
de programacion?
Un lenguaje de programacién es, principalmente, una herramienta.
Por medio de él podremos indicarle a nuestra computadora qué pasos
debe seguir para resolver un determinado problema. Estos lenguajes
suelen ser clasificados segiin distintos criterios; uno de ellos es su
cercania al lenguaje realmente comprendido por la plataforma.
Los lenguajes de bajo nivel son los mas cercanos a la arquitectura
de la computadora, y el ensamblador es uno de ellos.
Por otro lado, los lenguajes de alto nivel utilizan sentencias
similares al lenguaje natural empleado por los seres humanos; de este
modo, son mas faciles de aprender y, ademas, pueden ser trasladados
a distintas arquitecturas por no poseer un cédigo intimamente
relacionado con estas. En este grupo se encuentra la mayor parte
de los lenguajes, como el C, C++, Pascal, Fortran, Basic, etcétera.
Proceso de compilacion
Ahora bien, tal vez nos preguntemos como es que si programamos
utilizando sentencias en lenguaje similar al natural, en cualquiera de
los lenguajes conocidos, la maquina puede entenderlo. Para esto, existe
un proceso mediante el cual se traduce dicho cédigo a un lenguaje
entendible por la computadora.
Proceso de compilacién
‘archive main-¢pp fon nnn TarenIVO MBTTOD]
“archivo [Link]
“archivo treeepp | archivo tres.0b)_|
‘uestro programa
Figura 1. Un proyecto esta formado por un grupo de archivos
de codigo. Cada archivo de cédigo se compila de manera individual.
[Link]CH CaS 31
A este proceso se lo denomina compilacion, y los programas que
lo realizan se denominan compiladores. Normalmente cuando nuestro
programa crece en cantidad de lineas, el proyecto suele ser dividido en
diversos archivos de codigo.
Proceso de enlace
Luego, terminado el proceso de compilacién, habremos obtenido
una serie de archivos (con terminacién obj) que deberemos juntar
para crear un archivo ejecutable.
El proceso que une estos archivos y les adjunta ademas otros
componentes, segtin corresponda, se denomina enlace, y el programa
que realiza esta funcién es el enlazador. E] archivo de salida a este es
un proceso ejecutable.
Proceso de compilacién Proceso de enlazado
Compilador C++ Enlazador
Figura 2. Procesos de compitacién y enlace.
Entornos de programacion
Parece complicado... ¢Compilar y luego enlazar? ;Como hacemos
todo esto? Bueno, podriamos decir que somos afortunados: en la
actualidad existen muchos entornos de desarrollo donde todos estos
procesos se realizan mediante un simple golpe de tecla.
La eleccién de qué entorno utilizar se deja a criterio del lector.
Sin embargo, en el Apéndice B se recomiendan algunos de los mas
populares para el sistema operativo Microsoft Windows.
[Link] — ««32 CESS 2. FUNDAMENTOS DE C++
Es importante hacer la distincién entre un entorno de desarrollo y
un compilador: el entorno es simplemente una aplicacién -usualmente,
de ventanas- que nos permite gestionar un proyecto de programacion
de manera sencilla; el entorno de desarrollo, por su parte, utiliza
el compilador y el enlazador autométicamente. Ademas, los entornos
modernos colorean distintas palabras de nuestro codigo en funcion
de las sentencias reconocidas del lenguaje, y esto mejora muchisimo la
legibilidad del cédigo. Y existen otras tantas funciones mas que realiza
el entorno para facilitarnos la vida, como ser:
Permitir la configuracion de los parametros del compilador y el
enlazador de manera sencilla.
© Mostrar el nombre de las estructuras de datos empleadas en nuestro
proyecto para poder acceder a ellas facilmente.
Facilidades de busqueda avanzada.
* Facilidades de impresion.
* Muchos entornos incluyen un depurador integrador para realizar
un seguimiento paso a paso de la ejecucion de nuestro programa.
©) Un poco de historia
El lenguaje C fue desarrollado en los laboratorios Bell durante
la década del 70, y proviene de otro lenguaje llamado B, que
a su vez desciende de otro lenguaje llamado BCPL. Inicialmente,
el lenguaje C fue desarrollado como un lenguaje de programacién
para escribir y mantener el sistema operativo UNIX, luego fue
expandido para trabajar en otros sistemas. A medida que el lenguaje
crecié y maduré fue tornandose mas popular. Actualmente, sus
principales caracteristicas son:
See
Esta division se reaiza con la intencion de disminuir la complejidad en ta organizacion de nuestro
proyecto. Cada uno de estos archivos de cédigo es compilado de manera individual.
>> [Link]ESATA
Aspectos avanzados
del lenguaje
En este capitulo, aprenderemos a interactuar con el usuario
por medio de una terminal de texto. Veremos también
qué es un array, comenzaremos a trabajar con variables que
contengan texto y crearemos nuestras propias funciones.
+ Entrada y salida en C++...
El objeto cout .
El objeto cin
Funciones para la manipulacién
de estrings.
Estructuras
Uso de una estructura...
Funciones que retornan valores ....93
Funciones con pardmetros
‘Arquitectura de un programa
comple
y Los string en C++.
-y Resumen.
+ Actividades.
US
AAA4 BSS 3. ASPECTOS AVANZADOS DEL LENGUAJE
») Entrada y salida en C++
El lenguaje C+4, al igual que el lenguaje C, no incluye primitivas
para realizar opciones de entrada/salida. En su lugar, existen librerias
esténdar que nos permiten, por ejemplo, escribir en la pantalla 0 tomar
un caracter del teclado, es decir, manipular los flujos de entrada/salida
a nuestro gusto.
Un flujo (en inglés, stream) no es otra cosa que una secuencia de bytes
que provienen de una fuente (flujos de entrada) o van hacia algun destino
(flujos de salida). Al utilizar este concepto, C+ se desvincula de cual sea
la fuente o el destino concreto; un flujo de salida podria ser la pantalla o
un archivo, y todo se manejaria basicamente del mismo modo.
El lenguaje C define inicialmente tres flujos estandar:
© stdin, el flujo de entrada (conectado por defecto a la entrada del teclado)
© stdout, el flujo de salida (conectado por defecto a la pantalla
de la terminal);
© stderr, un flujo de error (también conectado por defecto a la
pantalla de la terminal).
aa
flujos de entrada Tujos de salida
[archive
Figura 1. Flujos de entrada/salida en un programa C++
El lenguaje C++ hereda estos conceptos de C y agrega los siguientes
tres objetos globales para manipularlos:
* El objeto cin, para manipular el flujo stdin.
© El objeto cout, para manipular el flujo stdout.
© El objeto cerr, para manipular el flujo stderr.
Para poder utilizar estos objetos, bastard con que incluyamos el
archivo de cabecera iostream del siguiente modo:
>> [Link]CH 5
#include
Ademas, estos objetos, por estar definidos dentro del conjunto
de datos estandar del lenguaje, se encuentran bajo el espacio de
nombre std (abreviacién de “estandar”). Por lo tanto, siempre debemos
anteponer std:: a su uso. Por ejemplo:
std::cout << “el texto va aqui”;
En lugar de anteponer siempre std, también podemos especificarlo al
comienzo del programa
using namespace std;
Pero... gqué es un espacio de nombre? Dentro de una liberia, existe
una gran cantidad de declaraciones que especifican identificadores
para cada tipo de dato. ;Qué sucederia si utilizaramos un nombre ya
existente en una libreria para un tipo de dato creado por nosotros?
El compilador arrojaria un error, por lo que nosotros deberiamos
cambiar el nombre de nuestro tipo de dato.
éQué sucederia si desearamos utilizar dos librerias que
declarasen dos identificadores con el mismo nombre? En ese caso,
modificar el cédigo seria muy trabajoso, ya que dicha libreria no
fue escrita por nosotros.
A modo de analogia, el lector podria pensar qué sucederia si el
sistema de archivos utilizado por su sistema operativo no permitiera
la creacién de subdirectorios, es decir, si todos y cada uno de los.
archivos que contuviera su disco duro debiesen estar en el directorio
raiz, (Seria un problema tener que estar renombrando archivos para
que no existan dos con el mismo nombre!
Un espacio de nombre (en inglés, namespace) en CH seria
equivalente a un directorio en un sistema de archivos. Asi como
pueden existir dos archivos con el mismo nombre dentro de dos
directorios distintos, pueden existir dos identificadores iguales
en distintos espacios de nombres.
[Link] — ««7 GES 3. ASPECTOS AVANZADOS DEL LENGUAJE
Para declarar una variable dentro de un espacio de nombres en
particular, simplemente debemos proceder del siguiente modo:
namespace MiEspacioDeNombre
‘
int iMiVariable,
Por lo tanto, el siguiente listado de cédigo es incorrecto:
int Valor;
int iValor;
Pero el siguiente no:
namespace Ns1
«
int iValor;
)
namespace Ns2
¢
int iValor;
Ahora bien, si queremos utilizar la variable declarada dentro de
nuestro programa, tendremos que especificar el espacio de nombre al
cual deseamos referirnos; de otro modo, el compilador slo buscar
el identificador en el espacio de nombres global.
namespace Ns1
‘
int iValor;
)
namespace Ns2
>> [Link]IE SSOSSSCCCCG
Ya hemos realizado una introduccion al lenguaje; ahora
comenzaremos a ver temas relacionados especificamente
con la programacién orientada a objetos. Profundizaremos
aspectos del lenguaje C++ a partir del estudio de una
de sus estructuras principales: la clase.
+ Laclas 134 y Métodos estaticos ...
Las funciones miembros 0 métodos 137 Restricciones de los métodos
St8C08 nn 157
El diagrama de clases.
-y El juego de la vida
La resolucié
La propiedad...
Los métodos.
y El diagrama de objetos..
y El constructor...
La funcion main.
+ El destructor.
Patrones de interés,
+ Modificadores de acest
y Resumen.
+ Propiedades estaticas.
+ Actividades.
AAA4 BSS 4. CLASE Y OBJETO
+) La clase
Una clase es una estructura de datos. Su objetivo, como el de la
estructura (struct), es crear nuevos tipos de datos para ser utilizados
en un programa. De hecho, la estructura posee muchisimas similitudes
con las clases, especialmente en C++.
Recordemos que una estructura nos permite manejar un conjunto
de datos como un elemento tinico. Esto es especialmente itil cuando
el conjunto de datos posee una estricta relacion entre si y conforma
una entidad. En el capitulo anterior, vimos el ejemplo de un automovil
en el que colocamos unas cuantas propiedades relacionadas con él
dentro de una estructura.
Una clase nos permite ir un paso mas alla; no solo podremos
declarar tipos nuevos especificando sus propiedades, sino que
podremos incluir funciones que, por supuesto, también estaran
muy relacionadas con la entidad en cuestion.
Supongamos que deseamos implementar una aplicacion en la
cual requerimos modelar el concepto de un televisor. Para ello,
consideraremos algunas de sus propiedades y estableceremos como
regla que las propiedades de sintonia (m_uiCanal) y nivel de sonido
(m_uiVolumen) solo deberian poder modificarse cuando el televisor esté
encendido (m_bEncendido en verdadero)
struct Televisor
«
bool m_bEncendido; M Indica si la TV esta encendida
unsigned int m_uiCanal; —_/! Indica sintonia del televisor
unsigned int m_uiVolumen; // Indica nivel de sonido
%
Ahora, si deseéramos crear un televisor en nuestra aplicacién,
deberiamos crear una variable a partir de él del siguiente modo:
int main()
(
Televisor tv];
>> [Link]CH Geass 135
ion
Siguiendo con el ejemplo, si nuestra intencién es cambiar el valor
de la propiedad m_uiVolumen, bastaria con escribir:
tv1.m_uiVolumen = 10;
Pero esto no siempre podra ser correct, Habiamos establecido que
el nivel del sonido podria ser modificado cuando el televisor estuviera
encendido, por lo tanto, tendriamos que haber codificado:
if (tv1.m_bEncendido)
tvi.m_uiVolumen = 10;
Entonces, el hecho de que el programador modifique el nivel
de sonido cuando el televisor esté apagado queda bajo estricta
responsabilidad. cEs esto lo que queremos? Pues no. Lo ideal seria
poder establecer ciertas reglas en una entidad y que de ningiin modo
otro programador pudiera alterarlas; en definitiva, algo mas parecido
aun televisor real, es decir, si no se puede variar el nivel de sonido
cuando el aparato se encuentra apagado, como usuarios, nada podemos
hacer mas que obedecer las reglas.
Como una alternativa encaminada a subsanar este problema, podriamos
crear una funcién que modificara el nivel de sonido del aparato, que
retorne verdadero si lo ha podido hacer y falso de otro modo:
deh a achadsiihctiicia ace
Como se puede ver en la funcién ModificarVolumen, para el parémetro Televisor hemos utiizado
Una referencia en lugar de hacer un pase por valor. Esto es corveniente por dos motivos:
Deseamos modifica el objeto original y no una copia que sera finalmente destruida
Pasar una direccién de memoria es mas eficiente que copiar las propiedades de una estructura,
[Link] — ««136 CESS 4. CLASE Y OBJETO
boo! Modificar'Volumen(Televisor & ty, unsigned int uiVolumen)
‘
if (tvm_bEncendido)
c tv.m_uiVolumen = uiVolumen;
return true;
)
else
return false;
)
Entonces, ahora podriamos utilizar esta funcién de la siguiente
manera’
int main
¢
Televisor tv];
1/ Modifico el nivel de sonido de tv
ModificarVolumen(tv1, 10);
return 0;
Es necesario hacer el pase de tv1, ya que podriamos poseer varios
objetos del tipo Televisor, y la funcién requiere saber a qué estructura
debe modificar sus datos. De modo andlogo, podriamos crear otras
funciones relacionadas con el televisor:
void Encender(Televisor & tv)
(
Tv.m_bEncendido = tue;
d
void Apagar(Televisor & tv)
(
>> [Link]WO
En este capitulo veremos cémo solicitar memoria en forma
dinamica por medio de los punteros. De esta manera
podremos crear objetos dinamicamente y hacer uso mas
eficiente de los recursos de la computadora. Veremos
también qué son las referencias y cuando es conveniente
utilizarlas sobre los punteros.
+ Los punteros
Como dectarar una variable
tipo puntero..
El operador new..
Operador delete.
Punterosa array.
178
178
Cadenas de texto
‘Aritmética de punteros 186
Las referencias. 2191
Los punteros como parametros
de funciones... on 192
Los punteros como valor
de retorno,
Variables estaticas...
+ Puntera a objetos.
Las propiedades.
Utilizar la clase Cadena.
El constructor de copia...
y Resumen.
+ Actividades.
AAA14 BSS 5. GESTION DE MEMORIA
+) Los punteros
Si alguna vez escuchamos hablar de punteros, seguramente la frase
fue acompafada de la palabra “dificil’. Sin embargo, no tiene por qué
ser asi. Un puntero es basicamente una construccién del lenguaje que
nos permite obtener mas control de la memoria de la computadora.
Con él podemos crear objetos en forma dinamica y asi utilizar
eficientemente los recursos del sistema.
Supongamos que deseamos almacenar una cierta cantidad de notas
de un alumno en alguna estructura de datos. Si bien ya estudiamos
este mismo ejemplo cuando vimos los array, ahora agregaremos
un condimento extra: la cantidad total de notas de un alumno s6lo
se conoce cuando comienza a ejecutarse el programa, y puede
variar de ejecucion a ejecucion. Antes, bastaba con crear un array
de una determinada cantidad de elementos y listo, pero ahora, iqué
haremos? Una solucién posible seria crear un array absurdamente
grande para que se puedan almacenar todas las notas que sean
necesarias en cualquier caso.
// Creo un array de un tamafio suficientemente grande
int aiNotast1000];
Pero esta solucién tiene dos defectos:
# En algunos casos, podria no existir un maximo posible, es decir,
la cantidad de elementos es realmente desconocida y puede ser
tanto 5 como 250 o 100 000.
© Realizamos un uso muy poco eficiente de los recursos. Si, por
ejemplo, creamos un array de 1000 elementos y luego usamos
tan solo 10, estaremos desaprovechando muchisima memoria.
Una solucién que podriamos imaginar seria crear un array de tamafo
especificable durante el tiempo de ejecucién. De todas maneras,
el compilador exige que el valor encerrado entre corchetes en la
definicién de un array sea una expresién constante, es decir, un valor
conocido en tiempo de compilacién.
Por esa razén no se permite el siguiente cédigo:
>> [Link]CH Geass 15
int TamArray;
cout << “Ingrese el tamafio del array
cin >> iTamArray;
cout << endl;
11 La siguiente expresion es INVALIDA, iTamArray no es una expresion constante
int aiNotasliTamArray];
JI Sigo trabajando con aiNotas
Mins
Como excepcién a la regla, el compilador gee 3.2 si acepta el
cédigo anterior.
Para poder crear un array en el que su tamatio sea especificado
en tiempo de ejecucién, tendremos que solicitar memoria en forma
dindmica utilizando punteros. Un puntero es una variable que no
almacena directamente un dato, sino una direccién de memoria
en la que se encuentra el dato en cuestién.
Como declarar una variable
tipo puntero
Supongamos que deseamos crear una variable puntero; para ello,
deberemos especificar, como con cualquier otra variable, cual es su
tipo. Veamos:
17 Una variable puntero a un nimero entero
int * pA;
Notemos que la declaracién es muy similar a la de una variable
convencional, solo que aqui, por ser un puntero, colocamos un signo
asterisco (*) entre el tipo de dato y el identificador. pA es, entonces,
una variable que contendré una direccién de memoria donde habra
un ntimero entero. Sin embargo, gen qué posicion estard el numero
entero? Atin no lo hemos determinado, simplemente existe el
contenedor de la direccién, pero todavia no se establecié qué
[Link] — ««le CESS 5. GESTION DE MEMORIA
direccién sera; el puntero, como cualquier otra variable, comienza
con un valor basura en su interior:
pA |
igura 1. Un puntero aiin no inicializado.
Si en nuestro programa existiese otra variable entera, podriamos
establecer que nuestro puntero apuntara a ella del siguiente modo:
1] Declaro una variable entera convencional y Ia inicializo en 10
int {UnaVariableEntera = 10;
11 Declaro un puntero a variable entera
int * pA;
J hora le asigno la direccién de memoria donde se encuentra
iUnaVariableEntera
Mal puntero pA
pA = & iUnaVariableEntera;
iUnavariableEnters
(OxFFFFO102)
E
!
pA —
(OxFFFFOL01) [_ OxFFFFOLo2
Figura 2. El contenido de la variable sera un valor,
y el contenido del puntero sera una direccién de memoria.
Notemos que, para obtener la direccién de memoria que le fue
asignada a la variable entera iUnaVariableEntera, utilizamos el operador
& (“direccién de").
Ahora es posible modificar el valor de la variable entera no solo
por medio de ella, sino también por medio del puntero. Para esto,
no deberemos hacer lo siguiente:
>> [Link]SY
Herencia
En este capitulo abordaremos herencia y composicién,
recursos fundamentales en el momento de crear el modelo
de datos de nuestro sistema. Veremos cémo trabajan
los constructores y destructores dentro del mecanismo de
herencia y crearemos una pila y una cola utilizando un array.
{Qué es la herencia?. yHerencia maltiple
i caso del diamante.
ws
76250 de eStUldlOvnrennnnninn 246
{Como funciona una pil, one 246
en la herencia 225 Cémo funciona una cola 206
El modificador de acceso protected227 —_Declavacion dela clase Arranomn251
Invocacién de constructoresnu.233 _‘Definicin de la clase Array -252
Invocacion de destructores Declaracion de la las Pla une 255
CConstructores con pardmetros. Definicon de a las PH. nner 256
Declaracion de la clase Cola......258
+ CompOSiCIOM wan. Defnicin de la clase Col enue 259
Usar la play la cola. 1.262
+ Ocultar el nombre
de un métotlo
¥ Compasicién vs. herencia..
AAAPy BEUSERS| 6. HERENCIA
a Qué es la herencia?
La herencia es un concepto fundamental de la programacion
orientada a objetos. Por medio de esta caracteristica podremos definir
nuestras clases a partir de otras mas generales y solo agregar las
propiedades y métodos de la especializacién.
En el Capitulo 1 habiamos hecho una introduccion a este tema.
Habiamos comentado que el modo en que funcionaba la herencia tenia
mucho que ver con la forma en que definimos elementos empleando la
tradicién aristotélica, es decir, nos basamos en un objeto conocido para
luego especificar las diferencias que dan origen al nuevo elemento.
Debido a que nuestro sistema sera una coleccién de clases relacionadas
entre si, es muy importante ver como estaré confirmada su estructura
Por lo general, un disefto pobre genera mas problemas que soluciones,
ya que los errores se propagan rapidamente y se torna mas dificil su
expansion y mantenimiento.
Volvamos al ejemplo de los dispositivos electrénicos del Capitulo
1. Ahora veremos cémo codificar dicho ejemplo en C++. En principio,
huestro interés era incorporar al sistema la entidad Televisor y la
entidad Radio, debido a que son dispositivos electronicos que poseen
caracteristicas en comin, y, gracias a la programacin orientada
a objetos, podremos realizar el modelo de un modo muy natural.
Crearemos una clase llamada DispElectronico, que representara
un dispositivo electronic con caracteristicas comunes a estos,
de modo que luego agregaremos la clase Televisor y la clase Radio,
ambas subclases de DispElectronica. Veamos:
class DispElectronico
ce
i indica si el dispositivo se encuentra encendido 0 apagado
bool m_bEncendido;
public:
M Constructor
DispElectronico();
WEnciende el dispositive
void Encender() {m_bEncendido = true; }
I Apaga el dispositive
>> [Link]cH Cea5 221
void Apagar() { m_bEncendido = false; +
W Indica si el aparato est encendido
bool EstaEncendido() cons ( return m_bEncendido; )
Analicemos un poco la declaracién anterior, ya que estamos
haciendo algo nuevo:
* La clase solo posee una propiedad, que es privada y representa
el estado del aparato.
* Ademas, cuenta con cuatro métodos publicos: el constructor
(siempre Heva el mismo nombre que la clase y no posee tipo),
un método para “encender’ el dispositivo (cambia el valor de
la propiedad m_bencendido), otro para “apagarlo” y, finalmente,
un método que retorna el valor de la propiedad (no es posible
accederla de otro modo porque es privada).
Meétodos inline
Los métodos pueden ser definidos dentro de la misma clase. Hasta
aqui siempre realizabamos la declaracién en un archivo de cabecera
(terminacién .h):
class X
{
11 Dectaracién del método
void ml);
Y Iuego, lo definiamos en un archivo de cédigo fuente (con
terminacion .cpp):
void X::mL()
{
W..
[Link] — ««P77 Ma USERS| 6. HERENCIA
Pero veamos el siguiente caso
class X
(
I Declaracién de! método
void m10
(
Was
Ahora hemos introducido una novedad: la declaracion y definicion
conjunta dentro del cuerpo mismo de la clase. Todo esto, en el
archivo de cabecera.
Por otra parte, ambas son maneras correctas de definir un método,
y su modo de uso es exactamente el mismo. Entonces, gcual es la
diferencia? {Cuando usar un modo de definicién y cudndo el otro?
Los métodos declarados dentro del cuerpo de la clase son del tipo
inline, algo que podriamos lograr realizando una definicién clasica
y antepontendo esta palabra al tipo:
inline void X::m10
«
ae
{Qué quiere decir esto? Normalmente, cuando realizamos una llamada
una funcion o método, el compilador debe Introducir una serie de
operaciones en cécligo ensamblacior para el pasaje de parametros y
para resguardar clertos registros del CPU que seran restablecidos al
retorno, Por lo tanto, si estos pasos no estuviesen y el codigo propio
de la funcién fuera copiado, en lugar de realizar dicha llamada, nos
estariamos ahorrando algunas operaciones que, en clerto tipo de
sistemas con funciones muy solicitadas, pueden hacer una diferencia.
Las funciones o métodos inline poseen la caracteristica de no
ser funciones reales, sino que el compllador se toma el trabajo de
>> [Link]ESCA
Polimorfismo
En este capitulo estudiaremos el polimorfismo,
tercer gran pilar de la programacién orientada a objetos.
También estudiaremos qué mecanismos implementa
el lenguaje para dar soporte a esta caracteristica:
entre ellos, la sobrecarga de funciones y operadores,
los métodos virtuales y las clases abstractas.
+ ZQué es el polimorfismo?
y Sobrecarga de funciones...
Parametros opcionales
y Sobrecarga de operadores..274
El modificador friend. 276
Sobrecarga de operadores unaios... 279
Operadores que no modifican
cl estado del objeto.
Operadores que modifican
el estado del objeto.
282
283
Sobrecarga de operadores
binaries.
-y Métodos virtuales.
+ Destructores virtuales.
y Resumen.
+ Actividades.
AAA266 CESS 7. POLIMORFISMO
al éQué es el polimorfismo?
En pocas palabras, el polimorfismo es la habilidad que poseen los
objetos para reaccionar de modo diferente ante los mismos mensajes.
Un objeto del tipo Puerta, al igual que un objeto de tipo Ventana, podra
recibir el mensaje Abrir; sin embargo, cada uno de ellos reaccionara de
modo diferente.
En C++ el polimorfismo se encuentra intimamente relacionado con
el mecanismo de sobrecarga y los métodos virtuales. Veamos de qué
se trata esto.
a Sobrecarga de funciones
En lenguajes como el C, es comtin encontrar librerfas que poseen
grupos de funciones que realizan la misma tarea pero con distintos
tipos de datos en los parémetros. De este modo, si la tarea consiste
en mostrar en pantalla el dato pasado como parametro, podremos
encontrarnos con casos como el siguiente
void ImprimirlntCint iNum);
void ImprimirChar(char cCar);
void ImprimirFloat(float fNum);
El lenguaje C++ provee un mecanismo mucho mas conveniente
para realizar la misma tarea. Es posible crear funciones que tengan
el mismo nombre y difieran en la cantidad y/o tipo de parametros.
Teniendo esto en cuenta, el ejemplo anterior podria ser
reescrito como:
void Imprimir(int iNum);
void Imprimir(char cCar);
void Imprimir(float fNum);
>> [Link]
También podría gustarte
Lenguaje C++
Aún no hay calificaciones
Lenguaje C++
22 páginas
Manual C++
Aún no hay calificaciones
Manual C++
48 páginas
Introducción
Aún no hay calificaciones
Introducción
12 páginas
27311338553
Aún no hay calificaciones
27311338553
2 páginas