Introducción a la Programación Orientada a Objetos

Introducción

Emprender un proyecto de desarrollo de software, es un reto que nos lleva a pensar en la elaboración de un producto final que cumpla con las características de un software exitoso: Solido, robusto, confiable, escalable, interoperable y lo mejor de todo para quienes estamos desarrollando esgenerar código que pueda ser reutilizado.

Bajo esta premisa surge la necesidad de trabajar con una filosofía de programación orientada a objetos. Ahora bien, en este momento se preguntaran, ¿una filosofía?, la respuesta es sencilla, antes de aprender a programar en un lenguaje orientado a objeto como C# o Vb.net, es importante aprender a pensar, bajo un modelo de desarrollo, con su teoría y su metodología, como lo es la programación orientada a objetos, para encontrar una solución a un problema que se plantee.

Conceptos Fundamentales

Clase:

Vamos a iniciar este concepto con un ejemplo: Para construir un modelo de automóvil se deben haber plasmado una serie de características y funcionalidades que estarán guiando la construcción del mismo. Cada vez que se procede a crear este mismo modelo de auto, se deberá cumplir con las características y funcionalidades predefinidas.

En programación orientada a objeto, una clase define las características y comportamientos comunes de los objetos, en otras palabras la clase es el molde para la creación de los mismos. Para nuestro ejemplo,un plano del modelo del auto es el símil de la clase auto. Aunque la clase especifica las características propias del objeto cada implementación es única tal como sucede en el mundo real pues el valor de sus atributos puede variar, por ejemplo el color, kilómetros recorridos, etc.

Objeto:

Los objetos tienen características y comportamientos que están definidas de la clase de donde se instancian, sin embargo, aunque varios objetos provengan de una clase pueden tener identidad propia; en otras palabras: La identidad es el valor o estado de la propiedad que permite a un objeto diferenciarse de otros. En programación orientada a objetos cada Auto se conocerá como una instancia de la clase Auto.

Pilares de la Programación Orientada a Objetos

Es importante entender los cuatro pilares de la programación orientada a objetos: abstracción, encapsulación, herencia y polimorfismo.

Abstracción:

Como se explico anteriormente, los objetos tienen atributos o características que representan los datos asociados al mismo, estos atributos y sus valores en un momento dado, determinan el estado de un objeto. De igual forma los objetos tienen funcionalidades o comportamientos llamados métodos en la programación orientada a objetos. Con estos métodos accedemos a los atributos de una manera predefinida y se implementan el comportamiento del objeto.

Cuando desarrollemos un software, crearemos muchos objetos, que en algún momento vamos a requerir para resolver una situación planteada. Es aquí donde entra el concepto de abstracción. Con la abstracción podremos tomar lo que hace falta de un objeto del mundo real para el sistema en un momento dado, es captar las características esenciales de un objeto, así como su comportamiento.

Veamos como lo aplicamos a un ejemplo. En un taller mecánico se desea registrar los automóviles que ingresan al mismo. Es decir que vamos a tomar para registro de ingreso Marca, Modelo, Año, Cliente, Rif, Dirección Fiscal, teléfono del cliente. En este Caso tomamos del objeto automóvil solo los datos que necesitamos Marca, Modelo y Año. Del Objeto Cliente, el cliente su RIF, dirección fiscal y teléfono.

Encapsulamiento

El objetivo es «meter todo en una capsula», juntar las piezas que hacen que funcione como un todo. Ejemplo meto el motor dentro del auto.

Polimorfismo

Lograr que un objeto se comporte como si fuese una implementación de otra clase. Ejemplo: Un carro comportándose como una grúa.

Herencia

Tomar características y funcionalidades definidas en otras clases. Ejemplo: Auto hereda de vehículo motorizado. Como grúa también hereda de vehículo automotor.

Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes.

Autor: arevalomaria

Ingeniero de Sistemas, Magister en Gerencia y Tecnologia de la Informacion,

135 opiniones en “Introducción a la Programación Orientada a Objetos”

  1. Buenas tardes !!!

    En el cuarto párrafo donde esta el ejemplo del taller mecanico:

    «En este Caso tomamos del objeto automóvil solo los datos que necesitamos Marca, Modelo y Año. Del Objeto Cliente, el cliente su RIF, dirección fiscal y teléfono.»

    no deberia decir :

    En este Caso tomamos de la clase automóvil solo los datos que necesitamos Marca, Modelo y Año. Del Objeto Cliente, el cliente su RIF, dirección fiscal y teléfono.

    1. “En este Caso tomamos del objeto (la cosa real que rueda) automóvil solo los datos que necesitamos Marca, Modelo y Año. Del Objeto (La persona real) Cliente, el cliente su RIF, dirección fiscal y teléfono.”

      1. No creo que esté correcto usar la palabra «objeto» en este contexto, para ese fin. Resulta confuso!

      2. De cualquier forma está bien, una clase es una descripción genérica de varios objetos que tienen un comportamiento similar

      3. Puede resultar confuso, pero recuerden que en POO todo es un objeto. Las intancias son objetos, los atributos en si son objetos, las clase son objetos, los mensajes entre objetos son objetos… en fin todo es un objeto 😉

  2. Hola a todos,

    En vez de «Tomar características y funcionalidades definidas en otras clases. Ejemplo: Auto hereda de vehículo motorizado. Como grúa también hereda de vehículo automotor.», propongo: «Tomar características y funcionalidades definidas en otras clases. Ejemplo: Auto hereda de vehículo motorizado (… una serie de atributos como Número de puertas, tipo de bomper, etc.). Como grúa también hereda de vehículo automotor.», es todo.

    Exitos a todos !

    Wilson VB

    1. mira abstracción quiere decir que sacas solamente lo escencial de un objeto por ejemplo al momento de definir un objeto persona, le asignas los atributos estatura, peso, edad, etc. y sus correspondientes metodos o acciones.

      saludos.

  3. No me gusta cómo explicas el polimorfismo. El concepto se refiere a una característica de los lenguajes orientados a objetos de resolver dinámicamente el significado del nombre de un método, el cuál dependerá del estado del programa. Por ejemplo, el método Acelera
    está presente en todos los vehículos y tu puedes tener un ejemplar de la clase Persona, que mande llamar a Acelera. Dependiendo de en qué vehículo se encuentre, será la forma en la que el vehículo aumente su velocidad.

  4. La definición de ENCAPSULAMIENTO esta muy básica, y me atrevería a decir que no sirve como tal, ya que el encapsulamiento no permite diferentes niveles de acceso tanto a métodos como a variables declarados dentro de una clase. en el caso del ejemplo del auto podemos tener un método llamado public acelera(){ …} donde public nos indica que puede ser llamado desde cualquier parte fuera de la clase. Espero sirva mi aportación Saludos!!!

    1. Asi es ese es el proposito del polimorfismo. en resumen es reutilizar un nombre y firma de una operacion(nombre de función o subrutina) de una clase padre o superclase y cambiar el método ( la logica de implementación de esa función o subrutina) de la misma en la clase derivada o hija. ojo No confundir con la sobrecarga 😀

  5. ya conocía la POO, pero saber mas de ella es bueno; todos deberíamos saber un poco sobre este teme es muy bueno e interesante

  6. El aporte fue bueno pero creo que para los que tenemos un poco de conocimiento, esa información es muy vaga, y para los que no tienen nada de conocimiento al respecto creo que desearían que se profundizara mas en los puntos, creo que esto se podría llevar mejor si se extendiera, a la hora de hacer una publicación, un poco mas los ejemplos que damos, pero igual excelente aporte, porque sirvió de base para comenzar una lluvia de ideas, que facilito y enriqueció el tema.

  7. Me ha dejado un buen sabor de boca, ya tome mis notas de esto, y pues al siguiente curso, la ortografia creo que algunas palabras les falto entonacion o comas, digo no se si es ortografia o semantica o gramtica no se la verdad pero si lo lees como yo tres cuatro veces se entiende muy bien, hasta se siente muy entusiasmada la clase jajaja saludos

  8. En la explicación de Objeto dice:

    «En programación orientada a objetos cada Auto se conocerá como una instancia de la clase Auto.»

    Y según lo que he aprendido, ¿no debería ser de la clase Automóvil?

  9. Para un buen comienzo en desarrollo de software, esencial a tener en cuenta las diferentes características del articulo en mención!!

  10. Creo que este es un muy buen articulo basico, sin embargo pienso que en cuanto a los pilares de POO falto mucha mas claridad. Estoy total mente de acuerdo con los comentarios 10 y 12, ademas creo que el ejemplo dado por el comentario 10 esta mucho mas valido y claro que el que se da en el articulo.

    1. No estoy seguro de que esa sea la función del polimorfismo… No es responsabilidad del carro comportarse como una grúa…
      Creo que el polimorfismo es en realidad la capacidad del carro de poder recibir un mensaje que también aplica a la grúa, e interpretarlo como carro que es.

  11. La verdad todo el tema es bueno, pero para los que hasta ahora estamos viendo el tema es muy poca la explicación y tratar de utilizar el idioma científico de lo más básico aumentando su complejidad progresivamente para que no nos perdamos en las lecturas o escribir su significado entre paréntesis.

    1. Saúl, instanciar un objeto es crearlo. Al momento que pones ](si la clase es un Auto):
      Auto miAuto; /* Aquí solo estás declarando el objeto (apartando en memoria), pero no lo instancias o creas. Se puede decir que su valor es null y no puedes hacer mucho con él */
      Ahora si escribes:
      Auto tuAuto = new Auto(); /* Aquí lo estás instanciando o creando */

      Otro ejemplo parecido sería con un string o cadena de texto:
      String cadena; // Solo lo declaras
      String otraCadena = new String(«Hola mundo»); /* Lo estás instanciando. */

      Espero haber aclarado la duda. Saludos.

  12. Es importante aclarar desde un principio la diferencia que existe entre programación orientada a objetos y un lenguaje orientado a objetos.
    La programación orientada a objetos es una “filosofía”, un modelo de programación, con su teoría y su metodología, que conviene conocer y estudiar antes de nada. Un lenguaje orientado a objetos es un lenguaje de programación que permite el diseño de
    aplicaciones orientadas a objetos. Dicho esto, lo normal es que toda persona que vaya a desarrollar aplicaciones orientadas a objetos aprenda primero la “filosofía” (o adquiera la forma de pensar) y después el lenguaje, porque “filosofía” sólo hay una y lenguajes
    muchos.

  13. Muy buena la informacion, independientemente de que tenga suscosas confusas sirve muy bien para reafirmar lo que deberiamos de saber al menos sobre la POO..felicitaciones

  14. Muy bueno, sólo que tengo una duda, en el segundo párrafo de la introducción, está bien empleada la palabra –metodología– o debería de ser –método–.

    Por favor respondan sólo aquellas personas que hayan leído el libro de Corina Schmelkes “MANUAL PARA LA PRESENTACIÓN DE ANTEPROTECTOS E INFORMES DE INVESTIGACIÓN (Tesis), segunda edición, capítulo 9: método, página 52”

  15. Pingback: Anónimo
  16. Es importante destacar que he leido muchas teorias sobre programació orientada a objeto y con esta explicacion es que he podido comprender los 4 pilares de la OOP. de verdad me siento muy bien porque a pesar que tengo cierto tiempo utilizando estas metodologias de programacion, ahora es que vengo a comprender la teoria.

    Gracias Maria.

  17. Balla todo me va bien pero aun no puedo aplicar las caracteristicas «hereditables» no entiendo muy bien como aplicarlas … muy buena informacion un 10 🙂

  18. Gracias, grán material y es muy cierto que la bse de todo desarrollo implica conocer cada punto como uno e poder implemententarlo no de manera concreta pero si; aplicando los metodos que la P.O.O enseña.

  19. Excelente artículo, pero creo que la redacción, el exceso de términos y adornos lingüísticos, pueden llevar a la confusión, o mal interpretación del contenido, sobre todo, que esta información, es para algunos /Novatos/ un tanto difícil de digerir.

    Es solo un comentario, aun así, sin duda es un excelente contenido.

  20. Rescatando la frase que dice María “meter todo en una capsula”, no deja de ser verdad, ya que si tomamos el ejemplos del motor dentro del auto, estamos encapsulando dentro del auto, todos los atributos que componen el motor y sus funcionalidades. Esto con un único fin, el cual es mostrar al usuario final solamente lo que él va a utilizar.

    Ejemplo:

    Al usuario le interesa la funcionalidad de «prenderMotor»; en cambio, «controlarAceiteMotor» no le interesa.

    Espero se entienda.
    Saludos

  21. Buen Material, en un pequeño resumen diría que:

    Clase: Es el molde de que me permitirá crear objetos en adelante, posee atributos y métodos.

    Objeto: Es la instanciaición de una clase.

    Polimorfismo o métodos Sobrecargados: Es la propiedad que tiene un método, quien a pesar de llamarse igual realiza distintas funciones dependiendo de los parámetros recibidos.

    Abstracción: Es programar creando en un clase solo los atributos necesarios de la clase, no sobrecargar de atributos innecesarios

    Encapsulamiento: Es desarrollar clases, dejando solo disponibles como públicos los métodos necesarios, es decir, no todo debe ser publico.

    Herencia: Es la relación que existe entre 2 clases, donde una clase A hereda todos los métodos y atributos de una Clase B y ademas de esto puede contar con sus propios atributos y métodos. Ej Persona –> Empleado.

Replica a Gilberto Tovar Cancelar la respuesta