Programación orientada a objetos: Los 4 pilares

Programación orientada a objetos: Los 4 pilares

enmanuelm19@gmail.com2019-05-04 23:27:20 UTC

Los 4 pilares

En general dentro del mundo de desarrollo de software se suelen definir conceptos con palabras algo complicadas, estare dedicando algunos post a explicar de la manera mas sencilla que pueda dichos conceptos.

En este post trataremos el significado de ciertas palabras dentro del contexto de la programación orientada a objetos.

Programación orientada a objetos

La programación orientada a objetos es un paradigma en el cual se intentan representar los objetos de la vida real dentro del codigo, al identificar los caracteristicas y comportamientos de los objetos en la vida real y representarlos dentro del codigo como atributos y metodos de una clase.

Un ejemplo sencillo seria tratar de representar los animales dentro del software. Podemos reconocer que atributos hacen parte general de los animales como la cantidad de extremidades, pelaje y comportamientos como sonidos, movimientos, etc.

La programación orientada a objetos se basa en 4 pilares esenciales, que se desglosaran en este post mas adelante.

Dentro del codigo entonces podemos representar esto de la siguiente manera:

class Animal
    attr_accessor :legs, :fur, :sound

    def run
    end
end
1. Abstracción

La palabra abstracción se refiere a la capacidad de disminuir la complejidad de algo, desde la definición a la programación orientada a objetos esto significa que para la representación de los objetos de la vida real es necesario tener un contexto que nos permita reducir su complejidad, por ejemplo, dado el objeto una persona esta se puede ver representada de manera distinta segun su contexto:

  • Contexto de aplicación de historia medica:

    Para el caso de una historia medica podemos sacar de una persona propiedades como el tipo de sangre, la altura, el peso, etc.

class Person
    attr_accessor :blood_type, :height, :weight
end
  • Contexto de aplicación de recursos humanos:

    Para el caso de una aplicación de recursos humanos no es necesario la propiedades de la persona mencionada anteriormente, sino, por ejemplo, el identificador, correo, nombre, telefono, etc.

class Person
    attr_accessor :identifier, :email, :name, :phone
end
2. Encapsulación

La encapsulación nos permite definir el nivel de acceso que tienen los objetos entre si, con ello podemos tener control de como un objeto interactua con otro, por ejemplo, supongamos que como persona 1 deseo ganar peso, cualquier otra persona no podria ganar peso por mi, es por ello que los lenguajes de programación orientado a objetos como ruby tienen palabras reservadas para definir el acceso de los objetos.

  • private: Este es el nivel de acceso más privativo, solamente el objeto en si tiene acceso a los metodos y atributos que se definan bajo esta palabra reservada
class Person
    private
        def gain_weight
        end
end
  • protected: Este nivel de acceso restringe a solo los objetos del mismo tener acceso a los metodos y atributos que se definan bajo esta palabra reservada, un ejemplo seria, la habilidad de las personas de reproducirse, esta puede ser solo ejecutada por otra persona y no cualquier otro objeto.
class Person
    protected
        def reproduce(other_person)
        end
end
  • public: Este nivel de acceso en ruby no es necesaria representarla con una palabra reservada, debido a que todo metodo y/o atributo que no este bajo las palabras reservadas anteriores son de acceso publico, y cualquier objeto puede comunicarse con este.
class Person
        def speak
        end
end
3. Herencia

El mayor poder que nos da la herencia es la reutilización de código, cuando se quiere crear una clase que es un poco diferente a una existente no hay necesidad de repetir todo el código, puedes heredar una clase existente y crear la funcionalidad extra. Si por ejemplo tenemos un sistema de deportes, no es necesario repetir código para representar los distintos deportes, por ejemplo:

class Sport
    attr_accessor :name, :id, :score
    def play
        ...
    end
end

class Football < Sport
    def play
        puts "kick a ball"
    end
end

class Basketball < Sport
    def play
        puts "throw a ball"
    end
end
4. Polimorfismo

El polimorfismo es la habilidad que tiene un programa de detectar la "forma" real de la clase de un objeto y llamar su implementación, inclusive cuando cuando su "forma" es desconocida para el contexto en que se ejecuta, para verlo con mayor claridad colocare un ejemplo partiendo del anterior:

Dado un evento deportivo necesitamos que los deportistas jueguen, al evento poco le importa que deporte sea el que se juegue mientras sea un deporte.

class SportEvent
    # sports = [Football, Basketball]
    def play_events(sports)
            sports.each(&:play)
        end
end

En el código se puede observar que indistintamente los deportes que conforme el evento, el evento deportivo podra indentificar y ejecutar el método play en cada una de las subclases de deporte.

Esto es un resumen de los pilares en los que se basa la programación orientada a objetos, espero haber explicado los conceptos de manera simple. De todas maneras si tienes dudas con respecto a un termino siempre puedes comentar la sección de abajo.


Compartir