En la vida profesional de un programador creo que hay dos grandes momentos.
- El primero cuando descubre las funciones, como darle parametros y que estas devuelvan un resultado.
- El segundo y al que no todos llegan, es pensar en objetos.
Respecto a la programación funcional, la verdad que es muy sencilla y no tengo demasiado que decir. De la segunda, muy al contrario, es como un renacimiento de la programación, o al menos, asi fue para mi.
Antes de explicar que es, hay que saber algo mucho mas importante, que beneficios tiene hacer esto.
Cuál es la ventaja?
Por qué una persona deberia aprender a programar con objetos justo en el momento en que se siente cómodo programando, conoce las funciones, y hasta muy probablemente, ya tenga desarrollado un paquete de archivos con varios pedazos de código comunes como ser conexiones a bases de datos, pantallas de login, listados, etc.
Algunas ventajas que se me ocurren son:
- Es hacia donde va el mundo, ir en contra de una corriente tan fuerte, nunca es buena idea (a menos que seas el creador de un nuevo paradigma que supere a este!).
- Es mas prolijo y escalable.
- Es mas cómodo.
- Es mas seguro.
- Lo aprendes para un lenguaje y es muy similar en el resto, con lo cual reusas mucho conocimiento.
- Vas a sacar provecho de frameworks que hacen mucho del trabajo repetitivo de la programación.
- Como todas las cosas buenas, es un camino de ida :-).
Para no irme mas por las ramas, diria que: Aprender a programar con objetos es el equivalente a dejar de maquetar con tablas y empezar a usar CSS.
Qué es la POO?
Bueno, a cada chancho le llega su San Martín y a mi me toca tirar una definición, no quiero ni ver que dice en la wikipedia para no contaminarme y poder explicarlo con mis palabras. Igual ustedes, vean como lo explican formalmente.
Para mí la POO es una forma de organizar todo el despelote de código que tenemos cuando creamos una aplicación, nada mas que eso, pero tampoco nada menos. Y de las formas que yo conozco, esta es la mejor por lejos.
Olvidate de todo lo que sabes
Voy a poner un ejemplo, supongamos que nos contratan para crear una aplicacion que se va a encargar de gestionar los pedidos de empanadas en una empresa. Palabras mas, palabras menos, este es el pedido del cliente:
Necesito un sistema para que los empleados de mi empresa elijan cuantas empanadas y de que sabor y tipo de cocción (horno o fritas) quieren comer en el almuerzo para asi, poder hacer un único pedido y ahorrar en llamadas telefónicas.
Primer conclusion: nuestro cliente es una rata apestosa :-P.
Sigo ahora en serio, supongamos que ya leimos todas las ventajas de la POO, y estamos de acuerdo en que va a ser mucho mejor hacerlo bajo este paradigma, asi que vamos a hacer este sistema con objetos. Cual es el primer paso?
Detectar los objetos
Para descubrir esto nos basamos en el pedido del cliente. Esto no es una ciencia exacta, cada uno elegira los objetos que crea pertinentes, los cuales pueden diferir y no necesariamente tiene que haber una forma correcta y otra incorrecta. Cada una tendrá sus ventajas y desventajas respecto a las demas.
Volviendo al pedido, voy a remarcar los que para mi son los objetos de nuestro sistema:
Necesito un sistema para que los empleados de mi empresa elijan cuantas empanadas y de que sabor y tipo de cocción (horno o fritas) quieren comer en el almuerzo para asi, poder hacer un unico pedido y ahorrar en llamadas telefonicas.
Ya tenemos los objetos!
Ahora vamos a entrar en detalle, un poco nomás, no mucho. Por qué elementos estan formados estos objetos? Es decir, que atributos tiene cada uno:
- Empresa
-
- Nombre
- Direccion
- Telefono
- Empleado
-
- Nombre
- Apellido
- Pedido
-
- Empresa
- Empanada
-
- Sabor
- Coccion
Y ahora?
Y ahora paramos la pelota un poco, pensamos todo esto que esta aca, y en unos dias la seguimos. El proximo paso va a ser identificar que operaciones (llamadas métodos) va a realizar cada objeto. Por poner un ejemplo, el objeto Empleado va a ser capaz de crearse, modificarse y eliminarse, pero eso va a ser mas claro cuando lo haga en el código.
Just one more thing
Esto es un detalle teórico, pero vale la pena aclararlo. A veces van a escuchar que se refieren a los objetos como clases, la clase Empleado, la clase Pedido, etc.
Cuidado, clase y objeto no es lo mismo. La diferencia es, que una clase es el objeto sin instanciar (osea nadie lo creo todavia, solo está definido), y el objeto es la clase una vez ya instanciada en la memoria. Ojo con eso, pregunta de examen!
Ahora el protagonismo es suyo, pregunten lo que quieran :-)
Tendrías que haber largado con el tuto hace tres meses! Ahora es muy tarde, ya aprendí a costa de un porcentaje mas que importante de mis neuronas.
Pregunta, y si quiero una gaseosa con mis empanadas? :P
Hubieras preguntado bolas tristes :P
Lo de la gaseosa lo dejamos para demostrar la escalabilidad de trabajar con objetos ;-).
Como lo comentas, uno se siente distinto cuando se da cuenta la diferencia que representa programar de una u otra forma, y al encontrar solo ventajas en la POO te hace sentir mejor.
Pero ahora, tengo miles (no tantas no) de funciones hechas, o sabidas de memoria. A problemas simples, soluciones simples, y me lleva 5 minutos hacerlo con alguna funcioncita mas o menos adaptada segun el caso. Y a veces crear una nueva clase sumado a la mala costumbre hacen que me lleve mas tiempo y lo deje de lado. :S
A manera de practica, y para ir creando un repositorio de clases, voy mezclando de a poquito y ya dejando clases genericas para reutilizar en otro momento. Creo que en algun momento ya voy a pensar 100% en objetos el 100% de mi tiempo.
Es completamente cierto lo de la escalabilidad, cuando estan bien definidas las clases es una pavada agregar o modificar propiedades/eventos/metodos.
#Adrian: A mi me paso exactamente lo mismo, hasta que empece a usar CakePHP :-).
Y en el fondo, este texto y los que le sigan, van a ser una promocion encubierta apra que los desarrolladores se animen a usarlo ;-).
Si, creo que algo de promocion habia notado. :P
Me podrias indicar cual seria una clase para el ejemplo que diste?
Las clases son: Empresa, Empleado, Empanada y Pedido, son las mismas que los objetos, solo que aun no las instanciaste, recien cuando ejecutas el constructor de una clase (que justamente, construye al objeto partiendo de la matriz que es la clase) esta crea un objeto.
Aguante CakePHP ;)
aguante Code Igniter ;P
Guido, me sumo :P
Chicos chicos, no se peleen, se sabe que CakePHP es mejor…
:P
hola chicos este programa esta de pocas pocas
Hola Diego!
Un par de comentarios:
* la _programación funcional_ es otra cosa (implementada en lenguajes como LISP, Erlang o Haskell). Programar “sin objetos”, en general, es _programación estructurada_.
* Se dice que una de las ventajas de la OOP es la *extensibilidad*. El término “escalable” tiene más que ver con la performance en cuanto al hardware.
* Guarda con Ruby, donde la distinción típica Clase/Objeto tiene un significado totalmente distinto
Saludos!
Gracias Manuel, cuando sea grande quiero ser como vos =P
ni lo intentes, no vale la pena. Lo que sí podés hacer es leer “Object oriented software construction” (http://archive.eiffel.com/doc/oosc/)
1200 páginas de sabiduría objetosa.
PUEDO CONSIDERAR ESTO COMO UNA OPCION CUANDO CONOZCA LA GLORIA DE SER UN BUEN PROGRAMADOR, SIN EMBARGO ME CONVENCISTE CON UN PAR DE COSAS: TU DEFINICON DE P.O.O Y LO Q CONSIDERAS AL CLIENTE…
cque crea mas informacion ya que es un uso muy imprtante mas si es estos contrastes.
tambien deberia poner aplicaciones respecto a lo que se plantea cada una de ellas
De todos estos comentarios solo son falsas deberian de hablar sobre la informacion no de tonterias. pero yo creo que es ta informacion es muy util y mas que nada la mas importante
#flor: relajaaaaaa, no todo es programacion ;-).
Una ventaja de la POO es que tambien hay mucho camino recorrido, mucha metodologia.
Ademas algo muy importante es que es mas intuitivo una vez que logras pensar en objetos, si el modelo esta bien hecho es muy probable que alguien que no lo conoce lo agarre y lo entienda sin mayor difecultad.
Voto muy a favor del post que en lugar de hacer copy paste de definiciones tecnicas usaste palabras tuyas para que se entienda.
Diego, eres el mas vivo ejemplo del programador de mis sueños… ahora se que existe.
Alguna recomendacion para “olvidarme de todo lo que se” ? Hace tiempo estoy tratando de tomarle la mano a esto de la POO pero no termina de cerrarme!
LO QUE ME GUSTÓ:
El estilo “irreverente” pero …… ¡¡ super claro ! de la POO, así creo k los chavos jóvenes k se inician en el mundo abstracto y a veces insufrible de la Progra se animarán a segoir estudiando
LO K NO ME GUSTÓ:
y…………. lo demás?? Si apenas estábámos empezando… yo necesito todo lo de POO !!! Como le hago??? lo publicaS, me lo envías ??? que sigue ??
esto no me sirve para nada
#esteban: Ajá, y porque no preguntas o propones cosas en lugar de quejarte?
La idea de que haya comentarios es que estos sean constructivos…
El cuerno..ya no seas neural y dinos que aprendiste eso con java :D
Y.. gran parte de la teoria de objetos si, la aprendi gracias a Java…
y donde estan las desventajas………..?
no ps su pag. esta bien chida me ayudoa comprender siertas cosas q no comprendia sobre ese programa
pero ahora ya lo entendi ps grasias a q esta bien explicado
¡GRASIAS!!
Me gustaria q me ayudaras, con un curso q tengo de programacion orientada a objetos te estare mandando mails, gracias
Diego celebro que haya gente dispuesta a poner en claro cuestiones tan discutidas como el concepto de clase y objeto. Y por supuesto los conceptos vertidos acerca de la POO en general también me parecieron de muy respetable calidad e interés técnico para quienes nos dedicamos a desarrollar sistemas. Felicitaciones por el artículo y no le aflojes, seguí a sí loco, va de pelos la cosa!
Cuando gustes, recibiremos bien la PARTE II.
Saludos
Esteban Schiavi
DIEGO DIME PORFA CUALES SON LAS DESVENTAJAS
Desventajas: Al ser una forma de organizar el código, puede no ser lo mas eficiente para algún caso muy puntual.
Trabajar con objetos es muy cómodo cuando es proyecto apenas grande en adelante. Si es una cosa de pocas lineas, no es necesario, aunque una vez que se te pega la costumbre, ya lo haces en todo, como con la última clase que liberé: http://e.leven.com.ar/u2bapi/
Un saludo, Diego
Pingback: Serial Blogger » Archivo » Buscador DRY
Hola soy tito creo que aki puedo aprender algo ya que empece hace unos días a ver programación orientada a objetos y creo que lo veo dificíl si de pronto tienen por ahí apuntes que me pueden servir y me los pueden enviar porfa haganlo al correo siguiente robertom3431@latinmail.com se los voy a agradecer un monton…………………..!
POR FAVOR HAGANLO……………………………