C/Visual C - poo vs p. visual vs pe

 
Vista:
sin imagen de perfil
Val: 11
Ha aumentado su posición en 5 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

poo vs p. visual vs pe

Publicado por zzz (318 intervenciones) el 14/06/2005 05:28:05
Hi! quiero hacerles una pregunta, para ustedes que es mejor usar programacion orientada a objetos, programacion estructurada o programacion visual?

¿creen que es bueno aprender c o c++ en vez de aprender programaciòn visual?

yo he programado en los 3 tipos de programacion: programacion estructurada en c, programacion orientada a objetos en c++ y c++ builder y programacion visual en c++ Builder y visual basic, se que la programacion usa poo y de hecho cree componentes usando herencia en c++ builder y para mi esa es la unica utilidad de la herencia, o acaso uds. para realizar cualquier programa usan herencia y polimorfismo caracateristicas de la poo, no se les hace algo fastidioso tener que crear una funcion para cada dato miembro privado y tener que usar clases amigas para acceder a los datos privados de otra clase, no se les hace querer complicar mas las cosas, para mi es mejor usar una estructura en vez de una clase o usar una clase con datos miembros publicos aunque eso ya no tiene sentido, entonces para mi lo mejor es la programacion visual, yo digo que ya no vale la pena hacer programas en modo consola ¿o si? o ¿creen que la herencia y el polimorfismo es muy usado para programas normales (es decir que no sean sistemas operativos, compiladores, programas para dibujar, paqueteria como el office)? entonces tiene algùn sentido programar en c++ que es modo consola? dicen que c++ no esta limitado como visual basic pero si de limitaciones se trata pues entonces mejor programen en ensamblador ahi hay menos limitacines que en c o c++
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:poo vs p. visual vs pe (1)

Publicado por fernando.gomez (1603 intervenciones) el 14/06/2005 17:09:24
Bueno, primero hay que aclarar algunas cosas. La programación "visual", o mejor dicho, la programación gráfica no tiene nada que ver con la programación estructurada o la orientada a objetos. En C y C++ hay APIs para programación gráfica, tanto en Windows como en POSIX/Linux y otros. Por ejemplo, tenemos GTK+ y GNOME como programación estructurada en C, y KDE y Qt como programación orientada a objetos. Ambas librerías son para crear aplicaciones gráficas bajo Linux. En Windows, tenemos desde el API de Windows en C, hasta librerías más avanzadas como MFC o WTL. Así que como verás, la programación estructurada y orientada a objetos no están peleadas con la programación gráfica, sino todo lo contrario. ¿Quién te contó tal mentira de que C/C++ sólo son para consola? ¿No sabes acaso que Visual Basic fué hecho con C++ y una tecnología particular llamada COM?

Siguiente punto. Yo no solo programo con herencia todo el tiempo, sino que además empleo programación genérica. Es cosa de todos los días. Hay que entender que el poder de la P.O.O. es que agrega un valor de semántica muy grande. En vez de pensar como máquina (ejecutar sentencia tras sentencia, o función tras función) piensas como humano, es decir, clasificas los objetos y sus contenidos. Este valor de representar a una variable como un objeto, sobre el que además pueden operar una serie de métodos que sólo afectarán a éste es un apoyo semántico invaluable.

Por otro lado, no programas más que con C. Considera el siguiente ejemplo.

class CSol {
private:
double volumen;
double masa;

public:
void Alumbrar();
void Amanece(int Hora);
void Anochece(int Hora);
};

Ahora, esta sería su contraparte en C:

struct Sol {
double volumen;
double masa;
};

void Alumbrar(struct Sol* pSol, int Hora);
void Amanece(struct Sol* pSol, int Hora);
void Anochece(struct Sol* pSol, int Hora);

Como ves, las funciones las tienes que seguir poniendo, sólo que están desacopladas. Esto crea como consecuencia que una librería media llegue a tener cientos de funciones, en lugar de un par de descenas de clases.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:poo vs p. visual vs pe

Publicado por fernando.gomez (1603 intervenciones) el 14/06/2005 17:10:04
Eso sí, la P.O.O. obliga al programador a pensar, y esto es lo que luego nos cuesta mucho trabajo. El cambio de interfaz de una clase puede resultar perjudicial. Por ello, el problema más bien radica en diseñar el programa. Pero una vez que te tomas unas horas para modelar la solución, obtienes unos frutos valiosísimos.

Sin embargo hay programas donde ni siquiera vale la pena pensar. Piensa en un CGI, donde tomarás los valores de entrada de un formulario web, procesarás los datos y regresarás una salida de los mismos. Es un proceso donde no vale la pena modelar una solución orientada a objetos. Ahí es donde C aún cuenta con un nicho. Además, C es todavía muy empleado en sistemas Unix. En Windows, dada la complejidad que representa programar para este sistema operativo (debido a sus más de 5000 funciones) se han desarrollado librerías en C++ para facilitar y automatizar el desarrollo de aplicaciones. Por ejemplo, la creación de una ventana en Windows es un proceso que involucra al menos a diez funciones. Con MFC -por ejemplo- empleo la herencia y sólo sobreescribo la llamada a Create:

int CMiVentana::Create(/* blablabla */)
{
// inicializar las variables propias de mi ventana
// y las variables de la lógica de mi aplicación
...
// Crear la ventana:
CWnd::Create(/* blablabla */);
...
// Inicializar a los controles propios de la ventana
...
return TRUE;
}

En lugar de escribir varias funciones y varias decenas de líneas de código, la herencia viene al rescate.

En fin, primero tienes que conocer los lenguajes (¡sigo atónito con eso de que C++ es sólo para consola!) y conocer las tecnologías respectivas. Quizás si hubieses sabido que VB es un muy pequeño subconjunto de una tecnología desarrollada en C++ llamada COM, no habrías posteado el mensaje como lo hiciste.

Finalmente, claro que podemos emplear ensamblador. Sin embargo, perderíamos toda la potencia de un lenguaje de alto nivel, que nos proporciona una ayuda semántica (y ahorro de código) impresionante. Además, nos garantiza "cierta" portabilidad. La potencia de C/C++ es que puedes trabajar a un bajísimo nivel, casi rozando al procesador (p.e. memcpy, memmove, la familia de fopen, fclose, fwrite, fread y hasta puedes incrustar ensamblados con asm { } ) hasta poder crear potentes librerías que automaticen tareas y simplifiquen la creación de código, como WTL, o los grandes sistemas que imperan hoy en día.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 5 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

RE:poo vs p. visual vs pe

Publicado por zz (318 intervenciones) el 14/06/2005 20:19:56
cuando digo que c y c++ son solo para consola me refiero a que si quieres poner un botón no es tan fácil como en la programacion visual que solo arrastras el componente y ya, no, en c y c++ tienes que conocer las apis de windows o las librerias de linux, por si no lo sabias en c puedes usar las siguientes estructuras:

struct lista
{
int x;
int *sig;
void iniciar ();
void mostrar();
};

struct lista
{
private:
int x;
int *sig;
public:
void iniciar();
}

No necesariamente en c tienes que usar las funciones por aparte. usando el primer ejemplo estas usando poo pero no al 100%, ya que defines el objeto lista sus datos y sus funciones

Aparte en c++ para crear una ventana necesitas conocer mfc y las funciones que dices y en programacion visual es tan facil como agregar una nueva forma y te olvidas de todas las funciones de windows y asi no necesitas conocer mfc ni tampoco usas herencia ni tampoco creas programas de cientos de lineas de codigo

Se que la mayoria de los programas usados estan hechos en c o c++ pero no los realizo una persona ni fue poquito tiempo, se que visual basic esta limitado pero es un lenguaje que te facilita demasiado el trabajo

Es lo mismo querer usar ensamblador porque no estas limitado, que seguir complicandote la vida por despreciar la programacion visual que te ahorra el tener que usar funciones especiales de windows o linux para saber donde esta el mouse, como poner un botón, como poner un menu, , la programacion visual esta basada en eventos que para mi es lo mejor, solo ejecutas el codigo cuando tu quieres, y los componentes te ahorran mucho código, asi que si dices que al usar ensamblador pierdes toda la potencia de c y c++, para mi al seguir usando y defendiendo c++ estar desperdiciendo toda la potencia de la progrmacion visual, puedes usar visual c si visual basic no te gusta, y como visual c o c++ builder aún tienen c o c++ puedes seguir utilizando tus funciones del procesador.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:poo vs p. visual vs pe

Publicado por fernando.gomez (1603 intervenciones) el 14/06/2005 22:56:16
A ver, primero lo primero. El código que muestras:

struct lista
{
int x;
int *sig;
void iniciar ();
void mostrar();
};

struct lista
{
private:
int x;
int *sig;
public:
void iniciar();
} ;

Es entera y totalemente erróneo. C no soporta esas características; es más, private y public no son siquiera palabras reservadas en C. Lee el estándar de C-99 o el libro "Programación en C" de sus creadores Ritchie y Kernighan. En C++ sí se admite el código que ilustras porque semánticamente es lo mismo una estructura que una clase. Para el compilador de C++ lo que estás creando... en realidad es una clase. Con esto, mi argumentación anterior al respecto queda intacta.

Ahora, por supuesto que es recomendable que se aprenda MFC (u otras) para evitar escribir cientos de líneas de códgo. Precísamente en ese tipo de diseños es donde se puede ver el poder del polimorfismo y la herencia, ya que se reutiliza el código (algo que no puedes hacer con programación estructurada, a menos que todas tus funciones tengan ... como parámetro, en cuyo caso el diseño es sería muy pobre y el "comportamiento indefinido" rondaría tu programa por doquier, lo cuál sería poco serio en un programador profesional) y personalizas sólo las tareas que necesites. Y ya ni mencionar la programación genérica, potente y elegante, que sólo C++ implementa.

La limitación existente de VB, por ejemplo, no hay que menospreciarla. VB funciona para programación trivial. Un sistema mediano o grande no sólo será ineficiente (gracias a la plataforma subyacente de VB) y grande, sino que no será portable. Ni siquiera puedes aprovechar a más del 50% las características del sistema operativo. El mantenimiento es horrible (aún en los mejores diseños). Y en cuanto a eficiencia... tienes que ser muuuuuy cuidadoso. Además, siempre tienes que trabajar con componentes COM, y bueno, los problemas que esto implica.

Al menos esa ha sido mi experiencia. Hagamos un ejercicio. Te propongo un número de tareas que hoy en día las aplicaciones modernas usualmente aplican y me respondes cómo se podría solucionar. Si tienes tiempo, claro.
1. Crear un web service / objeto SOAP.
2. Crear servicios bajo Windows.
3. Programación con redes (transmitir bytes entre máquinas).
4. Programación mutliárea / multihilo.
5. Control de la interfaz gráfica (p.e. ponerle un fondo a un menú o modificar el área de no cliente.
6. Abrir puertos seriales, bluetooth, IR, etc, para conectarte a dispositivos electrónicos (p.e. un lector de código de barras o un escaner digital, o alguna máquina que comprenda PLCs).
7. Creación de drivers.
8. Manipulación de gráficos de alto nivel y creación de algún juego en 3D.

Estos son algunos puntos que se me ocurren. Y esto no es nada descabellado cuando pensamos en sistemas no triviales o no pequeños.

Finalmente, te repito, hay una diferencia enorme al emplear ensamblador. C/C++ agregan semántica sobre el ensamblador. Además, todo lo que puedes hacer en ensamblador lo puedes hacer en C/C++. Es más, hasta puedes incrustar código ensamblador. Por ello, al no haber limitación alguna, tu comparación queda totalmente fuera de lugar.

Finalmente, hay muy buenas interfases para desarrollar GUIs al estilo "visual", como le llamas. GLADE en Linux es un ejemplo muy bueno, y en MFC/C++ puedes emplear recursos. Es más, Borland tiene sus propias librerías para construir aplicaciones empleando editores.

Espero tus comentarios. Igual y sería mejor continuar este debate en privado para evitar sobrecargar al foro. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 11
Ha aumentado su posición en 5 puestos en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

RE:poo vs p. visual vs pe

Publicado por zz (318 intervenciones) el 15/06/2005 02:45:22
Hi! c++ builder y visual c tambien permiten hacer eso que tu piensas, si puse el ejemplo de la estructura fue porque mis meaestros me dijeron que desde que hicieron c ya tenian alguna idea de la programacion orientada a objetos y de hecho tu podias declarar una estructura con datos miembro publicos y privados y pues por lo mismo puedes usar funciones como las que puse.
Si quieres mandame un mail a mi correo y seguimos platicando sobre este tema.
A lo que me refiero con que necesitas mas codigo es que por ejemplo en c++ no puedes hacer esto:

class lista
{
private:
int x;
int *sig;
public:
void iniciar();
} ;

lista listas;
listas.x porque como es privado no puedes acceder a él. y a fuerzas necesitas una funcion
y si usas una estructura como mi ejemplo:
struct lista
{
int x;
int *sig;
void iniciar ();
void mostrar();
}listas;

listas.x=5;

no necesitas una funcion para iniciar los mienbros te ahorras codigo y le ahorras trabajo al compilador de que vaya y busque la funcion.

Para mi en vez de usar mfc cuando necesita cosas por ejemplo un botón redondo que tengo el código para hacerlo, pues entonces lo que hago es crear un nuevo componente, lo instalo y cada vez que lo necesito solo tengo que ponerlo, a la hora de crear componentes es donde se usa la herencia y todo lo demas. y no hay problemas a la hora de distribuirlo en windows.

Yo los programas que he hecho en c++ builder y si quieres te los mando para que veas porque prefiero la programacion visual porque creas entornos gráficos con menos codigo que si usas c++, son un programa para dibujar en 2D Y 3D con todo y archivos usando GDI en donde pongo rotaciones, escalaciones, traslaciones, colores,, una especie de compilador para c, el cual tu le das tu codigo en c y te da una simulacion de que es lo que pasa con las variables y te genera un codigo intermedio, te digo la ventaja de programacion visual es que no tengo que programar las ventanas ni usar funciones para manejar el mosue, solo pongo formas y componentes y ya.

Con programacion visual no me refiero a programar gráficos, es otro tipo de programacion que asi como c++ se basa en objetos la programacion visual se basa en eventos, por ejemplo casi todo componente tiene los siguientes eventos:
Onclic, OnMouseMove, OnDrag, y pues para mi es mejor que el compilador se encargue de manejar esos eventos porque para eso fue creada la programacion visual, y no tener que estar tu usando las librerias de linux o windows para hacer eso, es por eso que te ahorra mucho codigo y aprovechas las ventajas.

Como te digo si quieres programas mas especificos como los que mencionas puedes seguir usando tus funciones de c o c++ o aún mejor puedes programar tus propios componentes donde se usa mucho la herencia, polimorfismo y todo lo propio de la poo, ah tambiens tienes un tienes un nuevo tipo de datos miembros el cual es published al igual que private y public.

Por eso para mi si hay comparacion entre usar ensamblador en vez de c o c++ y usar c++ en vez de visual c o c++ builder, todavia puedes seguir usando funciones en ensamblador y funciones de c o c++ para los programas especificos que mencionas y te ahorras tener que conocer las apis de windows para crear tus interfaces.
Por ejemplo para transmitir bytes entre maquinas puedes usar el componente winsock el cual esta para visual basic y c++ builder que son los que uso. Apenas consegui el visual c, y me pondre a estudiarlo.

la programacion mulittarea alguna vez hice ejemplos sencillos donde ejecutaba 2 o 3 programas o al mismo tiempo o intercalados y use la funcion spawn y otras que ahorita no me acuerdo. tambien puedes usar hilos pero no se como.

Para ponerle un fondo a un menu pues en una forma pongo un componente image de fondo con cualquier imagen jpep o bmp y arriba pongo el menu con botones tipo el office con sus dibujos de la carpeta a los cuales tambien les puedo poner una imagen y que esta imagen cambie según si esta presionada, si le diste clic, si la dejaste de presionar, y si nunca la has presionado.

Para programar el puerto serial yo no se como, pero unos chavos lo hicieron en c++ builder como un proyecto donde controlaban una lancha en el agua y leds y algunas otras cosas, tambien usaron unas protoboard para algunos circuitos para prender los leds y otras cosas que hicieron. y un amigo hizo un programa donde pone el lector de codigo de barras por el rs-232 y la de lector de codigo barras no me aucerdo que puerto era no me acuerdo si era usb con un convertidor o era serial o paralelo, y aparte lo manda a imprimir a la caja registradora y no se si lo hizo en c++ builder o visual basic, pero creo que fue en visual basic. Tambien otros chavos manejaron el codigo de barras en visual basic, te digo yo no se como, aún me faltan muchos conocimientos pero si se puede hacer en visual basic, c++ builder y visual c

Para crear graficos a alto nivel usas el componente Picture y usas las funciones propias del canvas que ya vienen incluidas con el componente por ejemplo:
void __fastcall TForm1::PaintBox1Paint(TObject *Sender) //este es un evento tu no tienes que declarar la funcion, solo le das doble clic en el evento del componente y listo:
{
//este el codigo para dibujar a "alto nivel" es una parte del codigo que utilice para dibujar en 3D
SetMapMode(PaintBox1->Canvas->Handle,MM_ANISOTROPIC);
SetViewportOrgEx(PaintBox1->Canvas->Handle,
PaintBox1->Width/2,
PaintBox1->Height/2,
NULL);
PaintBox1->Canvas->Brush->Color=clWhite;
for (int l=0; l<8; l++)
{
cubo2[l].x=cubo3[l].x+(cubo3[l].z/tan(alfa))*sin(omega);
cubo2[l].y=cubo3[l].y+(cubo3[l].z/tan(alfa))*sin(omega);
}
for (l=0; l<12; l++)
{
PaintBox1->Canvas->MoveTo(cubo2[conexion[l][0]].x, cubo2[conexion[l][0]].y);
PaintBox1->Canvas->LineTo(cubo2[conexion[l][1]].x, cubo2[conexion[l][1]].y);
}
}
Como te digo mejor platicamos por correo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar