Objetos en C [Was: Re: OT: Pregunta de C]

Horst von Brand vonbrand en inf.utfsm.cl
Mie Nov 24 14:57:07 CLST 2004


On Wed, Nov 24, 2004 at 12:24:37AM +0100, Carlos Manuel Duclos Vergara wrote:
> > no he visto codigo fuente en C de mas de un archivo que no tenga una macro
> > por ahi.

He visto bastante codigo asi...

> >          Igual seria bueno que las macros empezaran con una letra especial
> > para distinguirlas y no andar buscandolas con el gdb

Programar a punta de gdb es muy mala practica. Y macros "que parecen
funciones" que no parecen funciones porque tienen nombres raros es...
contraproducente. Probablemente quieres funciones inline, en realidad (que
gdb tampoco encontrara ;-)

> para eso debieras usar el _ antes de las declaraciones, aun cuando casi no
> se usa se supone que de esa forma se podian distinguir.

No. Nombres que comienzan _ estan reservados para la implementacion de C.

> > [...]
> >
> > >Porque C++ arrastra un monton de costos que son dificiles de predecir para
> > >el usuario comun, y requiere un monton de apoyo de runtime (que en el
> > >nucleo _no existe_). Por lo demas, el sistema de objetos al interior de
> > >Linux hace cosas que en C++ son imposibles de hacer limpiamente (si, son
> > >necesarias cosas como heredar de una clase y cambiarle funciones miembro).
> >
> > mas que clases son interfaces (como las de delphi)?

C++ no tiene la idea de "interfaces" al estilo Java (no se Delphi). Puedes
construir clases a punta de funciones abstractas &c que dan +/- el mismo
efecto, o derechamente usar herencia multiple (las "interfaces" de Java son
herencia multiple a 1/4 hacer, nada mas).

> es que la definicion de clase es algo difuso: una clase es la suma de 
> estructuras de datos + metodos para operar en ellas. En C++ hay mecanismos 
> automaticos para trabajar con ellas, en C tienes que armarlos tu en gran 
> parte. De ahi que con C++ no se puedan hacer algunas cosas como cambiar 
> funciones miembros (aun cuando en teoria con sobrecarga se podria llegar a 
> algo similar)

No puedes sobrecargar, solo podrias redefinir la funcion virtual en una
clase derivada (que es lo que en realidad estan haciendo), pero es mas
enredo... y el modelo de clases del nucleo no es C++-ista, asi que seria un
trabajo gigante de reingenieria. SIn ningun chiste particular, asi que...

> > >Si, pueden escribirse S.O.'s en C++, pero el disen~o debe considerar el
> > >lenguaje y su modelo de objetos (el cuento de "disen~o independiente del
> > >lenguaje" es el mayor de los muchos crimenes de los "ingenieros de
> > >software"...)
> 
> eCos es un buen ejemplo de un SO programado en C++ (y hasta funciona!!!)

Hay varios mas.
-- 
Dr. Horst H. von Brand                   User #22616 counter.li.org
Departamento de Informatica                     Fono: +56 32 654431
Universidad Tecnica Federico Santa Maria              +56 32 654239
Casilla 110-V, Valparaiso, Chile                Fax:  +56 32 797513


Más información sobre la lista de distribución Linux