Fundamentos de POO [Por mí]

Anuncios

Fundamentos de la Programación Orientada a Objetos (FPOO)

Por: Felipe Ignacio Gómez Benavides
Ingeniero en Informática


Una pequeña introducción para empezar a familiarizarnos con los conceptos, ¿Qué es la programación orientada a objetos? Según Wikipedia es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Pero por qué es importante. Porque nos permite escribir líneas de código menos propensas a errores además de poder reutilizar el mismo para nuestra propia conveniencia.
Fundamentos de la POO:
La programación orientada a objetos tiene como conceptos fundamentales los conceptos de objeto y clase.
Un objeto es un ente que posee sus características propias (propiedades) y un conjunto de acciones que es capaz de realizar (métodos).
Una clase es un ente abstracto que permite declarar las propiedades y los métodos de objetos similares.
Un lenguaje de programación orientado a objetos debe permitir al programador realizar definiciones de clases, y construir objetos a partir de esas clases.
La POO es un paradigma de la programación de computadores; esto hace referencia al conjunto de teorías, estándares, modelos y métodos que permiten organizar el conocimiento, proporcionando un medio bien definido para visualizar el dominio del problema e implementar en un lenguaje de programación la solución a ese problema.

Esta manera de representar los problemas nuestros problemas cotidianos tiene características propias las cuales detallo a continuación:

• Encapsulación
• Herencia
• Polimorfismo

Encapsulación: se refiera a la capacidad de unir los datos y para poder manipularlos, estos no necesariamente están a la vista de todo el mundo. Básicamente lo que se hace es ocultar cierta parte de la información para exponer solamente lo más importante o con lo que el usuario interactuara por ejemplo, cuando yo prendo la tele lo que veo es la pantalla ya sea ver una película, jugar algún juego de video o simplemente ver tu programa de televisión favorito, en este caso a mi como usuario no me interesa ver como hace la televisión para mostrarme las imágenes lo que a mí me importa es que realice ese procedimiento, la TV tiene una especie de encapsulamiento ya que muestra solo lo realmente importante y no como lo realiza.

Herencia: se refiere a la capacidad de crear nuevas clases que estén basadas en otras de manera que la nueva herede todas o algunas características de la clase que ha heredado, pudiendo incluso cambiar el comportamiento de algunas de características propias de la clase base, por ejemplo, la clase mamífero seria nuestra clase base, de el podemos desprender dos sub-clases que podrían ser gato y perro, ambos heredan características propias tales como patas cola garras, etc. sin embargo, no son el mismo tipo y esas son las características que pueden variar en cada tipo de representación que se haga.

Polimorfismo: es la capacidad de implementar de forma peculiar algunas de las características que tienen las clases, de forma que cuando necesitemos usarlas no nos preocupe la implementación interna que posean, lo que realmente nos interesa o nos debe importar es que podemos usar esas características, por ejemplo, tenemos clase Animal de ella desprendo las clases mamíferos y aves. Yo puedo darle una instrucción a ambas que sea mover, es el mismo mensaje para ambas, sin embargo, ¿lo harán de igual manera? A eso se refiere el polimorfismo a ocultar el estado de los objetos.

Pero... ¿Qué son los objetos?

Un Objeto es una entidad de la vida real, podemos mirar a nuestro alrededor y darnos cuenta que muchos de los lugares que nos parecen cotidianos pueden ser objeto de análisis y en los cuales podemos determinar entidades clases atributos y ver sus relaciones. Para aclarar más el punto puedo decir que los objetos poseen estados, comportamientos e identidades.

Clases

Una clase es una definición abstracta de un objeto, define la estructura y el comportamiento compartidos por los objetos. Sirven como modelos para la creación de objetos.
De cierta forma, las clases se pueden ver como plantillas, moldes o esquemas de un conjunto de entidades de la cual se crearan instancias (objetos)
Métodos
Los métodos nos indican el comportamiento o estado que un objeto tiene para realizar y el conjunto de métodos nos indican la acción que va a realizar como por ejemplo el objeto balón tiene distintas acciones como rodar, moverse, botar.

Una ventaja de la POO frente al paradigma algorítmico es la facilidad que brinda a través de sus herramientas, de concebir, analizar, modelar, diseñar e implementar el mundo real de manera fiel a como se presenta en la realidad; el paso que hay desde la concepción y asimilación del problema hasta la implementación del mismo es un proceso que se hace de manera casi natural. Esto porque el mundo está lleno de objetos reales, los cuales se puede representar como tales en una solución computarizada. Las clases se relacionan entre sí, de varias maneras diferentes, en este apartado se destacan, la asociación, agregación, composición y especialización / generalización.
Diagramas de casos de uso: Un Diagrama de Casos de Uso muestra la relación entre los actores y los casos de uso del sistema
Diagrama de Secuencia: Un diagrama de Secuencia muestra una interacción ordenada según la secuencia temporal de eventos
Diagrama de Colaboración: Un Diagrama de Colaboración muestra una interacción organizada basándose en los objetos que toman parte en la interacción y los enlaces entre los mismos (en cuanto a la interacción se refiere).
Diagramas de Estado: Un Diagrama de Estados muestra la secuencia de estados por los que pasa bien un caso de uso, bien un objeto a lo largo de su vida, o bien todo el sistema.
Diagramas de clase: Un diagrama de clases sirve para visualizar las relaciones entre las clases que involucran el sistema, las cuales pueden ser asociativas, de herencia, de uso y de consentimiento.



Concluyendo el tema cabe la pregunta ¿pero por qué POO?, porque es más parecido al mundo real ya que nos permite realizar representaciones más complejas excelentes para negocios de clientes o por qué no, para nuestros propios negocios además de que dos grandes plataformas ya han adoptado este paradigma como son Java y .NET

Lo cree para mi Universidad pero si a alguien de Taringa! le puede servir yo feliz

9 comentarios - Fundamentos de POO [Por mí]

@Webotech +1
dos grandes plataformas ya han adoptado este paradigma como son Java y .NET


.net no es un lenguaje, es un framework de comunicación... C# es un lenguaje OO, la contra de micro$oft a java
@marianolinx -5
como diria mi amiga juana banana:
y de que mierd me sirve esto?
@KamNet +1
Webotech dijo:
dos grandes plataformas ya han adoptado este paradigma como son Java y .NET


.net no es un lenguaje, es un framework de comunicación... C# es un lenguaje OO, la contra de micro$oft a java


Webotech .NET si es una plataforma , Tampoco es framework de comunicacion , mas bien el framework es una de las dos cosas que componen a la plataforma .net y en concreto el framework es un conjunto de clases bases que nos permiten utilzarlas para desarrollar nuestras aplicaciones ( para no tener que reinventar la rueda)
y c# no es la contra a java , como dice el compañero que posteo el articulo habla de la POO y la poo es un modelo q no le pertene a nadie en particular asi que cualquier lengueja puede utilizar este paradigma,
mas bien java y c# y muchos otros lenguajes implementan la POO
@emanon75 -1
marianolinx dijo:como diria mi amiga juana banana:
y de que mierd me sirve esto?


si no sos programador como que de nada.
@emanon75 +1
muy interesante, muy bueno
@Webotech
KamNet dijo:
Webotech dijo:
dos grandes plataformas ya han adoptado este paradigma como son Java y .NET


.net no es un lenguaje, es un framework de comunicación... C# es un lenguaje OO, la contra de micro$oft a java


Webotech .NET si es una plataforma , Tampoco es framework de comunicacion , mas bien el framework es una de las dos cosas que componen a la plataforma .net y en concreto el framework es un conjunto de clases bases que nos permiten utilzarlas para desarrollar nuestras aplicaciones ( para no tener que reinventar la rueda)
y c# no es la contra a java , como dice el compañero que posteo el articulo habla de la POO y la poo es un modelo q no le pertene a nadie en particular asi que cualquier lengueja puede utilizar este paradigma,
mas bien java y c# y muchos otros lenguajes implementan la POO


Primero no dije q .net no era una plataforma dije q no era un lenguaje de programación, no podes decir que es una "plataforma orientada a objetos" son conceptos incompatibles, .net tiene soporte para visual basic y visual basic es orientado a eventos, y si nos ponemos detallitas ni java es orientado a objetos puro pero no viene al caso, y con la definición de framework estas mandando cualquiera un framework no es un conjunto de clases.. un framework como su nombre lo dice es un marco de trabajo, puede incluir librerías, metodologías de trabajo y muchas cosas mas.. las clases son inherentes de la poo, y si.. el .NET original nació como un framework de comunicación para desarrollar middleware y después se le agregaron otra cosas
@KamNet
"plafaforma orientada a objetos" (¿decime en donde escribi eso?), ¿visual basic orientado a eventos? (al ser POO existen los eventos, y los eventos son miembros de clase(atributos,constructores,propiedades,desctructores,funciones,metodos , manejadores,eventos) mas bien visual basic puede contener eventos (pero esto de los eventos aca no viene al caso) , java si es orientado a objetos pq en java encapsulas (protejes tu variables(atributos) del usuario final) , puedes heredar es mas se pertiten multiples herencias , y tambien puedes crear varias clases herendando de una misma clase haciendo que puedas implementar los metodos o funciones de dichas clases de forma diferente osea ( el polimorfismo), y como debes de saber si se tratan minimo estos tres conceptos se cataloga como POO.

el Framework NO es un conjunto de clases? , por eso dije que el framework se compone de dos cosas en concreto que es el lenguaje comun de ejecucion (CLR) y otro conjunto que en el que solo mente 1 cosa ( clases bases ) pero bueno mentemos los compiladores de cada uno de lenguajes que hoy x hoy pueden generar codigo msil (pues el lenguaje intermedio) ,( es mas no se si ya existe pero si ya han hecho compiladores de java o php que puedan general codigo msil entonces welcome a .NET)

"Primero no dije q .net no era una plataforma dije q no era un lenguaje de programación si si sorry no lei bien .

Pero bueno el objetivo no es polemizar solo opinar , aca nadie tiene la ultima palabra , saludos amigazos
@marianolinx -1
emanon75 dijo:
marianolinx dijo:como diria mi amiga juana banana:
y de que mierd me sirve esto?


si no sos programador como que de nada.

pasate por mis posts, y sigo con la duda de si de verdad sirve de algo esto
@Webotech
KamNet dijo:"plafaforma orientada a objetos" (¿decime en donde escribi eso?), ¿visual basic orientado a eventos? (al ser POO existen los eventos, y los eventos son miembros de clase(atributos,constructores,propiedades,desctructores,funciones,metodos , manejadores,eventos) mas bien visual basic puede contener eventos (pero esto de los eventos aca no viene al caso) , java si es orientado a objetos pq en java encapsulas (protejes tu variables(atributos) del usuario final) , puedes heredar es mas se pertiten multiples herencias , y tambien puedes crear varias clases herendando de una misma clase haciendo que puedas implementar los metodos o funciones de dichas clases de forma diferente osea ( el polimorfismo), y como debes de saber si se tratan minimo estos tres conceptos se cataloga como POO.

el Framework NO es un conjunto de clases? , por eso dije que el framework se compone de dos cosas en concreto que es el lenguaje comun de ejecucion (CLR) y otro conjunto que en el que solo mente 1 cosa ( clases bases ) pero bueno mentemos los compiladores de cada uno de lenguajes que hoy x hoy pueden generar codigo msil (pues el lenguaje intermedio) ,( es mas no se si ya existe pero si ya han hecho compiladores de java o php que puedan general codigo msil entonces welcome a .NET)

"Primero no dije q .net no era una plataforma dije q no era un lenguaje de programación si si sorry no lei bien .

Pero bueno el objetivo no es polemizar solo opinar , aca nadie tiene la ultima palabra , saludos amigazos


todo bien pero tenes miles de conceptos mal, no por tener encapsulamiento un lenguaje es orientado a objetos, Java no es orientado a objetos puro porque permite tipos de datos simples (integer, boolean, long etc..) y tiene estructuras de control implementadas como parte del lenguaje, en un LOO puro TODO y absolutamente TODO son objetos, mensajes y métodos, no existe otra cosa, el unico lenguaje orientado a objetos puro es Smalltalk, y no sirve es una bosta.. java es un hibrido, NO permite herencia multiple (permite implementar interfaces que es algo que se podría llegar a decir q es parecido, pero en realidad no es) .. y ese no es el concepto de polimorfismo.. el polimorfismo nos permite enviar un msj a una clase superior y dejar que todas las clases que heredan de la misma interpreten el mensaje según corresponda.

Respecto al framework a lo que voy es que es mucho mas que un conjnuto de clases, al decir eso lo estas restringiendo a un framework para lenguajes OO,

Lo de visual es asi, que vos tengas manejo de eventos no significa que sea un lenguaje orientado a eventos, en visual todo son eventos.. se programa orientado a eso porque es un lenguaje grafico, todo lo despiertan los eventos, en java no.. si tenes eventos pero los eventos son parte de un patrón de diseño de la implementación de java (observer si mal no recuerdo)

http://www.bloginformatico.com/visual-basic-inicios-en-la-programacion-orientada-a-eventos.php


ahi tenes para leer si te interesa.

Obvio todo bien no es para crear polémica, es para no informar mal, me imagino que sos lo contrario a mi debes ser programador autodidacta o algo de eso yo soy mas teórico.. (soy licenciado tengo q ser teórico)

Saludos!