TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: JBQ en 10 de Febrero de 2012, 17:25:37

Título: Cual es la diferencia entre Función y Objeto?
Publicado por: JBQ en 10 de Febrero de 2012, 17:25:37
Estaba leyendo sobre la OOP, y en ella se recalcaba que no se debe de confundir las funciones con los objetos. Pues esto no me quedo muy en claro, asi que le pregunté a un programador de softwares y me confundió aún más, ya que yo trataba de llevarlo a situaciones referente a los microcontroladores, y el solo me daba ejemplos abstractos, ya que su manejo de hardware era mínimo (se limitaba a los puertos de la PC).  Por eso ubique esta cuestión en esta sección del foro, a ver si me ayudan a esclarecer esta duda... saludos.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: PalitroqueZ en 11 de Febrero de 2012, 01:54:31
un objeto es una entidad que posee métodos (funciones) y propiedades. una función es una rutina que recibe argumentos y devuelve un solo resultado

relacionar la OOP con microntroladores depende del compilador existente para ello. Hasta la fecha conozco de un software llamado OOPic de Savage Innovations pero creo que ellos son historia  :(
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: JBQ en 11 de Febrero de 2012, 02:32:04
OK, pongamos un ejemplo: si yo escribo en el LCD, estoy llamando a una función o estoy usando un objeto??? por que estoy enviando argumentos pero no recibiendo resultados, por otro lado, el LCD posee funciones y propiedades; como podría aqui determinar si estoy usando una función o un objeto?.

PDTA. gracias por responder.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: sander en 11 de Febrero de 2012, 14:12:55
Yo creo que el LCD podria ser una clase, ya que existen LCDs con diferentes caracteristicas, por ejemplo la cantidad de caracteres que se pueden mostrar, existirian LCDs (objetos) de 8x2 lineas, 16x2, 20x4, etc, y los metodos comunes a esta clase (funciones) podrian ser escribir un byte, inicializarLCD, etc.

Entonces si creas la clase LCD

Código: C++
  1. class LCD
  2. {
  3.   int  nFilas;
  4.   int  nColumnas;
  5.  
  6.  
  7.   void inicializarLCD();
  8.   void EscribirCarac(char Dato);
  9.  
  10. }
  11.  
  12. //Luego podrias crear un objeto LCD16x2 y especificar sus atributos
  13.  
  14. LCD  LCD16x2
  15.  
  16. LCD16x2.nFilas =2;
  17. LCD16x2.nColumnas =16;
  18.  
  19. //Luego usar sus metodos(funciones)
  20.  
  21. LCD16x2.InicializarLCD();
  22. LCD16x2.EscribirCarac('H');

Estoy bastante seguro de que esa seria una forma en la que podrias manejar un LCD usando clases, pero hace mucho que no programo con clases asi que talvez existan algun error.

sobre tu pregunta inicial....., creo que la funcion es equivalente al metodo y un objeto es un elemento que pertenece a una clase.

Saludos
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: PalitroqueZ en 11 de Febrero de 2012, 15:30:40
OK, pongamos un ejemplo: si yo escribo en el LCD, estoy llamando a una función o estoy usando un objeto??? por que estoy enviando argumentos pero no recibiendo resultados, por otro lado, el LCD posee funciones y propiedades; como podría aqui determinar si estoy usando una función o un objeto?.

PDTA. gracias por responder.

eso, como mencioné antes, depende del compilador. Si usas por ejemplo el C de ccs, estás usando C y por tanto todo el código se guiará por llamados de funciones. (programación estructurada).

y creo que los demás compiladores (c18, picbasic, mikroc, hitech) tampoco usan el concepto de clase u objeto para programar microcontroladores.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: MerLiNz en 11 de Febrero de 2012, 17:34:19
Te estas complicando mucho, los objetos son de C++ y para un pic se usa C a secas el cual no se puede considerar nada como objeto a no ser que te montes tu propia estructura cosa que consumiria mucha memoria y programa.

Cuando escribes en un lcd con una funcion hecha para ello pues estas usando una funcion.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: JBQ en 11 de Febrero de 2012, 20:13:54
eso, como mencioné antes, depende del compilador. Si usas por ejemplo el C de ccs, estás usando C y por tanto todo el código se guiará por llamados de funciones. (programación estructurada).

y creo que los demás compiladores (c18, picbasic, mikroc, hitech) tampoco usan el concepto de clase u objeto para programar microcontroladores.

Por que necesariamente es muy dependiente del compilador??? acaso al definir los objetos y las clases y metodos, no estamos usando ya OOP, independientemente del compilador??? el ejemplo de sander me parece totalmente viable.

.
.
.



Por cierto sander:

Yo creo que el LCD podria ser una clase, ya que existen LCDs con diferentes caracteristicas, por ejemplo la cantidad de caracteres que se pueden mostrar, existirian LCDs (objetos) de 8x2 lineas, 16x2, 20x4, etc, y los metodos comunes a esta clase (funciones) podrian ser escribir un byte, inicializarLCD, etc.

muy buena analogía, tu ejemplo me dio nuevas perspectivas, gracias.


Te estas complicando mucho, los objetos son de C++ y para un pic se usa C a secas el cual no se puede considerar nada como objeto a no ser que te montes tu propia estructura cosa que consumiria mucha memoria y programa.

Pero no crees tú que si definimos claramente los objetos de las funciones, sin ser necesariamente c++ estaríamos haciendo má modular nuestro firmware??? a eso apunta esto.

Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: AngelGris en 11 de Febrero de 2012, 20:40:32
  Seguramente cuando quieras usar la palabra reservada "class" te dará un error puesto que no existe en C. Como te comenta Merlinz, la programación orientada a objetos es cosa de C++ y no de C
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: MerLiNz en 11 de Febrero de 2012, 22:11:45
Mas sencillo de usar y mas claro pues si, por ejemplo rs232.Send(....); eso esta claro, el problema es que ningun compilador de C te deja hacer esto porque no existe este tipo codigo. La POO (programacion orientada a objetos) es de C++ y aun no he escuchado ningun compilador de C++ para un pic (no digo que no los haya, pero para atmel y microchip no he oido nada nunca).

Esto es, porque como ya digo un pic no tiene tanta memoria, ni es capaz de gestionar la ram de forma dinamica (tipo malloc, en C++ int *p=new int;). Vamos que con los pics lo que se intenta es crear un codigo lo mas rapido posible para obtener un control correcto del tiempo, sobretodo si tu aplicacion requiere mucha precision.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: Geo en 12 de Febrero de 2012, 02:34:51
aun no he escuchado ningun compilador de C++ para un pic (no digo que no los haya, pero para atmel y microchip no he oido nada nunca).
Para AVR si hay compilador de C++: avr-gcc (WinAVR), p. ej. las bibliotecas de Arduino generalmente con clases C++. También se de un par de compiladores de C++ para PIC, pero no los he probado (ni planeo hacerlo): http://www.sourceboost.com/Products/BoostCpp/Overview.html y http://www.iar.com/en/Products/IAR-Embedded-Workbench/Microchip-PIC18/ (descontinuado). Además, en una respuesta a un comentario en el foro de Microchip Technology se comentó que para Junio se estaría agregando soporte para C++ a la nueva línea de compiladores XC, pero no se si tomarlo más como rumor que como un comentario "oficial".
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: PalitroqueZ en 12 de Febrero de 2012, 13:50:13
...
Por que necesariamente es muy dependiente del compilador??? acaso al definir los objetos y las clases y metodos, no estamos usando ya OOP, independientemente del compilador??? el ejemplo de sander me parece totalmente viable.
...

la mejor forma de comprobarlo es que intentes compilarlo. haz la prueba y después nos comentas
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: MerLiNz en 12 de Febrero de 2012, 14:36:22
aun no he escuchado ningun compilador de C++ para un pic (no digo que no los haya, pero para atmel y microchip no he oido nada nunca).
Para AVR si hay compilador de C++: avr-gcc (WinAVR), p. ej. las bibliotecas de Arduino generalmente con clases C++. También se de un par de compiladores de C++ para PIC, pero no los he probado (ni planeo hacerlo): http://www.sourceboost.com/Products/BoostCpp/Overview.html y http://www.iar.com/en/Products/IAR-Embedded-Workbench/Microchip-PIC18/ (descontinuado). Además, en una respuesta a un comentario en el foro de Microchip Technology se comentó que para Junio se estaría agregando soporte para C++ a la nueva línea de compiladores XC, pero no se si tomarlo más como rumor que como un comentario "oficial".

Esta bien saberlo, pero como ya digo sera demasiado para un pic, cuando se programa un pic se intenta optimizar lo maximo posible, probablemente esto genere mas codigo que con un codigo normal. Es comodo pero menos optimizado, ya de por si usando C en vez de ASM no se optimiza tanto el codigo, pues imaginate añadiendole C++ con herencias, objetos, recursividad...
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: JBQ en 12 de Febrero de 2012, 21:49:09
...
Por que necesariamente es muy dependiente del compilador??? acaso al definir los objetos y las clases y metodos, no estamos usando ya OOP, independientemente del compilador??? el ejemplo de sander me parece totalmente viable.
...

la mejor forma de comprobarlo es que intentes compilarlo. haz la prueba y después nos comentas

No será necesario, con lo que dijeron angelgris y merlinz, me quedo más que claro.

Ahora, despejando algunas dudas más (lo se, disculpen la terquedad); se enfátiza bastante en que los métodos no son funciones, pero si nos basamos en el ejmplo del LCD de sander, claramente se ven que actuan como funciones. Como puedo distinguir un método de una función???
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: MerLiNz en 12 de Febrero de 2012, 23:52:47
aqui te puedes enterar un poco de como va la cosa:
http://es.wikipedia.org/wiki/C%2B%2B

pero como ya he dicho, en C no existen clases, herencias, objetos, metodos... todo esto es C++. Por lo cual no puedes buscar un metodo donde no puede haberlo (C).
el C++ es una version extendida del C, en este se incluye todo lo que podias hacer en el C sin embargo le añadieron POO (metodos, funciones, herencias...).

Aqui puedes ver que es cada cosa en un lenguaje POO:
http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: JBQ en 13 de Febrero de 2012, 01:58:00
Merlinz, por su puesto que también he leído esos enlaces en wikipedia, no extensamente pero si los he repasado. Mi pregunta va más por tener una comparación en un ejemplo práctico... saludos.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: tannke en 13 de Febrero de 2012, 06:56:35
Función y método son basicamente lo mismo.
En programación orientada a objetos se le llama método, lo distingues porque esta integrada en una clase.
En programación estructurada se le llama función.

Saludos.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: Suky en 14 de Febrero de 2012, 23:26:40
Citar
Merlinz, por su puesto que también he leído esos enlaces en wikipedia, no extensamente pero si los he repasado. ...

Yo no creo que alcance con darle una repasadita  :undecided: Hay que estudiar los distintos tipos de paradigmas de programación (http://es.wikipedia.org/wiki/Paradigma_de_programaci%C3%B3n)  ;-)
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: MerLiNz en 15 de Febrero de 2012, 00:01:18
Pero como ya te digo no puedes comparar un codigo de C con uno de C++, no se le puede sacar una comparativa de que es que, si el ejemplo de LCD que puso esta en codigo C no puedes intentar sacar que es un objeto o un metodo ya que no existe esa forma de llamarlo.

Es como comparar el tocino con la velocidad.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: JBQ en 15 de Febrero de 2012, 02:11:12
Yo no creo que alcance con darle una repasadita  :undecided: Hay que estudiar los distintos tipos de paradigmas de programación (http://es.wikipedia.org/wiki/Paradigma_de_programaci%C3%B3n)  ;-)

Eso es un hecho, estoy totalmente de acuerdo. Como dije, por estos días me encuentro leyendo acerca de la OOP, y pues debido a las dudas surtidas, decidi consultar por aqui a personas conocedoras del tema.

Citar
Pero como ya te digo no puedes comparar un codigo de C con uno de C++, no se le puede sacar una comparativa de que es que, si el ejemplo de LCD que puso esta en codigo C no puedes intentar sacar que es un objeto o un metodo ya que no existe esa forma de llamarlo.

Ok merlinz, creeme cuando te digo que te comprendo perfectamente. Nunca fue mi inteción hacer una comparativa del C con el C++; tan solo buscaba diferenciacíon entre función y método y comprender como identificar a un objeto (si se podía), en situaciones cotidianas de los microcontroladores.

La verdad que esperaba contar con tan solo algunos ejemplos... nunca dije que queria usar la OOP en el lenguaje C. Bastaba con hacer volar la imaginación y pensar que usabas la OOP en un proceso cotidiano de un uc, y decir esto es tal, eso es tal etc.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: MerLiNz en 15 de Febrero de 2012, 12:01:01
Ya pero es que no te puedes imaginar algo donde no lo hay, lo mejor hubiese sido buscar un codigo en C++ y ponerte el ejemplo de ahi. Ademas tambien estaria mal hacerte creer que algo que no es un objeto es un objeto, eso se te quedaria grabado y si estas haciendo un curso de programacion, cuando el profesor te vea decir que esto es un objeto (sin serlo) se echaria las manos a la cabeza...
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: JBQ en 15 de Febrero de 2012, 19:08:10
Bueno. En vista que parece no ser posible mis primeras intenciones, cambio de ejemplos:

Asumamos que conectamos unos leds al puerto paralelo de la PC (como si estarías haciendo uno de esos proyectos simples del semáforo controlado por el puerto paralelo) y las acciones o los estados de los leds se visualizan el el monitor de la pc. Además, estas acciones y estados lo informas a través del puerto serial a un dispositivo que lo almacena como si fuera una memoria externa.

-Los leds, el monitor y la memoria externa, serían objetos, no es cierto ???

-pero cuando se escriba en el monitor los mensajes de los estados de los leds, se estaría empleando una función o un método???  por que yo emplearia una función para escribir en el monitor, pero no se si seria correcto llamarlo función ???

- igualmente, cuando se escriba en la memoria externa por el puerto serial, sería función o metodo??? y se lo que se hace es leer ahi sería función o método???

- por que considerar objetos a los leds, si estos no tienen datos, ni métodos, etc, solo acciones básicas como on y off???
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: MerLiNz en 15 de Febrero de 2012, 20:04:02
le das muchas vueltas  :shock:

para que lo entiendas hablando de programacion:

*Funcion:
void funcion() {
codigo;
}

*Objeto:
class clase {
int variable;
void metodo();
};

clase Objeto1, Objeto2; (esto serian objetos los cuales contiene una instancia de "clase").

*Metodo (tambien llamadas funciones miembros):
void clase::metodo() {
codigo;
}

Objeto1.metodo(); //forma de llamar a un metodo
Objeto2.metodo(); //llamar a instancia de objeto2->metodo
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: AngelGris en 15 de Febrero de 2012, 20:40:21
-Los leds, el monitor y la memoria externa, serían objetos, no es cierto ???

  No necesariamente. Si usas programación estructurada (basada en funciones y procedimientos) no existe el concepto de objeto. En cambio si usas OOP sí los podrías tratar como objetos.


-pero cuando se escriba en el monitor los mensajes de los estados de los leds, se estaría empleando una función o un método???  por que yo emplearia una función para escribir en el monitor, pero no se si seria correcto llamarlo función ???

  Si usas programación estructurada, se usan funciones, si usas OOP podrías utilizar un método. Siempre y cuando tengas definido a un objeto "monitor" y éste tenga un método para recibir el estado de los leds.


- igualmente, cuando se escriba en la memoria externa por el puerto serial, sería función o metodo??? y se lo que se hace es leer ahi sería función o método???

  Volvemos siempre a lo mismo, depende del paradigma de programación empleado.


- por que considerar objetos a los leds, si estos no tienen datos, ni métodos, etc, solo acciones básicas como on y off???

  Pues podríamos asumir que los datos que tienen los leds, es justamente su estado (on-off) y podríamos asumir que existen los métodos para encenderlos o apagarlos.

 
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: JBQ en 16 de Febrero de 2012, 00:18:22
le das muchas vueltas  :shock:

Si, lo se, lo siento. Es que cuando me invaden las dudas, estas crecen y se disipan hasta hacerme dudar de todo lo demás.

Muchas gracias por el ejemplo; veo que cuando te dirijes a los objetos usas ante todo los métodos, y veo que los metodos son parte de los objetos, entonces una función no puede ser parte de un objeto? o en la OOP se les relega (a las funciones) únicamente a las decisiones lógicas?


- igualmente, cuando se escriba en la memoria externa por el puerto serial, sería función o metodo??? y se lo que se hace es leer ahi sería función o método???

 Volvemos siempre a lo mismo, depende del paradigma de programación empleado.
Definitivamente estamos hablando de ls OOP. Esta duda viene del planteamiento de que las funciones siempre devuelven un valor lógico, entonces si escribimos en la memoria externa del ejemplo, estaríamos usando un método; pero si la leemos, parece otro metodo inherente a la memoria externa (objeto), pero ya nos esta devolviendo un valor lógico, entonces función o método, lo mismo va si en caso le consultasemos si está ocupada o no, función o método???
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: AngelGris en 16 de Febrero de 2012, 10:21:07
Si, lo se, lo siento. Es que cuando me invaden las dudas, estas crecen y se disipan hasta hacerme dudar de todo lo demás.

Muchas gracias por el ejemplo; veo que cuando te dirijes a los objetos usas ante todo los métodos, y veo que los metodos son parte de los objetos, entonces una función no puede ser parte de un objeto? o en la OOP se les relega (a las funciones) únicamente a las decisiones lógicas?

  Pues sí, los métodos forman parte de los objetos.


Definitivamente estamos hablando de ls OOP. Esta duda viene del planteamiento de que las funciones siempre devuelven un valor lógico, entonces si escribimos en la memoria externa del ejemplo, estaríamos usando un método; pero si la leemos, parece otro metodo inherente a la memoria externa (objeto), pero ya nos esta devolviendo un valor lógico, entonces función o método, lo mismo va si en caso le consultasemos si está ocupada o no, función o método???

  Pero las funciones no siempre devuelven un valor, ya que si están declaradas de la forma

Código: C
  1. void mifuncion();

  la palabra reservada "void" delante de la declaración nos está indicando que dicha función no devuelve ningún valor.

  En cuanto a leer la memoria... ese objeto bien podría tener un método que devuelva el valor leído... no se.... por ejemplo llamado "getvalue". O en el caso de Python o Delphi se pueden usar propiedades...(menciono Delphi y Python porque no sé si C++ tiene el recurso de las propiedades).
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: JBQ en 16 de Febrero de 2012, 11:27:47
Código: [Seleccionar]
void MAINFUNCION ();
Oh vaya!!! como obvie esa expresión!!!
definitivamente esto deja sin pie el argumento que me daba el programador de softwares al que le consulte, el cual decía que toda función necesariamente devuelve un valor.
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: MerLiNz en 16 de Febrero de 2012, 12:52:49
una funcion es una funcion de toda la vida la cual no pertenece a nada solo al codigo global ej: void main(), y una funcion de un objeto es llamada metodo, funcion miembro...
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: Suky en 16 de Febrero de 2012, 13:00:30
Código: [Seleccionar]
void MAINFUNCION ();
Oh vaya!!! como obvie esa expresión!!!
definitivamente esto deja sin pie el argumento que me daba el programador de softwares al que le consulte, el cual decía que toda función necesariamente devuelve un valor.

 :rayito:  :z)   :mrgreen:
Título: Re: Cual es la diferencia entre Función y Objeto?
Publicado por: patoaparato en 16 de Febrero de 2012, 13:25:32
Funcion -> es una simple subrutina GLOBAL (da lo mismo si devuelve o no valores, o si requiere o no parametros de de entrada, desde el punto de vista del procesador es un simple y bulgar "CALL")

Objeto -> un conjunto de subrutinas PRIVADAS (bulgar "CALL") que trabajan sobre una variable, generalmente una estructura de datos (cualquier cosa como un lcd, un motor, un LED, un pin, etc, puede ser considerado como una variable desde el punto de vista del procesador)

Título: Re:Cual es la diferencia entre Función y Objeto?
Publicado por: nicolai628a en 15 de Septiembre de 2017, 01:04:52
el eje,plo de el lcd es una libreria, un archivo especial que guarda variables globales a ese archivo y funciones afines a ese tema, no se puede considerar un objeto, sencillamente porque C no es un lenguaje orientado a objetos, es estructurado.

Un objeto, o clase, como se llama en algunos lenguajes, es un conjunto de propiedades o atributos, que son las caracteristicas de ese objeto (sustantivo) y las funciones o metodos, es loque puede hacer ese objeto o clase (verbo).

Asi pues, una funcion es una parte de un objeto, dandole una explicacion demaciado banal y sencilla a esto, porque en realidad, estas definiciones y muchas otras, son la base de la programacion orientada a objetos.