INFORMATICOS: Para que shishi sirve la PROGRAMACION ORIENTADA A OBJETOS???

davitin

Será en Octubre
Desde
20 Jul 2009
Mensajes
52.933
Reputación
104.126
Buenas.

Soy programador aficionado (alguno recordara el hilo de los TOROIDES) y he programado cosas en varios lenguajes, mayormente Basic, Ensamblador (z80 y 086), Javascript y Php....vamos a ver, llevo años intentando entender para que shishi sirve la POO, es decir, a quien huevones se le ocurrio semejante cosa de paradigma antiintuitivo? a ver, un programa son variables, lineas de codigo, direccionamientos a la memoria, etc....a que viene todo eso de las clases, instancias, etc? en que mejora la programacion lineal clasica? ya lo digo yo, en nada, incluso lo veo antiintuitivo, se pierde totalmente la nocion de lo que es la programacion....

Repito...que ventajas tienen estos conceptos sobre la programacion clasica? osea, si puedo hace run programa o videojuego con los conceptos tradicionales de la programacion para que shishi tengo que usar esta fruta cosa?

Ponerme un ejemplo sencillito.

Que opinais?
 
Ya que mencionas lo de hacer un videojuego, la POO es ideal.

En el "mundo" del juego, cada cosa que ves es un "actor", una clase. Corren todas a la vez, y puedes leer variables de una a otra de una forma simple teniendo sus referencias. Un juego no es un proceso lineal, sino que tiene muchos "actores" a la vez ejecutando su propio código.

Por ejemplo puedes hacer una clase progenitora para un NPC, y luego crear nuevas clases para NPCs diferentes, "heredando" todo el código previo de esa clase progenitora, añadiendo cosas o cambiándolas (polimorfismo), de modo que modificando algo en la clase progenitora, se modifican automáticamente en todas las demás.
 
Yo vengo del camino contrario. Siempre usando programación orientada a objetos y ahora trabajando con un lenguaje antiguo y no orientado a objetos.

No sé qué le ves de anti intuitivo a las clases y los objetos.
 
Sigo sin ver las ventajas.

A ver, entonces lo de los objetos va referido a conjuntos de variables que definen "algo" dentro del programa?
 
Ya que mencionas lo de hacer un videojuego, la POO es ideal.

En el "mundo" del juego, cada cosa que ves es un "actor", una clase. Corren todas a la vez, y puedes leer variables de una a otra de una forma simple teniendo sus referencias. Un juego no es un proceso lineal, sino que tiene muchos "actores" a la vez ejecutando su propio código.

Por ejemplo puedes hacer una clase progenitora para un NPC, y luego crear nuevas clases para NPCs diferentes, "heredando" todo el código previo de esa clase progenitora, añadiendo cosas o cambiándolas (polimorfismo), de modo que modificando algo en la clase progenitora, se modifican automáticamente en todas las demás.
Ya se que un juego ni ningún programa es lineal, obviamente el programa va dando saltos de una rutina a otra o a bucles, pero sigo sin ver la utilidad de cambiar la forma de programar clásica por esto.

Tendría que ver un caso práctico.
 
Sigo sin ver las ventajas.

A ver, entonces lo de los objetos va referido a conjuntos de variables que definen "algo" dentro del programa?

Mas bien a un encapsulado en concreto de variables y funciones que tienen un propósito común. El hecho de poder así hacer plantillas, extensibles y aisladas, hacen que un programa de una cierta magnitud se vuelva mas estructurado.
 
Por ejemplo puedes hacer una clase progenitora para un NPC, y luego crear nuevas clases para NPCs diferentes, "heredando" todo el código previo de esa clase progenitora, añadiendo cosas o cambiándolas (polimorfismo), de modo que modificando algo en la clase progenitora, se modifican automáticamente en todas las demás.

shishi, parece el mundo real de los seres biologicos.
 
Lo "contrario" a POO se denomina programación imperativa, no lineal. La programación lineal es una rama del álgebra.

Haciendo referencia a que programar es "direccionamientos de memoria..." ¿no crees que es más sencillo hacer list.add(algo) que buscar memoria libre, reservarla, comprobar que puedo escrbir, meter el dato y mantener una referencia al siguiente hueco disponible?

Es más, si quiero que esa estructura List tenga una serie de características propias, ¿no crees que es más facil heredar otra estructura de ella, y cambiar sólo lo que necesito cambiar, y no tocar esa implementación?

Es más, ¿no es más sencillo estructurar el programa y agrupar las abstracciones en elementos (clases) comunes? Por ejemplo: esto es un servicio, esto es un repositorio, esto es un contenedor, esto es una vista... y dar los comportamientos adecuados y encapsularlo todo en su correspondiente lugar?

Todo esto se puede hacer en un lenguaje imperativo como C, desdr luego; pero es mucho más engorroso. De ahí que se introdujeran nuevos conceptos como la clase, la herencia o el polimorfismo para facilitar todo esto, y por consiguiente nacieron nuevos lenguajes.


Creo que las ventajas son obvias.
 
Lo "contrario" a POO se denomina programación imperativa, no lineal. La programación lineal es una rama del álgebra.

Haciendo referencia a que programar es "direccionamientos de memoria..." ¿no crees que es más sencillo hacer list.add(algo) que buscar memoria libre, reservarla, comprobar que puedo escrbir, meter el dato y mantener una referencia al siguiente hueco disponible?

Es más, si quiero que esa estructura List tenga una serie de características propias, ¿no crees que es más facil heredar otra estructura de ella, y cambiar sólo lo que necesito cambiar, y no tocar esa implementación?

Es más, ¿no es más sencillo estructurar el programa y agrupar las abstracciones en elementos (clases) comunes? Por ejemplo: esto es un servicio, esto es un repositorio, esto es un contenedor, esto es una vista... y dar los comportamientos adecuados y encapsularlo todo en su correspondiente lugar?

Todo esto se puede hacer en un lenguaje imperativo como C, desdr luego; pero es mucho más engorroso. De ahí que se introdujeran nuevos conceptos como la clase, la herencia o el polimorfismo para facilitar todo esto, y por consiguiente nacieron nuevos lenguajes.


Creo que las ventajas son obvias.

Muy buena explicacion.
 
No soy programador experto, pero lo que tengo entendido:

- Es un nivel de abstracción que ayuda a un desarrollo más organizado y eficiente. Y si son varios los programadores todavía es más adecuado.

- Permite una relación con el código más natural e intuitiva, puesto que vas creando elementos diferenciados y con "personalidad" propia. No nos relacionamos con el mundo desde una interpretación secuencial, sino que saltamos entre "entidades" (objetos) que tienen relaciones con otras entidades.

- Si tuvieras que poner por escrito todo lo que hiciste la semana pasada te sería más práctico hacerlo a través de un esquema organizado por entidades (trabajo, compras, familia, amigos, ocio...) que mediante una escritura secuencial, pues conforme añadas elementos vas a recordar otros que vas a poder situar con más facilidad si la estructura base es esquemática.
 
Lo tienes todo más encapsulado y organizado. Si has hecho programas complejos con structs en c te habrás dado cuenta de que algunas funciones se empiezan a hacerse una bola de nieve cuando tienes que pasar varias estructuras por referencia y con escalares.

Las clases te permiten meter en un contenedor tanto los datos como los procesos asociados a los datos, de manera que se puede acceder de una forma ordenada y el debut de simplifica, porque es como si estuvieses conectando "cajas negras".
 
Lo tienes todo más encapsulado y organizado. Si has hecho programas complejos con structs en c te habrás dado cuenta de que algunas funciones se empiezan a hacerse una bola de nieve cuando tienes que pasar varias estructuras por referencia y con escalares.

Las clases te permiten meter en un contenedor tanto los datos como los procesos asociados a los datos, de manera que se puede acceder de una forma ordenada y el debut de simplifica, porque es como si estuvieses conectando "cajas negras".
No soy programador experto, pero lo que tengo entendido:

- Es un nivel de abstracción que ayuda a un desarrollo más organizado y eficiente. Y si son varios los programadores todavía es más adecuado.

- Permite una relación con el código más natural e intuitiva, puesto que vas creando elementos diferenciados y con "personalidad" propia. No nos relacionamos con el mundo desde una interpretación secuencial, sino que saltamos entre "entidades" (objetos) que tienen relaciones con otras entidades.

- Si tuvieras que poner por escrito todo lo que hiciste la semana pasada te sería más práctico hacerlo a través de un esquema organizado por entidades (trabajo, compras, familia, amigos, ocio...) que mediante una escritura secuencial, pues conforme añadas elementos vas a recordar otros que vas a poder situar con más facilidad si la estructura base es esquemática.

Osea, que al final es simplemente una forma mas jerarquizada de organizar el programa, una forma de ordenarlo de forma mas eficiente dentro de nuestra cabeza tambien....seria algo asi como jerarquizar funciones y grupos de datos, trataandolos como "paquetes" dentro de una jerarquia de funciones y datos similares o relacionados...pero vamos, tampoco lo veo una revolucion....lo de reutilizar codigo y "encapsular" se ha hecho toda la vida usando funciones o subrutinas, supongo que esto es un paso mas alla.

Aunque claro, esto es como todo, hasta que no lo utilizas no le ves la utilidad...anda que no me tire años usando bucles FOR-NEXT complejisimos hasta que descubri para que servia el bucle WHILE :roto2:
 
Aparte de la herencia también puedes "sobrecargar" los operadores; por ejemplo, si tienes una clase de tipo imagen, vector o matriz, puedes "definir" el operator + para sumar imagenes, sumar vectores, matrices, vectores con matrices, etc.

Quizás a nivel de productividad, si usas un editor integrado o ide, cuando defines una clase, el editor te parsea el "esqueleto" de la misma y cuando estás codificando te permite autocompletar para llamar a una función miembro / método o variables privadas, publicas del objeto:

company.png
 
Volver