Autor Tema: ¿Hay alguna manera de crear clases y constructores en C18?  (Leído 3174 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
¿Hay alguna manera de crear clases y constructores en C18?
« en: 12 de Noviembre de 2016, 10:11:38 »
Hola a todos, pues hace nada he me metido con la programación de Arduino y descubriendo por primera vez el lenguaje c++, me he quedado alucinado con todo el tema ese de las clases y los constructores y me preguntaba si eso no se podría hacer en C18, es que es una pasada para fabricarnos nuestras propias librerías.
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #1 en: 12 de Noviembre de 2016, 10:23:26 »
Eso es de C++. Realmente para mi lo unico envidiable de C++ respecto a C, en los microcontroladores SOLAMENTE ya que en PC hay mas diferencias a podeer usar, son las clases y el overload de operadores.

Te permiten simplificar la programacion en cierto modo, y organizar el codigo mejor. Pero nuevamente, esto es hablando de C++. C no posee esto.
Aunque todo lo que puedas hacer en C++, tambien lo podes hacer en C aunque de otras formas.
« Última modificación: 12 de Noviembre de 2016, 10:26:26 por KILLERJC »

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #2 en: 12 de Noviembre de 2016, 11:03:50 »
Pues a eso me refiero, ¿si hay alguna formad e hacerlo?, ¿con estructuras y punteros o algo?
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #3 en: 12 de Noviembre de 2016, 11:16:32 »
Pues a eso me refiero, ¿si hay alguna formad e hacerlo?, ¿con estructuras y punteros o algo?

Sí claro. En C18 no lo sé porque hace tiempo que no programo PIC18 pero las librerías nuevas de PIC32 están todas en C "emulando" C++: usando estructuras como si fuesen clases y llamandolas con punteros. Ahora que es "lioso de cojones" :P, tienes que ser bastante bueno en C como para seguir el hilo del código...
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #4 en: 12 de Noviembre de 2016, 11:22:29 »
Pues a eso me refiero, ¿si hay alguna formad e hacerlo?, ¿con estructuras y punteros o algo?

Sí claro. En C18 no lo sé porque hace tiempo que no programo PIC18 pero las librerías nuevas de PIC32 están todas en C "emulando" C++: usando estructuras como si fuesen clases y llamandolas con punteros. Ahora que es "lioso de cojones" :P, tienes que ser bastante bueno en C como para seguir el hilo del código...

si no te importa podrías poner algún ejemplo sencillo de encender un led o algo y explicarlo un poco a ver si le pillo el toque?, se me ocurren cosas para hacer pero prefiero ver algo ya machacado por alguien así evitaré errores.
gracias de nuevo.
Es que veo que una vez crees un driver de esa manera es muy fácil añadirlo a tu proyecto y se vería todo más claro
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #5 en: 12 de Noviembre de 2016, 12:07:32 »
si no te importa podrías poner algún ejemplo sencillo de encender un led o algo y explicarlo un poco a ver si le pillo el toque?, se me ocurren cosas para hacer pero prefiero ver algo ya machacado por alguien así evitaré errores.
gracias de nuevo.
Es que veo que una vez crees un driver de esa manera es muy fácil añadirlo a tu proyecto y se vería todo más claro

Pone un ejemplo en C++ del led que queres y lo intento hacer lo mas parecido en C

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #6 en: 13 de Noviembre de 2016, 11:27:55 »
Creo que no hay manera de utilizar C++ en C18.

Para trabajar con C++ tienes que pasarte a AVR  (p.e. Arduino) que trabaja con el compilador C++ gnu-avr.

De todas formas hay muchas razones para no trabajar con C++. Linus Torvalds por ejemplo es un gran defensor del C y siempre ha estado en contra de programar en C++ el sistema operativo Linux.

Saludos.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #7 en: 13 de Noviembre de 2016, 16:09:58 »
Me refería si se puede hacer algo parecido a lo del constructor y las clases en C, he estado modificando un driver que tengo para medir temperatura con un termopar pero creo que no puedo hacerlo, no queda igual ni de lejos que con C++, el tema es que no veo la manera de hacer algo parecido al constructor de c++, sigo pensando soluciones pero no lo tengo nada claro, creo que no se podrá.

¿sabes las razones de por qué torvalds se decante más por uno que por el otro?
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #8 en: 13 de Noviembre de 2016, 16:41:43 »
Citar
he estado modificando un driver que tengo para medir temperatura con un termopar pero creo que no puedo hacerlo, no queda igual ni de lejos que con C++

Pero podes hacerlo con C..

Citar
¿sabes las razones de por qué torvalds se decante más por uno que por el otro?

Algunos dicen que no tiene razon para no usar C++, pero queda decir que C++ no es un lenguaje simple de aprender, usar clases y constructores es lo que hace a C++, hay muchas cosas que pasan por debajo y son dejadas al compilador, y tal ves esto es lo que se quiere evitar. Da mayor seguridad saber que se esta haciendo en todo momento, las librerias han sido probadas millones de veces, lo cual tambien da seguridad.

Por lo intentado de aprender C++ (tutoriales+libros) no es para nada parecido a C y es MUCHO mas complejo, aquel que usa C++ en un microcontrolador, simplemente hace uso de C + clases y el overload de operadores (que no creo que muchos lo usen a este ultimo). Y en si se terminan manejando igual que C, por que la gran ventaja del manejo del HEAP en C++ no se puede aprovechar realmente por el costo computacional.

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #9 en: 13 de Noviembre de 2016, 16:54:39 »
Me refería si se puede hacer algo parecido a lo del constructor y las clases en C, he estado modificando un driver que tengo para medir temperatura con un termopar pero creo que no puedo hacerlo, no queda igual ni de lejos que con C++, el tema es que no veo la manera de hacer algo parecido al constructor de c++, sigo pensando soluciones pero no lo tengo nada claro, creo que no se podrá.

¿sabes las razones de por qué torvalds se decante más por uno que por el otro?

Linus torvalds decia "nosequé" de que con C++ es demasiado facil "pegarse un tiro en un pie"... no recuerdo bien la frase...

Si no pones un ejemplo es muy dificil ayudarte. Lo del constructor no es complejo. 1º typedef struct (lo que sea), es la clase. 2º Una función que le pasas un puntero a ese tipo de estructura y te inicializa los miembros (ese es el constructor). 3º Declaras a estructura del tipo del paso 1º, declaras el puntero a la estructura y se lo pasas al constructor. 4º Sigues haciendo lo que sea con tu "clase" y tus "métodos" (funciones a las que les pasas el puntero a la estructura).

Échale un ojo a las librerías gráficas de Microchip: todo está hecho de esa forma...y de formas más complejas, con estructuras con miembros comunes a otras estructuras y con "casts" que hacen que los mismos métodos puedan recibir distintos tipos de estructuras (tipo herencia en C++).

Saludos.

Editado: sorry, cuando declaras una estructura del tipo en cuestion y un puntero que apunta a ella, el puntero es el objeto. Ese es lo pasas al constructor para inicializar. Y luego ya haces lo que sea con ese puntero pasandoselo a otro metodos (funciones). Lo siento pero es dificil explicarse jeje
« Última modificación: 13 de Noviembre de 2016, 17:01:10 por manwenwe »
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 771
    • https://electronicadicto.wordpress.com/
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #10 en: 13 de Noviembre de 2016, 19:01:20 »
voy a intentar todo eso que me explicas a ver que tal me sale, practicar practicar hasta la saciedad, por cierto y si no es abusar mucho ya de la confianza, ¿me indicas la librería gráfica a la que te refieres?.

A otra cosa que me confunde mucho al intentar lo de el constructor y las clases en c, el tema de configurar el hardware en arduino se puede hacer desde el constructor pero en c18 veo que se hace fuera en un archivo .h
lo de las clases lo tengo claro que es similar por no decir lo mismo que una estructura, pero lo del constructor eso me desorienta, veo que es como una función donde metes los punteros pero no sé si ahí se puede configurar el hardware, tengo que madurar todo esto todavía, ya entender lo de las clases y el constructor en c++ me costó como un día o dos más o menos...
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #11 en: 13 de Noviembre de 2016, 19:43:52 »
¿sabes las razones de por qué torvalds se decante más por uno que por el otro?

Citar
C++ is a horrible language. It's made more horrible by the fact that a lot
of substandard programmers use it, to the point where it's much much
easier to generate total and utter crap with it. Quite frankly, even if
the choice of C were to do *nothing* but keep the C++ programmers out,
that in itself would be a huge reason to use C.

In other words: the choice of C is the only sane choice. I know Miles
Bader jokingly said "to piss you off", but it's actually true. I've come
to the conclusion that any programmer that would prefer the project to be
in C++ over C is likely a programmer that I really *would* prefer to piss
off, so that he doesn't come and screw up any project I'm involved with.

C++ leads to really really bad design choices. You invariably start using
the "nice" library features of the language like STL and Boost and other
total and utter crap, that may "help" you program, but causes:

 - infinite amounts of pain when they don't work (and anybody who tells me
   that STL and especially Boost are stable and portable is just so full
   of BS that it's not even funny)

 - inefficient abstracted programming models where two years down the road
   you notice that some abstraction wasn't very efficient, but now all
   your code depends on all the nice object models around it, and you
   cannot fix it without rewriting your app.

In other words, the only way to do good, efficient, and system-level and
portable C++ ends up to limit yourself to all the things that are
basically available in C. And limiting your project to C means that people
don't screw that up, and also means that you get a lot of programmers that
do actually understand low-level issues and don't screw things up with any
idiotic "object model" crap.

So I'm sorry, but for something like git, where efficiency was a primary
objective, the "advantages" of C++ is just a huge mistake. The fact that
we also piss off people who cannot see that is just a big additional
advantage.

If you want a VCS that is written in C++, go play with Monotone. Really.
They use a "real database". They use "nice object-oriented libraries".
They use "nice C++ abstractions". And quite frankly, as a result of all
these design decisions that sound so appealing to some CS people, the end
result is a horrible and unmaintainable mess.

But I'm sure you'd like it more than git.

            Linus

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5883
    • Picuino
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #12 en: 13 de Noviembre de 2016, 19:48:21 »
Bjarne Stroustrup:
Citar
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg.

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #13 en: 14 de Noviembre de 2016, 05:08:03 »
Bjarne Stroustrup:
Citar
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg.

Eso era jejeje. Siempre me lo dice mi socio que es programador pero siempre se me olvida...
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re:¿Hay alguna manera de crear clases y constructores en C18?
« Respuesta #14 en: 14 de Noviembre de 2016, 05:22:39 »
voy a intentar todo eso que me explicas a ver que tal me sale, practicar practicar hasta la saciedad, por cierto y si no es abusar mucho ya de la confianza, ¿me indicas la librería gráfica a la que te refieres?.

A otra cosa que me confunde mucho al intentar lo de el constructor y las clases en c, el tema de configurar el hardware en arduino se puede hacer desde el constructor pero en c18 veo que se hace fuera en un archivo .h
lo de las clases lo tengo claro que es similar por no decir lo mismo que una estructura, pero lo del constructor eso me desorienta, veo que es como una función donde metes los punteros pero no sé si ahí se puede configurar el hardware, tengo que madurar todo esto todavía, ya entender lo de las clases y el constructor en c++ me costó como un día o dos más o menos...

Bájate MPALBX y XC32 (instalalos). Instala Harmony (busca en google como se hace, es sencillo). Abre un proyecto de ejemplo (C:/Microchip/Harmony/v_laquesea/apps/gfx/). Y a tirar del hilo....jeje. Cada componente que dibujas (circulo, linea, imagen, boton, etc.) es un como un objeto de C++. Imaginate que tienes un objeto "circulo"...el circulo será de la clase "circulos", que hereda de la clase "primiv¡tives", que hereda de la clase "gráficos".

Ale! a empollar código XD
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -