c++

una persona que no tiene idea de informatica ni programación lo que ve es esto:

una interacion de un objeto con un humano, el humano le pregunta a la computadora y ella responde a sus mandatos, pero en si que hay dentro de todo este sistema?

primero que todo, hay una representacion de unos y ceros llamado lenguaje de maquina que se deriva de los voltajes altos y bajos que se generan en el hardware

lo que hace un programador es escribir un archivo en un lenguaje como el c++ , este se llama el codigo fuente, lo compila, osea el computador lo pasa a unos y ceros  y este genera un archivo objeto, ahora bien hay un interprete que entiende todo esos garabatos generados en el archivo objeto y  varios de estos se empaquetan en un archivo formando un programa utilizado por el ser humano

Despues de entender esto uno se pregunta ¿ que clases de programación existen?

se puede dividir inicialmente en tres de acuerdo a su evolución

programación de procesamiento

programación estructurada

programación orientada a objetos

el primero en un archivo se programaba con una serie de procedimiento haciendo uso de funciones

pero cada vez esto era muy grande, entonces se solucionó dividendola en partes  y uno hacia el llamado de otro según se necesitará

osea es donde apareció el concepto de modulo “modular”

luego se dieron cuenta que habia funciones iguales que se copiaban uno y otra vez en dichos modulos, entonces se preguntó en ese entonces por que no reutilzar funciones para distintas situaciones , entonces apareció la programación orientada a objetos.

ya entendido esto la pregunta como comenzar y la respuesta es crear el archivo con codigo fuente y este se puede realizar de dos formas

1 utilizando un IDE “un entorno de desarrollo integrado”

2 en un archivo de texto plano con extension .cpp  en el caso de c plus plus

luego de generado el codigo se compila, como yo uso el segundo y utilizo linux lo puedo hacer desde consola con el siguiente comando

g++  nombre.cpp  -o  nombrearchivo

el compilador  que yo utlizó es g++

este a mi me genera un archivo objeto llamado a.out,  ” usualmente es .obj” pero como en el comando yo especifique que en vez de llamarlo asi lo llamara con el nombre que yo digo con -o, ahora bien este se puede ejecutar  pues es como si fuera programación de procesamiento , pero si son varios los archivos objetos se es el caso de programación estrucutrada  y se  pueden enlazarce con el “conector”

luego de saber estos conceptos  ahora si voy a generar un archivo con codigo fuente pero antes hay que saber como se compone:



  • directivas de preprocesamiento
  • declaraciones globales
  • funciones definidas por el usuario
  • funcion main

yo sigo este orden aunque en cada uno puede ir comentarios  para entender el programa

las DIRECTIVAS

le indica al compilador que primero revice algo  antes de compilarlo

puede suceder:

revisar sintaxis

incluir funciones de otros archivos,  es lo que llaman biblioteca y esta puede ser creadas o venir por defecto.

una libreria que se  utiliza mucho es <iostream>

la calocamos asi:

#include <iostream>;

esta permite utilizar la funcion de lectura y escritura con   cin y  cout

DECLARACIONES GLOBALES

son definiciones de variables y constantes que pueden ser utilizadas por cualquier funcion dentro del programa

su sintaxis

tipo var1,var2…;

tip var1=valor;

const tipo var1=valor;

por ejemplo

int edad;

double contador=0.0;

char nombre[30];

const double PI=3.1416;

FUNCIONES DEFINIDAS POR EL USUARIO y main

tipo nombre (parametros)

{

estatutos;

retorno;

}

un ejemplo que he sacado del curso de SENA virtual

double promedio(int a, int b, int c)

{

return (a+b+c)/3.0;

}

int main()

{

cout <<“el promedio es “<< promedio(4,5,7);

return 0;

}

se retorna a cero por que en la función le dijimos que el tipo era de caracter entero y se espera que devuelva un entero, pero igual funciona si le coloca 1,2,3,4 cualquier entero.

comentarios

su sintaxis puede ser

se comienza con // cuando el comentario es corto

o se puede delimitar un parrafo con  /* parrafo */

un ejemplo sencillo que realice del diario de peter class

en la declaraciones globales se mencionó sobre variables y constantes

hablando un poquito en profuncidad resalto la clasificación que le da el señor Jesus Conde de septimo continente la cual tiene la siguiente licencia

en las constantes:

las literales son las que tienen un valor escrito directamente por ejemplo

const double PI=3.1416;

las constantes simbolicas seria como si ese valor se la asignaramos a una variables y colocasemos esta varibles como constante

PI= 3.14.16;

const  numPI = PI;

las constantes emnumeradas nos permite tener un grupo asociadas a una variable

enum colorprimarios  {amarillo,azul,rojo};

podemos mezclar

yo la llamaría enumeradas asociativas

enum colorprimario {amarillo=1,azul=2,rojo=3};

despues de las declaraciones globales nos vemos envuelto en las funciones pueden ser creadas por el usuario pero en si siempre hay una, la funcion main

antes de ver esto voy  a ver unos conceptos la cuales son:

las decisiones y los ciclos

tanto en programación como en la vida real cada instante esta rodeada de decisiones si vamos al supermercado decidimos marcas, precios, desde que nos levantamos según la hora decidimos que hacer…

aunque a veces esto es tan repetitivo que se vuelve un ciclos.

en la decision esta el estatuto IF

su sintaxis es:

if (condicion)

estatuto;

else

estatuto;

si son varios estatutos se cierra entre llaves

un ejemplo de SENA virtual es:

if (promedio >= 70)

cout << “aprovado”;

else

cout <<“desaprobado”;

pero puede haber varias opciones y por tal estan los if anidados

if (num > 0)

cout << “el numero es positivo”;

else

if (num ==0)

cout <<“el numero es cero”;

else

cout <<“el numero es negativo”;

pero que pasa si queremos varias  acciones  para un solo valor  no como hasta ahora se ha dicho que de una acción se desprender varios valores

se podria repetir el if   o  para mejor practicidad utilizar la etiqueta swith

ejemplo que pasaria si desearamos colocar rangos de 10 en 10 el promedio y darle un valor

se podria colacar

if (promedio < = 10 )

cout <<“muy mal”

if (promedio >10< =20)

cout << “todavia vamos mal”

….

o utilizar swith

la cual su sintaxis es

swith (variable)

{

case valor1:accion1; break;

case valor2:accion2; break;

….

defaut:acciondefecto;

};

esta encuentra una que sea cierta, si es asi se ejecuta y el break termina el proceso, si no llega al defaut y ejecuta esa accion.

CICLOS

while

while do

for

while  sintaxis

while (condicion)

{

estatutos;

}

se ejecuntan los estatutos mientras la condicion se cumple

ejemplo

se compila

se ejecuta

while do  sintaxis

do

{

estatutos;

}while(condicion);

se compila y se ejecuta

FOR sintaxis

for (inicializacion; condicion; accion)

{

estatutos;

}

se compila y se ejecuta

un ejercicio muy interesante

se compila y se interpreta

declaración y funciones

aunque en un archivo se pueden crear todas las funciones definidas por nosotros, la esencia de la evolucion es  la programación estrucutrada

la cual modulariza esto.

me gustaria resaltar esta parte de que dice el señor Jesus Conde en septimo continente.

en la funcion principal  “main “de un archivo  hace el llamado  de otras funciones donde se han invocado en las directivas de preprocesamiento con  include o tambien puede estar en el mismo archivo.

pero en si que es ?

en los cursos de SENA Virtual nos muestra un grafico interesante, me hace acordar cuando veia precalculo.

hay que tener en cuenta que parea hacer uso de una funcion esta tiene dos partes

declaracion de la funcion

llamada de la funcion

declaracion de una funcion

tipo nombre (lista de parametros)

{

declaración de variables locales

estatutos;

return valor;

}

llamada de la funcion

nombre (lista de parametros );

pero en este caso se dan los valores a los parametros

ejemplo

se compila y se interpreta



ummm pero ahora me surge un interrogante

variables globales

variables locales

y cual es su alcance?

las variables globales son declaradas con el proposito de ser util a cualquier funcion en el programa

las variables locales son declaradas con el proposito de ser util a una funcion en particular

dentro de estas hay un subtipo que es la varibles locales del for que como se imaginará solo es util a este ciclo en la funcion

en los cursos de SENA virtual  lo muestran con un grafico interesante

PROGRAMACION ORIENTADA A OBJETOS

que es?

Cuando era niño tenia una caja donde ponía todas las “cosas “, que me parecía que podrían ser útil algún día, temperas, juguetes que había destapado y ya no servían, objetos que me parecían bonitos, etc  hoy en día podría ser un cuarto útil donde colocamos todas esas mismas cosas pero mas acorde a nuestra edad, baterías, pedazos de materiales que nos sobraron en algunos trabajos, etc

pero llega un memento que es tan grande  esta caja que es difícil encontrar  lo que uno quiere y por eso desde niño uno decide separar esto en clases y ponerlo en distintas cajas

pero la pregunta ahora es como?

y lo que en ese entonces decidí fue separarlos de acuerdo a su función  y después de separarlos asi, separarlos de acuerdo a sus características, osea que si su función era la de pintar, luego fue separados por su color, clase (madera,pared, hoja etc)…..

ahora he separado algo así

bueno lo que hice fue crear clases de objetos de acuerdo a una funcionalidad,  herramientas, cd, recuerdos, objetos electrónicos, objetos de computador , luego puedo crear de acuerdo a esta funcionalidad, por ej, cd  de música, de información, etc,  herramientas de mecánica, electrónica, mantenimiento de computador etc y si por algún motivo me encuentro algo que encaje en una de ellas lo coloco ahí o creo otra.

cuando veo esta caja que es como una interfaz se viene a la cabeza verbos como pintar, arreglar, modificar osea algo como

caja cd   cd_informacion;

cd_informacion.instalar_sistema_operativo_xp();

esto es un mensaje que se le envía a la interfaz

de hecho no se que garabatos haya dentro del cd, solo con esto me permite encontrar una forma de instalar un sistema operativo, encontrando el cd apropiado y una receta.

en la programación orientada a objetos podemos diferenciar una clase por:

nombre de la clase

interfaz

datos ocultos “implementación”

luego se envía un mensaje que hace la petición de uno de sus métodos que se encuentran  en la interfaz y cuyo código se encuentra en la implementación

” instancia”

“se envía el mensaje ”

hay una opción que nos permite socializar y enviar mensajes antes de ser utilizadas,  osea  envía un mensaje apenas se instancia

” constructor ”

su nombre es el mismo que el nombre de la clase y no tiene definido un valor de retorno

haciendo el curso de c++ en sena virtual puedo destacar lo siguiente:

la interfaz en el curso la mencionan como prototipo y su formato es la siguiente:

class NombreClase
{
public:
// declaración de atributos y métodos públicos

private:
// declaración de atributos y métodos privados
};

luego viene la implementación :

tipo retorno NombreClase :: NombreMetodo (párametros)

{

estatutos;

retorno;

}

luego se instancia o define la clase         “se crean objetos según la interfaz de la clase”

NombreClase  NombreObjeto;            (el NombreObjeto es una variable)

se envia el mensaje:                                   “se tiene acceso a la parte publica de la interfaz ”

NombreObjeto.NombreMetodo (parámetros);

con el constructor se distanciaría y se colocaría parámetro si este tuviese parámetros

NombreClase NombreObjeto(parámetros);

ahora bien  en los cursos del señor Jesús Conde  destaco:

menciona dos elementos importantes en la interfaz de una clase que son:

variables miembro y funciones miembro que  en el argot de oop  sería  atributos y métodos  que en si son:

características, propiedades  (atributos)

acciones   (métodos)

la colecciones de funciones mas las colecciones de variables es lo que se llama declarar una clase, que en si es la interfaz de la clase

y es lo que mostré en la sintaxis del  prototipo  del curso de sena virtual,   a esto se le llama encapsulación.

por defecto la interfaz en una clase “class ” es privada y en una estructura “struct” es publica  a no ser que se especifique y es por tal que en el interfaz “prototipo” mostrado en la sintaxis hay dos partes una publica y otra privada

esto quiere decir que con la publica podemos trabajar fuera de la clase o estructura, osea cuando se hace la definición o se instancia y con la privada no, con esta solo se puede trabajar en la mismo clase o estructura, osea en la misma interfaz.

aquí ocurre algo interesante  y es la forma en como acceder a los miembros privados de la interfaz desde afuera de la clase por ejemplo  desde la función main(), “esto teniendo en cuenta que las atributos y métodos deben de ser privadas.”

y es lo que el señor Jesús Conde menciona como métodos accesores que es una función que esta en la parte publica de la interfaz y sirve de puente “interfaz ”  entre los miembros privados  y  lo externo a la clase .

la otra parte de la clase es la implementación,  que en si da el retorno  de la declaración en la interfaz

un ejemplo que el autor da: “Caballo Janto” en c++

lo compilamos  y lo ejecutamos y este es el resultado:

si hacemos uso de constructor

se espera que se coloque esto

NombreClase NombreObjeto(parámetros);

si no hacemos uso del constructor  se espera

NombreClase  NombreObjeto;            (el NombreObjeto es una variable)

se envia el mensaje:                                   “se tiene acceso a la parte publica de la interfaz ”

NombreObjeto.NombreMetodo (parámetros);

cuando no cambia el valor o el retorno de los metodos de la interfaz se hace uso de const asi:

tipo retorno nombreMetodo() const;

es utilizado cuando se quiere obtener un valor, no modificarlo, por  eso no tiene parametros

es interesante ver  que tambien se puede implementar los metodos en la misma interfaz, es lo que el autor llama metodo de clase inline

tipo_de_retorno nombreMetodo() {return atributo;}

tipo_de_retorno nombreMetodo() const { return atributo;}

otra forma de colocar ” inline” es en la implementacion cuando no esta especificado el atributo en un miembro privado en la interfaz

inline tipo_retorno NombreClase :: NombreMetodo()

{

return atributo;

}

un ejemplo tomado de septimo Continente  c++

 

los cursos en c++ de Sena virtual son tres niveles, aquí se encuentran

yo los hice y son interesanes, aprendí mucho.

 

 

Advertisements

2 Comments

    1. ! Es curiosa la pregunta ¡, Para este personaje “HACKER” no se trata de aprender a usar las herramientas ya que son
      herramientas.
      Aplica la Actitud y Aptitud como también la curiosidad de investigar cómo funcionan las cosas y como puede verse afectado frente a ciertas circunstancias.

      C++ es una herramienta así como el carpintero tiene el martillo, si lo aprendes tienes una competencia en el conocer pero no te servirá de nada si no
      tienes las competencias del Hacer y “SER”.

      Saludos.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s