hola,
no bajé tu exe por que ya se cual es el problema...
tienes deficiencias en los conceptos de POO, asi que esa va a ser la unica pregunta que dare respuesta, pues ademas no encuentra otras preguntas en el post.
POO es un paradigma de programación que nos permite hace una abstracción del mundo real y convertir esa abstracción en un componente, o pieza de software.
Anteriormente, en la porgramación en spagetti podiamos invertir muchas horas haciendo un prorama con muchos fragmentos de código, incluso teniamos muchos fragmentos que hacian exactamente lo mismo o cosas muy similares, por ejempo un programa como un video juego tenia las instrucciones de como dibujar y de como producir sonidos repetidas o casi iguales para todos los personajes, lo cual hacia la programación algo muy largo y dispendioso de hacer, pero principalmente imposible de entender si tu mismo no eras quien habia hecho el programa.
Luego llago la programación estructurada a poner algo de ordem agrupando miles de lineas de código dentro de funciones, donde se debia tratar al máximo que las funciones fueran reutilizadas dentro del programa...
todo parecia ir muy bien.. pero los programas cada vez eran más grandes asi que pasaban cosas como estas:
Cuanta de ahorros, cuenta corriente
Los archivos fuente donde estaban las operaciones de una cuenta de ahorros y los fuentes donde estaban las operaciones de las cuentas corrientes tenien funciones parecidas, es decir umm por ejemplo la funcion bloquear cuenta estaba en ambas y si tenia que hacer un programa que manejara cuentas de ahorro y cuentas corrientes pues haria algo como esto:
#include "cuantasA.h"
#include "cuantasC.h"
int main()
{
....?
...?
}
Como puedo hacer referecia a las operaciones de cuenta de ahorros o a las de cuenta corriente si ambas tienen el mismo nombre?, si fueran mis propios fuentes es simple... modificar los nombres de las operaciones... pero si son librerias que compre cada una por aparte y no tengo los fuentes?
que pasaría si cada libreria maneja constantes con el mismo nombre? o variables con el mismo nombre?...
Si tengo un enorme programa y quiero hacer uno nuevo que reutiliza miles de cosas que el anterior... quien me garantiza que las funciones que tome me vallan a servir si vienen de un programa diferente? como se que si tomo una libreria que se llame Ahorros voy a tener realmente solo las cosas que sirven para ahorros?
Estos y miles de miles de problemas más ya eran inmanejables asi que alguien se puso en la tarea de diseñar una froma de programar que me permitiera aislar un componente de otro, reutilizar los componentes y librarme de todos mis anteriores enrredos... asi nacio POO, que como veraz no tiene nada que ver con ventanas y cosas de un entorno grafico.. de hecho en lenguajes no Orientados a objetos como los lenguaje c, puedes hacer ventanas y botones y todo identico de como lo haces con un lenguaje orientado a objetos.
La idea es muy sencilla, imaginemos cun cuaderno,
que cosas se pueden decir de nuestro cuaderno pues podemos decirt:
*numero de paginas
*dibujo de la portada
*color de las hojas
*estilo de las hojas
*estilo de agrupamiento de hojas (grapado, argollado, anillado, etc)
*precio
*calidad del papel
*marca
*etc
que cosas se pueden hacer con un cuaderno? (solo co el cuaderno por el momento)
*abrir
*cerrar
*adelantar pagina
*atrasar pagina
*arrancar hojas
bien, pues nuetro cuaderno es un objeto, y cada una de las cosas que mencionamos que tenia el cuaderno son sus atributos y las cosas que puedo hacer copn el cuaderno son sus metodos.
Listo ahi ya esta nuestro 'objeto' cuaderno, veamoslo en una especia de pseudocodigo:
cuaderno
{
int numPag;
string imgPortada;
string colorHojas;
string estiloHojas;
string estiloAgrupaHojas;
long precio;
long calidadPapell;
string marca;
Abrir()
{
...
}
Cerrar()
{
...
}
AdelantarPagina()
{
...
}
AtrasarPagina()
{
...
}
ArrancarHojas()
{
...
}
}
Listo.. ahora fijate que nuestro cuaderno expresado asi aplica para cualquier cuaderno no para uno solo asi que lo que hicimos realmente aplica para representar cualquier cuaderno asiq eu es una plantilla.. en POO una plantilla se llama clase.
Bueno me salteare mucho tema....
Para el compilador saber cual es la clase que comienza un programa (en modo consola) requiere diferenciarla... bien él la diferencia buscando la clase que con tiene al metodo Main, asi que la clase que tenga al main es el inicio del programa.
public class miProg
{
public static void Main()
{
}
}
Tienes tu programa y vas a usar lo que hiciste en cuaderno para manejar tres cuadernos
public class miProg
{
public static void Main()
{
int numCuads;
cuaderno c1 = new cuaderno();
cuaderno c2 = new cuaderno();
cuaderno c3 = new cuaderno();
}
}
Que paso ahi?
bueno una clase es una plantilla a travez de la cual puedes crear diferentes objetos (el siguiente ejemplo aplica más para C# que para otros lenguajes) si escribes
int i
estas diciendo que i es un objeto y que este debe ser construido de acuerdo a la clase (plantilla) int, asi que i es un objeto tipo int. (en otros lenguajes no se puede concebir int como una clase sino simplemente es un tipo de dato)
asi que si hacemos
cuaderno c1;
estos creando un objeto c1 y este debe ser creado de acuerdo a la plantilla (clase) cuaderno.
A medida que profundices en POO te daras cuenta prque int i no requiere hacer
int i= new int i;
por el momento solo te digo que
cuaderno c1 = new cuaderno();
es decir realmente c1 es un contenedor de objetos del tipo cuaderno, pero aun no contiene ningun objeto, asi que
c1 = new cuaderno();
es colocar un objeto cuaderno dentro de su contenedor c1.
Ahora usemos lo que hay dentro de cada cuaderno:
public class miProg
{
public static void Main()
{
int numCuads;
cuaderno c1 = new cuaderno();
cuaderno c2 = new cuaderno();
cuaderno c3 = new cuaderno();
c1.numPag = 100;
c1.precio = 10.000;
c2.numPag = 100;
c2.precio = 10.000;
c3.numPag = 100;
c3.precio = 10.000;
c1.Abrir();
c2.Abrir();
c3.Abrir();
}
}
En fin espero que esto haya ayuda, para mas informacion te recomiendo los tutoriales con los que yo aprendi C# y mejoré notablemente en POO.
http://www.elguille.info/NET/cursoCSharpErik/index.htmY este que es nuevo pero se ve muy bueno.
http://www.elguille.info/colabora/NET2005/...rado/Indice.htm