AUTOR

BIENVENIDOS A MI PRIMERA PÁGINA WEB

TUTORIAL DE C++

 GRACIAS POR VISITAR ESTA PAGINA

                                                                                                                                                                                                                    

                                                                                                                                                                                                                     

                                                                                                                                                                                  

 

 

 

AUTOR: MARCELINO CHI KANTUN          CORREO: Marce_8711@hotmail.com

                                                                                    

                                             

contenido

 

 UNIDAD 1 

1.-QUE ES EL SOFTWARE 

2.-COMO SE HACE UN SOFTWARE 

3.-QUE ES UN COPILADOR  

4.-QUE ES UN CARGADOR – LIGADOS  

5.-QUE ES EL CÓDIGO FUENTE 

6.-PROGRAMACIÓN  

7.-PROGRAMACIÓN MODULAR  

8.-PROGRAMACIÓN ORIENTADA A OBJETOS 

UNIDAD 2 

CLASE 

OBJETOS 

MENSAJES 

· MÉTODOS 

· EJEMPLOS 

UNIDAD 3 

· OPERADORES 

CORRER UN PROGRAMA EN DEV-C++ 

AQUÍ EMPIEZA EL TUTORIAL DE C++ (STL)

UNIDAD 1.


 

1.-QUE ES EL SOFTWARE                   

El software es una producción inmaterial del cerebro humano y tal vez una de las estructuras más complicadas que la humanidad conoce. De hecho, los expertos en computación aún no entienden del todo cómo funciona, su comportamiento, sus paradojas y sus límites Básicamente, el software es un plan de funcionamiento para un tipo especial de máquina, una máquina ``virtual'' o ``abstracta''. Una vez escrito mediante algún lenguaje de programación, el software se hace funcionar en ordenadores, que temporalmente se convierten en esa máquina para la que el programa sirve de plan. El software permite poner en relación al ser humano y a la máquina y también a las máquinas entre sí. Sin ese conjunto de instrucciones programadas, los ordenadores serían objetos inertes, como cajas de zapatos, sin capacidad siquiera para mostrar algo en la pantalla.

Los ordenadores sólo procesan lenguaje binario, pero para las personas este no es un modo válido de comunicarse (salvo a nivel sináptico :-). Si bien en los tiempos heroicos de los primeros ordenadores no les quedaba otro remedio que hacerlo, los programadores hace mucho que no escriben su código en lenguaje binario (denominado técnicamente ``código-máquina''), pues es terriblemente tedioso, improductivo y muy sujeto a errores. Hace tiempo que los programadores escriben las instrucciones que ha de ejecutar el procesador de la máquina mediante lenguajes formales, llamados ``de alto nivel'', bastante cercanos al inglés, si bien con rígidas reglas sintácticas que lo asemejan a los lenguajes lógico-formales. Esto facilita enormemente la tarea de escribir programas pero, para que esas instrucciones sean comprensibles para el procesador, deben ser convertidas antes a código-máquina. Esa conversión se realiza cómodamente con programas especiales, llamados compiladores. A lo que escribe el programador se le denomina ``código-fuente''. Al resultado de la ``conversión'' (compilación) en lenguaje-máquina, se le denomina ``código-objeto'', ``binarios'' o ``ficheros ejecutables''. En principio, al usuario común sólo le importa este último nivel, los ``binarios'', pero conviene tener clara la distinción entre fuentes y binarios pues es clave para entender el empeño de los partidarios del software libre en disponer de las fuentes.

Pero el software libre es mucho más que el derecho de los programadores y de los hackers a disponer de las fuentes del código: significa también la libertad de copiar y redistribuir esos programas. Esos derechos, o su ausencia, condicionan a cualquiera que use un ordenador y han configurado la industria del software y de la informática tal y como la conocemos hoy día. También ha dado lugar a un movimiento social --el del software libre-- cuya historia reconstruiremos brevemente en las próximas líneas.

 

pag.principal
 

2.-COMO SE HACE UN SOFTWARE 

El proceso de creación de software es materia de la Ingeniería del software. Es un proceso complejo que involucra diversas tareas de gestión y desarrollo.

Como resumen de las etapas para la creación de un software, se pueden mencionar:

    • Análisis.

    • Desarrollo.

    • Construcción.

    • Pruebas (unitarias e integradas).

    • Paso a Producción.

Dentro de estas etapas, existen sub-etapas (para algunos son otras etapas, como por ejemplo, paso a ambiente beta/rc).

Software -también conocido como programática o equipamiento lógico- es el conjunto de programas que puede ejecutar el hardware para la realización de las tareas de computación a las que se destina. Se trata del conjunto de instrucciones que permite la utilización del ordenador o computador (pc, personal computer). El software es la parte intangible de la computadora, es decir programas, aplicaciones etc.

pag.principal
 

3.-QUE ES UN COPILADOR 

Un compilador es una aplicación que toma un programa escrito en un lenguaje de alto nivel y lo convierte a un programa escrito en un lenguaje que la maquina puede entender. A este lenguaje se le llama lenguaje maquina.

Un compilador acepta programas escritos en un lenguaje de alto nivel y los traduce a otro lenguaje, generando un programa equivalente independiente, que puede ejecutarse tantas veces como se quiera.

En un compilador hay que distinguir tres lenguajes diferentes:

El programa escrito en un lenguaje de programación (comprensible por el ser humano, aunque se suelen corresponder con lenguajes formales descritos por gramáticas independientes del contexto) no es inmediatamente ejecutado en una computadora. La opción más común es compilar el programa, aunque también puede ser ejecutado mediante un intérprete informático

El código fuente del programa se debe someter a un proceso de transformación para convertirse en lenguaje máquina, interpretable por el procesador. A este proceso se le llama compilación.

Normalmente la creación de un programa ejecutable (un típico .exe para Microsoft Windows) conlleva dos pasos. El primer paso se llama compilación (propiamente dicho) y traduce el código fuente escrito en un lenguaje de programación almacenado en un archivo a código en bajo nivel, (normalmente en código objeto no directamente al lenguaje máquina). El segundo paso se llama enlazado (del inglés link o linker) se junta el código de bajo nivel generado de todos los ficheros que se han mandado compilar y se añade el código de las funciones que hay el las bibliotecas del compilador para que el ejecutable pueda comunicarse con el sistemas operativo y traduce el código objeto a código máquina.

Estos dos pasos se pueden mandar hacer por separado, almacenando el resultado de la fase de compilación en archivos objetos (un típico .obj para Microsoft Windows, .o para Unix), para enlazarlos posteriormente, o crear directamente el ejecutable con lo que la fase de compilación se almacena sólo temporalmente.

Un programa podría tener partes escritas en varios lenguajes (generalmente C, C++ y Asm), que se podrían compilar de forma independiente y enlazar juntas para formar un único ejecutable.

 

pag.principal
 

4.-QUE ES UN CARGADOR – LIGADOS 

Un programa objeto contiene instrucciones traducidas y valores de datos del programa fuente, y especifica direcciones en memoria donde se cargarán estos elementos.

Un cargador es un programa del sistema que realiza la función de carga (llevar el programa objeto a la memoria para su ejecución). Algunos sistemas tienen un ligador o editor de ligado (combina dos o más programas objeto independientes y proporciona la información necesaria para realizar referencias entre ellos) para realizar las operaciones de enlace, y un cargador separado para manejar la relocalización (modificar el programa objeto de forma que puede cargarse en una dirección diferente de la localidad especificada originalmente) y la carga. En la mayoría de los casos todos los traductores de programas (esto es, ensambladores y compiladores) de un sistema en particular producen programas objeto en el mismo formato, de esta forma puede usarse el cargador o ligador del sistema con independencia del lenguaje de programación fuente original.

FUNCIONES BÁSICAS DEL CARGADOR

Las funciones más importantes del cargador son colocar un programa objeto en la memoria e iniciar su ejecución. Se considera un cargador absoluto que podría ser utilizado como el tipo de ensamblador. En la figura 3.1(a) se muestra un ejemplo del programa objeto de dicho ensamblador.

Como este cargador no necesita realizar las funciones de ligado y relocalización de programas, su operación es muy simple, pues todas las funciones se realizan en un solo paso. Se revisa el registro de encabezamiento para comprobar si se ha presentado el programa correcto para la carga (y que tendrá cabida en la memoria disponible). A medida que se lee cada registro de texto, el código objeto que contiene pasa a la dirección de memoria indicada. Cuando se encuentra el registro de fin, el cargador salta a la dirección especificada para iniciar la ejecución del programa cargado. En la figura 3.1(b) se muestra una representación del programa de la figura 3.1(a) después de la carga. El contenido de las localidades de memoria para las cuales no hay registro de texto se representa por xxxx. Esto indica que el contenido previo de esas localidades no se altera.

En la figura 3.2 se muestra un algoritmo para la lógica del cargador sencillo analizado. Aunque este proceso es muy simple, hay un aspecto que merece ser comentado. En el programa objeto de ejemplo los bytes de código ensamblado se expresan en representación hexadecimal en forma de caracteres. Por ejemplo, el código de operación de máquina para una instrucción STL se representaría por el par de caracteres 14. Así durante la carga, cada pareja de bytes del registro del programa objeto debe empaquetarse en un byte. Es muy importante tener en cuenta que en la figura 3.1(a), cada carácter impreso representa un byte del registro del programa objeto. Por otra parte en la figura 3.1(b), cada carácter impreso representa un digito hexadecimal de la memoria (esto es, medio byte).

Este método de representar un programa objeto es eficiente desde el punto de vista del espacio y el tiempo de ejecución por lo que la mayoría de las máquinas almacenan los programas objeto en forma binaria almacenándose cada byte en el programa objeto. Lógicamente, con este tipo de representación un byte puede contener cualquier valor binario. Hay que estar seguro de que las convenciones de archivo y dispositivos no hacen que algunos bytes del programa objeto sean interpretados como caracteres de control, en la que se indica el final de un registro con un byte que contiene un 00 hexadecimal, es inapropiada para usar con un programa objeto binario

EJEMPLOS DE CARGADORES Y LIGADORES REALES

Editor de Ligado del Sistema/370

El formato de los programas objeto manejado por el editor de ligado del Sistema/370 es muy parecido al analizado para SIC/XE.

El programa de salida del editor de ligado se llama módulo de carga, y puede cargarse en la memoria para su ejecución, y suele contener suficiente información para permitir que el editor de ligado los reprocese. El usuario tiene la posibilidad de especificar que un módulo de carga sea “no editable”, en cuyo caso puede omitirse gran parte de la información de control, para producir un módulo de carga más pequeño.

El editor de ligado 370 puede manejar programas de superposiciones, con diversas características extendidas. En cada segmento puede haber varios puntos de entrada. Para manejar esta característica, el editor de ligado crea automáticamente tablas de entradas en todos los segmentos que contienen una llamada que puede causar superposiciones.

El proceso de superposiciones tiene lugar automáticamente al llamar a un segmento.

La mayoría de los sistemas 370 disponen de un cargador ligador, así como de un editor de ligado. El cargador ofrece menos opciones y posibilidades que las que presenta el editor de ligado. Si no se necesitan las funciones especializadas del editor de ligado, por razones de eficiencia se recomienda utilizar el cargador.

 


 

5.-QUE ES EL CÓDIGO FUENTE          

El código fuente es un conjunto de líneas de código que conforman un bloque de texto que normalmente genera otro código mediante un compilador o intérprete para ser ejecutado por una computadora.

Normalmente se refiere a la programación de software. El programador escribe el código fuente en el lenguaje de programación elegido. Posteriormente en un proceso de compilación el código fuente se traduce en código objeto

 

Etapas en la realización de programas:

imagen:fuente.png

A diferencia del código objeto, el código fuente es texto simple, capaz de ser leído por cualquier editor de textos y lo que es más importante, entendible por cualquier persona, siempre y cuando sepa algo de programación. En él están escritos los pasos que deberá realizar la computadora, según la sintaxis de un lenguaje de programación. Tener el código fuente es vital si se necesita modificar un programa.

El término de código fuente también se usa para el código de otros lenguajes, como los de marcado de textos, como el HTML, que posteriormente son interpretados por un programa especializado, en este caso el navegador web, para su lectura.

 

pag.principal
 

6.-PROGRAMACIÓN

Se llama programación a la creación de un programa de computadora, un conjunto concreto de instrucciones que una computadora puede ejecutar. El programa se escribe en un lenguaje de programación, aunque también se pueda escribir directamente en lenguaje de máquina, con cierta dificultad. Un programa se puede dividir en diversas partes, que pueden estar escritas en lenguajes distintos. Software es el sustantivo que denomina a los programas y datos de computadora.

programación es una técnica estándar de comunicación que permite expresar las instrucciones que han de ser ejecutadas en una computadora. Consiste en un conjunto de reglas sintácticas y semánticas que definen un lenguaje informático.

Aunque muchas veces se usa lenguaje de programación y lenguaje informático como si fuesen sinónimos, no tiene por qué ser así, ya que los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como, por ejemplo, el HTML.

Un lenguaje de programación permite a un programador especificar de manera precisa: sobre qué datos una computadora debe operar, cómo deben ser estos almacenados y transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico.

Un programa escrito en un lenguaje de programación necesita pasar por un proceso de compilación, es decir, ser traducido al lenguaje de máquina, o ser interpretado para que pueda ser ejecutado por el ordenador.

 

pag.principal
 

7.-PROGRAMACIÓN MODULAR  

¿Qué es programación modular?

Uno de los métodos más conocidos para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de ellas llegamos a la solución. Esta técnica se usa mucho en programación ya que programar no es más que resolver problemas, y se le suele llamar diseño descendente, metodología del divide y vencerás o programación top-down.

Es evidente que si esta metodología nos lleva a tratar con subproblemas, entonces también tengamos la necesidad de poder crear y trabajar con subprogramas para resolverlos. A estos subprogramas se les suele llamar módulos, de ahí viene el nombre de programación modular. En Pascal disponemos de dos tipos de módulos: los procedimientos y las funciones.

Veamos un ejemplo de cómo emplear el diseño descendente para resolver un problema. Supongamos que un profesor quiere crear un programa para gestionar las notas de sus alumnos. Quiere que dicho programa le permita realizar tareas tales como asignar notas, cambiar notas, ver las notas según distintas calificaciones, etc. A continuación tines un esquema que representa una de las posibles divisiones del problema en módulos.
 

Un aplicación escrita en C puede estar compuesta de múltiples módulos, cada uno encargado de una función (manejo de archivos, gestión de errores, visualización de datos, interfaz de usuario, etc.)
Un módulo es un conjunto de funciones, tipos de datos, variables, etc., en definitiva, recursos que pueden utilizar otros módulos.
Cada módulo es un fichero fuente de extensión .c que se compila por separado.

PAG.PRINCIPAL


 

8.-PROGRAMACIÓN ORIENTADA A OBJETOS  

INTRODUCCION

Actualmente una de las áreas más candentes en la industria y en el ámbito académico es la orientación a objetos. La orientación a objetos promete mejoras de amplio alcance en la forma de diseño, desarrollo y mantenimiento del software ofreciendo una solución a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software: la falta de portabilidad del código y reusabilidad, código que es dificil de modificar, ciclos de desarrollo largos y tecnicas de codificacion no intuituvas.

Un lenguaje orientado a objetos ataca estos problemas. Tiene tres características basicas: debe estar basado en objetos, basado en clases y capaz de tener herencia de clases. Muchos lenguajes cumplen uno o dos de estos puntos; muchos menos cumplen los tres. La barrera más difícil de sortear es usualmente la herencia.

El concepto de programación orientada a objetos (OOP) no es nuevo, lenguajes clásicos como SmallTalk se basan en ella. Dado que la OOP. se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolución del problema se realiza en términos de objetos, un lenguaje se dice que está basado en objetos si soporta objetos como una característica fundamental del mismo.

 

El elemento fundamental de la OOP es, como su nombre lo indica, el objeto. Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización.

Esta definición especifica varias propiedades importantes de los objetos. En primer lugar, un objeto no es un dato simple, sino que contiene en su interior cierto número de componentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de una organización jerárquica o de otro tipo.

 

ESTRUCTURA DE UN OBJETO

 

Un objeto puede considerarse como una especie de cápsula dividida en tres partes:

 

1 - RELACIONES

2 - PROPIEDADES

3 - METODOS

 

Cada uno de estos componentes desempeña un papel totalmente independiente:

Las relaciones permiten que el objeto se insterte en la organización y están formadas esencialmente por punteros a otros objetos.

Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organización y tiene valores que dependen de la propiedad de que se trate. Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organización.

Los métodos son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código) que el objeto es capaz de ejecutar y que también pone a disposición de sus descendientes a través de la herencia.

 

 

Encapsulamiento y ocultación

 

Como hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos y programas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente en una cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales en la OOP.

Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso los programadores conozcan cómo está distribuída la información o qué información hay disponible. Esta propiedad de los objetos se denomina ocultación de la información.

Esto no quiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que las peticiones de información a un objeto. deben realizarse a través de mensajes dirigidos a él, con la orden de realizar la operación pertinente. La respuesta a estas ordenes será la información requerida, siempre que el objeto considere que quien envía el mensaje está autorizado para obtenerla.

El hecho de que cada objeto sea una cápsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organización, o incluso a otra organización totalmente diferente que precise de él. Si el objeto ha sido bien construído, sus métodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que la OOP sea muy apta para la reutilización de programas.

 

Organización de los objetos

 

En principio, los objetos forman siempre una organización jerárquica, en el sentido de que ciertos objetos son superiores a otros de cierto modo.

Existen varios tipos tipos de jerarquías: serán simples cuando su estructura pueda ser representada por medio de un "arbol". En otros casos puede ser más compleja.

 

En cualquier caso, sea la estructura simple o compleja, podrán distinguirse en ella tres niveles de objetos.

-La raíz de la jerarquía. Se trata de un objeto único y especial. Este se caracteríza por estar en el nivel más alto de la estructura y suele recibir un nombre muy genérico, que indica su categoría especial, como por ejemplo objeto madre, Raíz o Entidad.

-Los objetos intermedios. Son aquellos que descienden directamente de la raíz y que a su vez tienen descendientes. Representan conjuntos o clases de objetos, que pueden ser muy generales o muy especializados, según la aplicación. Normalmente reciben nombres genéricos que denotan al conjunto de objetos que representan, por ejemplo, VENTANA, CUENTA, FICHERO. En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase.

-Los objetos terminales. Son todos aquellos que descienden de una clase o subclase y no tienen descendientes. Suelen llamarse casos particulares, instancias o ítems

La Programación Orientada a Objetos (POO u OOP según siglas en inglés) es un paradigma de programación que define los programas en términos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar.

De esta forma, un objeto contiene toda la información, (los denominados atributos) que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases (e incluso entre objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos). A su vez, dispone de mecanismos de interacción (los llamados métodos) que favorecen la comunicación entre objetos (de una misma clase o de distintas), y en consecuencia, el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separan (ni deben separarse) información (datos) y procesamiento (métodos).

Dada esta propiedad de conjunto de una clase de objetos, que al contar con una serie de atributos definitorios, requiere de unos métodos para poder tratarlos (lo que hace que ambos conceptos están íntimamente entrelazados), el programador debe pensar indistintamente en ambos términos, ya que no debe nunca separar o dar mayor importancia a los atributos en favor de los métodos, ni viceversa. Hacerlo puede llevar al programador a seguir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen esa información por otro (llegando a una programación estructurada camuflada en un lenguaje de programación orientado a objetos).

Esto difiere de los lenguajes imperativos tradicionales, en los que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. Los programadores de lenguajes imperativos escriben funciones y después les pasan datos. Los programadores que emplean lenguajes orientados a objetos definen objetos con datos y métodos y después envían mensajes a los objetos diciendo qué realicen esos métodos en sí mismos.

Algunas personas también distinguen la POO sin clases, la cual es llamada a veces programación basada en objetos.

Pág. principal


 

UNIDAD 2

El Concepto de Clase

Los objetos en C++ son abstraídos mediante una Clase. Según el paradigma de la programación orientada a objetos un objeto consta de:

  1. Métodos o funciones
  2. Variables Miembro

Un ejemplo de una clase

class Punto
{
// Opcional pero recomendado, ya que por defecto los miembros son 'private'.
private:     
        // Variable miembro privada
        int id;
protected:
        // Variables miembro protegidas
        int x;
        int y;
public:
        // Constructor
        Punto();
        // Destructor
        ~Punto();
        // Funciones miembro o metodos
        int ObtenerX();
        int ObtenerY();
};

 

CLASE

Las clases son declaraciones o abstracciones de objetos, lo que significa, que una clase es la definición de un objeto. Cuando se programa un objeto y se definen sus características y funcionalidades, realmente se programa una clase.

Una clase es un contenedor de uno o más datos (variables o propiedades miembro) junto a las operaciones de manipulación de dichos datos (funciones/métodos). Las clases pueden definirse como estructuras (struct), uniones (union) o clases (class) pudiendo existir diferencias entre cada una de las definiciones según el lenguaje.

La sintaxis típica de una clase es:

class Nombre { 
    // Variables miembro (habitualmente privadas)
    miembro_1; //lista de miembros 
    miembro_2; 
    miembro_3; 

    // Funciones o métodos (habitualmente públicas)
    funcion_miembro_1( ); // funciones miembro conocidas 
    funcion_miembro_2 ( ); // funciones como métodos 

    // Propiedades (habitualmente públicas)
    propiedad_1;
    propiedad_2;
    propiedad_3;
    propiedad_4;
}

Las clases habitualmente se denotan con nombres abstractos como Animal, Factura... aunque también pueden representar procesos u acciones como DarAlta

Métodos en las clases

Implementan la funcionalidad asociada al objeto. Los métodos son el equivalente a las funciones en los lenguajes estructurados. Se diferencian de ellos en que es posible acceder a las variables de la clase de forma implícita.

Cuando se desea realizar una acción sobre un objeto, se dice que se le manda un mensaje invocando a un método que realizará la acción.

Habitualmente, los métodos suelen ser verbos.

pág.principal


 

·OBJETOS.

Un objeto es una representación detallada, concreta y particular de un "algo". Tal representación determina su identidad, su estado y su comportamiento particular en un momento dado.

La identidad de un objeto le permite ser distinguido de entre otros y esto se da gracias al nombre que cada objeto posee.

El estado de un objeto es el conjunto de valores concretos que lo caracterizan en un momento dado, como peso, color, precio, etc.

El comportamiento define un conjunto de funciones que el objeto es capaz de llevar a cabo. Tales funciones pueden estar relacionadas entre sí, modificar el estado del objeto o invocar funcionalidades de otros objetos, entre muchas otras cosas más.

Una Clase se define como la generalización de un objeto en particular. Es decir, una clase representa a una familia de objetos concretos.

De lo anterior, podemos decir que una instancia de una clase es siempre un objeto en particular.

Ejemplo

Podemos tener, por ejemplo, una clase denominada Perro con determinadas propiedades y comportamientos. Una vez creada dicha clase podemos crear una instancia de la misma llamada "Fido" que tendrá ciertas propiedades específicas y los comportamientos de dicha clase.

Sin hacer referencia a ningún lenguaje de programación en particular (algo así como seudocódigo), podríamos tener definido lo siguiente:

 definir clase Perro:
    propiedad sexo en {macho, hembra}
    propiedad color en {blanco, marrón, negro, mixto}
    propiedad cansancio en (nada, poco, moderado, mucho, exhausto)
         ... otras propiedades ...
    método paseo() devuelve cansancio
    método quieto() devuelve nada
    método muertito() devuelve nada
    método comer(Comida) devuelve nada
         ... otros comportamientos ...

crear Fido:
 método buscar() devuelve rama
 propiedad vacunas colección
 Fido.sexo = macho
 Fido.color = marrón

crear Princesa:
 Princesa.sexo = hembra
 Princesa.color = blanco
 Princesa.nombre = alma 

Éste ejemplo se limita a ser ilustrativo. Fido y Princesa como instancias son totalmente independientes una de la otra; sin embargo, cualquier cambio que se le haga a la clase principal afectará a los objetos correspondientes (herencia).

Pág. principal


 

·MENSAJES.

Los mensajes de programación (programación: medición del tiempo y secuencia de las tareas dentro de un proyecto. Una programación se compone principalmente de tareas, dependencias entre tareas, duraciones, delimitaciones e información del proyecto en función del tiempo.), que se muestran de manera predeterminada, proporcionan consejos útiles para resolver problemas de la programación. Por ejemplo, Microsoft Office Project 2003 le puede avisar si asigna un recurso (recursos: personas, equipamiento y material que se utilizan para completar las tareas de un proyecto.) a una tarea (tarea: actividad con un comienzo y un fin. Los planes de proyectos se componen de tareas.) después de la fecha de fin (fecha de fin: fecha en la que está programado que se complete una tarea. Esta fecha se basa en la fecha de comienzo, la duración, los calendarios, las fechas de tareas predecesoras, las dependencias entre tareas y las delimitaciones de la tarea.) de la misma.

pág. principal


 

· METODOS

Utilizado principalmente en programación orientada a objetos, el término se refiere a las porciones de código asociadas exclusivamente con una clase (se los denomina entonces métodos de clase o métodos estáticos) o con un objeto (en este caso métodos de instancia). Análogamente a los procedimientos en los lenguajes imperativos, un método consiste generalmente de una serie de sentencias para llevar a cabo una acción, un juego de parámetros de entrada que regularán dicha acción y, posiblemente, un valor de salida (o valor de retorno) de algún tipo. El propósito de los métodos es el de proveer un mecanismo para acceder (leer o modificar) los datos privados que se encuentran almacenados en un objeto o clase.

Un método debe de mantener el invariante del objeto al que está asociado asumiendo también que éste es válido cuando el método es invocado. A este efecto, se acude a precondiciones para regular los parámetros del método y postcondiciones para regular su salida (en caso de tenerla). Si alguna de las precondiciones o postcondiciones es falsa el método genera una excepción. Si el estado del objeto no satisface la invariante de su clase al comenzar o finalizar un método, se considera que el programa tiene un error de programación.

La diferencia entre un procedimiento (generalmente llamado "función" si devuelve un valor) y un método es que éste último, al estar asociado con un objeto o clase en particular, puede acceder y modificar los datos privados del objeto correspondiente de forma tal que sea consistente con el comportamiento deseado para el mismo. Así, es recomendable entender a un método no como una "secuencia de instrucciones" sino como "la forma en que el objeto es útil" (el método para hacer su trabajo). Por lo tanto, podemos considerar al objeto como el pedido a un objeto para que realice una tarea determinada o como la vía para enviar un mensaje al objeto y éste reacciona acorde a dicho mensaje.

Nota: este artículo fue traducido de su versión en inglés

 

· EJEMPLOS


 

Tipos de métodos

Como ya se mencionó, los métodos de instancia están relacionados con un objeto en particular, mentras que los métodos estáticos o de clase (también denominados métodos compartidos) están asociados a una clase en particular. En una implementación típica, a los métodos de instancia se les pasa una referencia oculta al objeto al que pertenecen, comúnmente denominada this o self (referencias a sí mismo por sus significados en inglés), para que puedan acceder a los datos asociados con el mismo. Un ejemplo típico de un método de clase sería uno que mantuviera la cuenta de la cantidad de objetos creados dentro de esa clase.

Los constructores son métodos de instancia especiales llamados automáticamente cuando se crea una instancia de alguna clase. En Java y C++ se distinguen por tener el mismo nombre de la clases a la que están asociados.

Los métodos de acceso son un tipo de método normalmente pequeño y simple que se limita a proveer información acerca del estado de un objeto. Aunque introduce una nueva dependencia, la utilización de métodos es preferida a acceder directamente a la información para proveer de una nueva capa de abstracción (programación orientada a objetos). Por ejemplo, si una clase que modela una cuenta bancaria provee de un método de acceso "ObtenerBalance()" en versiones posteriores de la clase se podría cambiar el código de dicho método substancialmente sin que el código dependiente de la clase tuviese que ser modificado (un cambio sería necesario siempre que el tipo de dato devuelto por el método cambie). Los métodos de acceso que pueden cambiar el estado de un objeto son llamados, frecuentemente, métodos de actualización ó métodos de mutación; a su vez, los objetos que proveen de dichos métodos son denominados óbjetos mutables.

pág. principal

UNIDAD 3


 

· OPERADORES

En todos los lenguajes de programación se utilizan operadores para efectuar operaciones aritméticas. Combinando las variables y constantes en expresiones aritméticas por medio de funciones adecuadas.
Una expresión es un conjunto de datos o funciones unidos por operadores aritméticos, los cuales se muestran en la siguiente tabla

Operador               Significado

+                      suma
-                         resta
*                        multiplicación
/                         división
^                         potencia
mod                 modulo

 

Operadores Lógicos

En ocasiones en los programas se necesitan realizar comparaciones entre distintos valores, esto se realiza utilizando los operadores relaciones, los cuales se listan a continuación:
 

Operador   Significado

<                Menor que
>                Mayor que
<=                Menor o igual que
>=                Mayor o igual que
=                Igual a
<>                Distinto a, diferente de

 

Expresiones y operadores.

Los distintos operadores permiten formar expresiones tanto aritméticas como lógicas. Los operadores aritméticos y lógicos son:
 

+, - suma, resta
++, -- incremento, decremento
*, /, % multiplicación, división, módulo
>>, << rotación de bits a la derecha, izquierda.
& AND booleano
| OR booleano
^ EXOR booleano
~ complemento a 1
! complemento a 2, NOT lógico
==, != igualdad, desigualdad
&&, || AND, OR lógico
<, <= menor, menor o igual
>, >= mayor, mayor o igual
 

 

pág. pricipal

·CORRER UN PROGRAMA EN DEV-C++

#include <cstdlib>                                                               
#include <iostream>
using namespace std;

class general
{
private:
int num,i,saber;

public:

void pedir()
{
cout<<"Teclee numero: ";
cin>>num;
}

void ciclo()
{
for(i=num;i>=1;i--)
{
saber=i%2;
if(saber!=1)
cout<<i<<endl;
}

}
};


int main(int argc, char *argv[])
{
general funk;
funk.pedir();
funk.ciclo();

system("PAUSE");
return EXIT_SUCCESS;
}
 

otro programa de DEV-C++

 

#include <cstdlib>
#include <iostream>

using namespace std;
class concatena
{
private:
string cad1,cad2,cad3,cad4,cad5,cad6;
public:
void leer();
void unir();
void mostrar();
};
void concatena::leer()
{
cout<<"teclea una cadena:";
cin>>cad1;
cout<<"tecla otra cadena:";
cin>>cad2;
cout<<"tecla otra cadena:";
cin>>cad4;
cout<<"tecla otra cadena:";
cin>>cad5;
cout<<"teclea otra cadena:";
cin>>cad6;
}
void concatena::unir()
{
cad3=cad1+" "+cad2+" "+cad4+" "+cad5+" "+cad6;
}
void concatena::mostrar()
{
cout<<cad3<<endl;
}

int main(int argc, char *argv[])
{
concatena palabra;
palabra.leer();
palabra.unir();
palabra.mostrar();
system("PAUSE");
return EXIT_SUCCESS;
}


pag.principal

·AQUÍ EMPIEZA EL TUTORIAL DE C++ (STL)

 

 

Corre un Programa en DEV C++

bueno cuando una vez ya terminado el programa se aprieta la tecla F9, para ver si no ay errores una vez que no halla te da el programa, o si no tienes ni un error puedes correr el programa con la combinación Alt-F9.

 

   Anexos

Definiciones

    Funciones

Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan un valor de salida o valor de retorno; aunque tanto unos como el otro pueden no existir.

Tal vez sorprenda que las introduzca tan pronto, pero como son una herramienta muy valiosa, y se usan en todos los programas C++, creo que debemos tener, al menos, una primera noción de su uso.

Al igual que con las variables, las funciones pueden declararse y definirse.

 

 

    Declaración

Una declaración es simplemente una presentación, una definición contiene las instrucciones con las que realizará su trabajo la función.

  Estructura de Datos

   1.- Pilas

Es un tipo especial de lista abierta en la que sólo se pueden insertar y eliminar nodos en uno de los extremos de la lista. Estas operaciones se conocen como "push" y "pop", respectivamente "empujar" y "tirar". Además, las escrituras de datos siempre son inserciones de nodos, y las lecturas siempre eliminan el nodo leído.

Estas características implican un comportamiento de lista LIFO (Last In First Out), el último en entrar es el primero en salir.

El símil del que deriva el nombre de la estructura es una pila de platos. Sólo es posible añadir platos en la parte superior de la pila, y sólo pueden tomarse del mismo extremo.

  2.- Arreglos

Para pasar un arreglo completo como parametro a un procedimiento a una función solo se manda el nombre del arreglo sin corchetes e indices, en el procedimiento o función que recibe solo se declara un arreglo del mismo tipo y se puede usar el mismo o diferente nombre del arreglo sin corchetes e indices.

Sim embargo es conveniente aclarar, que a diferencia de variables escalares normales, c++pp no genera una nueva variable en memoria ni tampoco copia los datos al arreglo que recibe, en su lugar cpp sigue usando los datos que estan en el arreglo original, es por esta razón que cambios que se le hagan a los datos del arreglo que recibe realmente se esta haciendo al arreglo original.

Es de recordar que los cambios que le hagan al arreglo dentro de la función se reflejaran en el arreglo original, es por esto que si se quiere modificar un arreglo en una función no hay necesidad de regresar ningún valor.

     3.- Colas

Las colas son una estructura de datos similar a las pilas. Recordemos que las pilas funcionan en un depósito en donde se insertan y se retiran elementos por el mismo extremo. En las colas sucede algo diferente, se insertan elementos por un extremo y se retiran elementos por el otro extremo. De hecho a este tipo de dispositivos se les conoce como dispositivos ``fifo'' (first in, first out) porque funcionan como una tubería, lo que entra primero por un extremo, sale primero por el otro extremo.

En una cola hay dos extremos, uno es llamado la parte delantera y el otro extremo se llama la parte trasera de la cola. En una cola, los elementos se retiran por la parte delantera y se agregan por la parte trasera.

UN EJEMPLO DE DECLARACIÓN DE CLASE

 Declaración de las clases

 Sintaxis

Class_nombre_clase

{

Lista de funciones y datos (métodos)

Propiedades (variables)

};

 

NOTA:

 

 

v Las variables no se pueden iniciazar dentro de una clase.

v Se debe especificar si la interfaz va a ser pública o privada

  

 

 Programa que pida 2 números y luego lo sume

 

# include <iostream>

Usignamespece std;

Class suma

{

Public:

Int n1, n2;

Void leer ();

Void suma ();

Void mostrar ();

 Private:

     Int res;

}

Void suma:: leer ()

{

Cout << “primer numero:”;

Cin>> n2;

}

Void suma:: mostar ()

{

res =n1+n2;

}

Void suma:: mostrar ()

{

Cout << “el resultado es: “<< res <<endl;

}

Int main ()

{

Suma realiza;

};

Int main ()

{

Suma realize;

realize.leer ();

realize.sumar ();

realiza.mostrar ();

return 0;

}

 

 MANEJO DE CADENAS:

Getline: es una función que permite a la  clase cin y me permite leer una cadena completa de caracteres y no solamente una palabra.

 

 

Su sintaxis es:

 

Cin.gentline>>cadena;

Cin>> nombre;  guarda cadena

String nombre

 

Ejemplo:

Programa que permite leer una cadena de caracteres

 

# include < iostream>

Using namespace std;

String cadena;

Int main ()

{

Cout <<” teclea una línea de caracteres :”<<endl;

Cin.gentline>>cadena;

Cout<< “la cadena tecleada fue:” <<cadena <<endl;

Return 0 ;

}

 

 

Conceptos básicos< ctype>

 

Istolower ():   Si el carácter leído es minúscula

 

Istouper ()   : Si el carácter leído es mayúscula

 

Isdigil  (): si es un digito

 

Isaipha (): si es una letra de la…2(A…2)

 

 

Para declarar una  cadena de caracteres stl incorporo un tipo de dato para el mensaje de cadenas asimilada  al de visual basic o al de pascal. Es de tipo string el tipo string maneja varios métodos son:

 

v Length ()  retorna el tamaño de una cadena

v Substr () sustrae una subcadena de una cadena

vSubster (inicio, tamaño de la subcadena)

 

EJEMPLO:

 

 

 Class cad

{

Private:

String cadena;

Public:

Void leer();

Void size_cadena();

Void sustrae ();

Void compara ();

};

Void cad::leer()

{

Cout <<” teclea una cadena :”;

Cin >>cadena;

}

Void cad::size_cadena()

{

Count <<” el tamño\xa4o de la cadena es:”<<cadena.length()<<ende;

}

Void cad:: sustrae()

{

String(1);

(1)= cadena.subcadena es :”<<(1<<ende1;

}

Int main (int argc, cahr*argv [])

{

Cad x

x.leer();

x,size_cadena ();

x.sustrae();

}

 

 

 

CONSTRUCTORES

Es una función que no retorna ningun valor y que tampoco se llama o se imboca no se llama desde el main principal, su unica función es inicializar variables que pertenecen a una clase.

 

EJEMPLO

Si utilizamos una clase para leer 2 números y realizar su suma emplearíamos la sig. Clase

 

Class suma {

Private:

Int n1, n2;

Public:

Void leer ();

Void sumar ();

Void mostrar ();

};

Si intento inicializar las variables miembro de la clase de la manera normal:

 

Class suma

{

Private:

Int n1=0, n2 =0;

Public:

Void leer ();

Void sumar ();

Void mostrar ();

};

LO ANTERIOR GENERARIA UN ERROR DE COMPILACIÓN

 

Para poder inicializar las variables necesito útilizar un constructor

 

Funciones Miembro

Función miembro es aquella que está declarada en ámbito de clase. Son similares a las funciones habituales, con la salvedad de que el compilador realizara el proceso de Decoración de nombre (Name Mangling en inglés): Cambiara el nombre de la función añadiendo un identificador de la clase en la que está declarada, pudiendo incluir caracteres especiales o identificadores numéricos. Además, las funciones miembro reciben implícitamente un parámetro adicional: El puntero this, que referencia al objeto que ejecuta la función.

Las funciones miembro se invocan accesando primero al objeto al cual refieren, con la sintaxis: myobject.mymemberfunction().

Constructores

Son unos métodos especiales que se ejecutan automáticamente al crear un objeto de la clase. En su declaración no se especifica el tipo de dato que devuelven, y poseen el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, puede haber varios constructores sobrecargados, aunque no pueden existir constructores virtuales.

Como característica especial a la hora de implementar un constructor, justo después de la declaración de los parámetros, se encuentra lo que se llama "lista de inicializadores". Su objetivo llamar a los constructores de los atributos que conforman el objeto a construir.

 

CONSTRUCTOR POR DEFECTO:

Es una función que se declara en la sección public de la clase y en el cual se le mandan parámetros en el que cada parámetro simboliza el valor con que se va inicializar la variable, el nombre de la clase

 

 

EJEMPLO:

Class suma

{

Private int n1, n2;

Public:

Suma (){ n1=0, n>=0};

Void leer ();

Void sumar ();

Void mostrar();

};

Punteros.

Cada variable de un programa tiene una dirección en la memoria del ordenador. Esta dirección indica la posición del primer byte que la variable ocupa. En el caso de una estructura es la suma del tamaño de cada uno de sus campos. Como en cualquier caso las variables son almacenadas ordenadamente y de una forma predecible, es posible acceder a estas y manipularlas mediante otra variables que contenga su dirección. A este tipo de variables se les denomina punteros.

Los punteros C son el tipo más potente y seguramente la otra clave del éxito del lenguaje. La primera ventaja que obtenemos de los punteros es la posibilidad que nos dan de poder tratar con datos de un tamaño arbitrario sin tener que moverlos por la memoria. Esto puede ahorrar un tiempo de computación muy importante en algunos tipos de aplicaciones. También permiten que una función reciba y cambie el valor de una variable. Recordemos que todas las funciones C únicamente aceptan parámetros por valor. Mediante un puntero a una variable podemos modificarla indirectamente desde una función cualquiera.

Un puntero se declara de la forma: tipo *nombre;

float	

PLANETA	
char	

vectores

Un vector puede definirse para almacernar cualquier tipo de dato (int,  float, entre otros), esta clase hace un uso extenso deoperadores sobrecargados, y con ella se pueden crear clases robustas que nos ayudan a manejar conjuntos de datos, de manera que podamos ordenarlos, llamarlos mediante subíndices, entre otras cosas que facilita su manipulación. clase vector. Es esto lo que se pretende con en el desarrollo de este trabajo. En la clase vector lo más importante es el método e "vector::operator[]()" que se encarga de retornar una referencia al  componente del vector. Los otros métodos sirven para hacer que crezca o disminuya de tamaño el vector.

Su trabajo consiste en especificar e implementar la clase "vector" que permita administrar un vector de tamaño variable aunque para el programador cliente parezca un arreglo.

class vector {

public:

 

 

Iteradores

Pueden considerarse como una generalización de la clase de "puntero". Un iterador es un tipo de dato que permite el recorrido y la búsqueda de elementos en los contenedores. Como las estructuras de datos (contenedores) son clases genéricas, y los operadores (algoritmos) que deben operar sobre ellas son también genéricos (funciones genéricas), Stepanov y sus colaboradores tuvieron que desarrollar el concepto de iterador como elemento o nexo de conexión entre ambos. El nuevo concepto resulta ser una especie de punteros que señalan a los diversos miembros del contenedor (punteros genéricos que como tales no existen en el lenguaje).

 

 

VARIABLES

    Una variable es un espacio que podemos reservar el cual se le puede asignar diferentes valores según nos convenga.

Para definir una variable siempre necesitaremos un nombre con el que nos referimos a ella durante nuestro “programa” seguido de dos puntos y a continuación el tipo de variable que utilizamos, en nuestro caso texto o numero.

DECLARACIÓN

 

Para inicializar una variable, poner un valor inicial que mas tarde podemos modificar, lo haremos de la siguiente forma.

  1. numérica: para inicializar una variables de tipo numérica lo único que se tiene que hacer es dar nombre a la variables que hemos definido anteriormente, seguido de un (=) y el valor, en este caso es un numero, con el que deseemos inicializar.
  2. texto: para inicializar una variable tipo texto lo único que tenemos que hacer es dar un nombre a la variable que hemos definido anteriormente, seguido de un igual (=) y el valor, en este caso caracteres, con el que deseemos inicializar la variable, pero entre comillas.

 

TIPOS DE VARIABLE

 

Variables primitivas: almacenan datos numéricos, valores lógicos o caracteres.

Tipo entero: son variables que almacenan números enteros. Se pueden dividir en los siguientes tipos: byte, short, int, log.

Tipo real o flotante: son variables que almacenan datos numéricos con decimales como: flota, double, dos posibles valores: trae o false.

Tipo Lógico o booleanas: son variables que almacenan caracteres individuales (letra, signo, número, etc)

Casting o transformaciones de tipo: el casting es un procedimiento para transformar unas variables primitivas de un tipo a otro, o transforma un objeto  de una clase a otra clase siempre y cuando haya una relación de herencia entre ambos.

Tipos básicos y variables.

Los tipos de datos básicos definidos por C son caracteres, números enteros y números en coma flotante. Los caracteres son representados por char, los enteros por short, int, long y los números en coma flotante por float y double. Los tipos básicos disponibles y su tamaño son:

           

char

Carácter

short

Entero corto con signo

int

Entero con signo

unsigned

Entero sin signo

long

Entero largo con signo

float

Flotante simple

double

Flotante doble

 

Variables referenciales: asociadas a objetos o instancias de una clase

 

NOTA:

v Las variables no se pueden iniciazar dentro de una clase.

v Se debe especificar si la interfaz va a ser pública o privada

ostreams / istreams

Cabe destacar las clases basic_ostream y basic_stream, y los objetos cout y cin, pertenecientes a estas clases, respectivamente. Proporcionan la entrada y salida estándar de datos (teclado/pantalla). También está disponible cerr, similar a cout, usado para la salida estándar de errores. Estas clases tienen sobrecargados los operadores << y >>, respectivamente, con el objeto de ser útiles en la inserción/extracción de datos a dichos flujos. Son operadores inteligentes, ya que son capaces de adaptarse al tipo de datos que reciben, aunque tendremos que definir el comportamiento de dicha entrada/salida para clases/tipos de datos definidos por el usuario. Por ejemplo:

ostream& operator<<(ostream& fs,const Punto& punto)
{
  fs << punto.x << "," << punto.y;
  return fs;
}

 

Funciones.

Un programa C está formado por un conjunto de funciones que al menos contiene la función main. Una función se declara con el nombre de la función precedido del tipo de valor que retorna y una lista de argumentos encerrados entre paréntesis. El cuerpo de la función está formado por un conjunto de declaraciones y de sentencias comprendidas entre llaves. Veamos un ejemplo de utilización de funciones:

#include <stdio.h>

#define	VALOR	5

#define	FACT	120



int fact_i ( int v )

{

	int r = 1, i = 0;



	while ( i <= v ) {

		r = r * i;

		i = i + 1;

	}

	return r;

 

 

Pasos para acceder a dev_c++

 

Primero activas el menú inicio

Después eliges todos los programas

Después eliges bloodshed dev_c++

Despues eliges dv c++

De último séte aparece la siguiente imagen

 Despues das clik en archivo

Le das clik en nuevo

Se te aparece la siguiente imagen 

 Despues le das clik en consolé de aplicación

Signas un nombre al ejercicio

Es la siguiente imagen

 

 Despues le das aceptar se te apacera la imagen de guardar como.

En el cual tú lo guardas en donde tu quieras, le asignas un nombre, de ultimo le das guardar

 

 

 

 De último abres el programa de dv c++

Ya una vez abierto la pantalla ya puedes programar

 

 

 una vez que ya terminaste tu programa preccionas F9 para copilar pero antes lo tienes que volver a guardar con otro nombre para que asi puedeas ver cuantos errores tienes 

 si ya lo guardeate s con otro nombre lo siguente es que te apararesera una nueva ventana donde veras que esta cargando y una vez llena ya puedes correr tu programa

 

 

 

 cuando termine de cargar te aparecera una pantalla negro osea como la siguiente y alla veras si tude que tu programa corra