0% encontró este documento útil (0 votos)
73 vistas13 páginas

Pilares de la Programación Orientada a Objetos

La programación orientada a objetos es un paradigma de programación basado en la creación de objetos que pueden contener datos y funciones. Se basa en principios como la abstracción, encapsulamiento, herencia y polimorfismo, permitiendo que el código sea reutilizable y organizado.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
73 vistas13 páginas

Pilares de la Programación Orientada a Objetos

La programación orientada a objetos es un paradigma de programación basado en la creación de objetos que pueden contener datos y funciones. Se basa en principios como la abstracción, encapsulamiento, herencia y polimorfismo, permitiendo que el código sea reutilizable y organizado.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Programación orientada a objetos

 ¿Qué es?
La programación orientada a objetos es un paradigma de programación basado en la creación de
objetos que pueden contener datos y funciones.
Se dice que la programación orientada a objetos busca que representemos nuestro código y
algoritmos con objetos, como en la vida real.
Este paradigma está basado, principalmente en los principios de abstracción, encapsulación o
encapsulamiento, herencia y polimorfismo
El propósito central de la programación orientada a objetos es que los objetos que definimos para
nuestros algoritmos sean independientes, que no expongan sus detalles y que se puedan usar e
integrar con otros objetos.
Un objeto es una combinación de propiedades o atributos que describen al objeto y una serie de
métodos o acciones que puede ejecutar el objeto. Cada objeto en nuestro programa es capaz de
almacenar información en sus propiedades y de modificarlas de manera independiente a otros
objetos. Esto quiere decir que aunque tuviera dos objetos similares, digamos dos marcadores, cada
uno puede modificar sus propiedades sin que estas modificaciones afecten al otro objeto, aún
cuando ambos son del mismo tipo.
La POO permite que el código sea reutilizable, organizado y sencillo de mantener. Y es que sigue el
principio de desarrollo de software empleado por muchos programadores DRY (Don’t Repeat
Yourself), para no duplicar el código y crear programas eficientes. Asimismo, previene el acceso no
deseado a los datos o la exposición de código propietario a través de la encapsulación y la
abstracción.

 Estructura de la Programación Orientada a


Objetos
Por otro lado, la Programación Orientada a Objetos se caracteriza por contar con
una estructura particular que permite gestionar apropiadamente todos los datos
correspondientes a cada objeto, para clasificarlos de una manera rápida y
efectiva, así que es posible distinguir las siguientes categorías:

Clases
Las clases son todos los tipos de datos establecidos previamente por el
programador, que sirven como un modelo para cualquier objeto incluido en el
software, así como también para los métodos individuales o secuencias lógicas.
Objetos
Cabe destacar que los objetos son los elementos presentes dentro de cada clase,
los cuales brindan la posibilidad de separar cada una de las partes de un
programa, lo que facilita notablemente su desarrollo y su actualización, así
mismo tanto los objetos como las clases incluyen métodos y atributos
particulares.
Métodos
Son todas las funciones y condiciones previamente establecidas dentro de una
clase, que definen el comportamiento particular de cada uno de sus objetos, es
por esta razón que generalmente son empleados para la reutilización de recursos,
además ayudan a garantizar la funcionalidad de forma permanente.

Atributos
Los atributos son las características y cualidades que permiten diferenciar
apropiadamente cada elemento, por su parte cada objeto cuenta con atributos
particulares, los cuales son establecidos por los programadores, mientras que
cada clase también cuenta con atributos específicos.

 4 pilares de la programación

Abstracción
De acuerdo a la RAE, una de las acepciones de abstraer es:

“Hacer caso omiso de algo, o dejarlo a un lado.” Y ofrece como ejemplo:


“Centremos la atención en lo esencial abstrayendo DE consideraciones
marginales.”

El ejemplo dado captura la esencia del concepto de abstraer. Cuando hacemos


una abstracción, queremos omitir detalles que no son necesarios para nosotros, y
queremos solamente mostrar lo que sí es relevante.

Desde el punto de vista del desarrollo de software, podemos ver que con una
clase podemos realizar una abstracción de una entidad del mundo real. Tomemos
por ejemplo la clase carro que hicimos, esta tiene la posibilidad de guardar datos
relacionados a la marca y al año de salida al mercado del carro, pero, ¿Por qué
solamente estas dos informaciones? Un carro del mundo real tiene más
propiedades, como el color y el modelo. Sin embargo, debemos preguntarnos,
¿Son estas informaciones relevantes para nuestro software?
Nuestra clase abstrae todo lo que representa un carro, tomando solamente lo que
nos interesa, descartando todo lo demás.

Encapsulamiento
Ya sabes que puedes utilizar clases para modelar entidades las cuales son
relevantes para tu aplicación, sabes además que puedes guardar datos dentro de
objetos, y también ejecutar funcionalidad. La pregunta que debemos hacernos es,
¿Debe cualquiera poder modificar de manera directa estos datos? ¿Debe
cualquiera ejecutar cualquier funcionalidad de nuestros objetos en cualquier
momento? Normalmente esto no es algo que queremos, nosotros queremos poder
controlar la manera en que se asignen los datos, queremos poder controlar quién
ve la data interna de nuestros objetos, e incluso quizás queramos controlar la
ejecución de funcionalidad de nuestros objetos. Para esto tenemos el concepto de
encapsulamiento.

El encapsulamiento nos permite controlar quien puede ver y utilizar los


distintos módulos internos de nuestro sistema. En términos de clases, con el
encapsulamiento definimos el acceso a los miembros de la clase.

En C# podemos utilizar modificadores de acceso para definir el control de


agentes externos a distintas partes de nuestro sistema, como clases,
miembros de las clases, interfaces, entre otros. Supongamos que tenemos
una variable, llamada velocidad, la cual queremos colocar en nuestra clase
Carro, para indicar la velocidad en la cual se desplaza un vehículo en
particular. Sin embargo, queremos que solamente dentro de la clase
podamos ver y modificar el valor de dicha variable. Esto lo podemos hacer
o con un campo o con una propiedad. Hagámoslo con una propiedad:
Cuando hagamos una instancia de la clase Carro, no podremos acceder al
valor de la propiedad Velocidad, ni tampoco podemos alterarlo desde
afuera. Lo que sí podemos hacer es utilizar la función acelerar para
aumentar el valor de la velocidad en 10 unidades. Esta es una de las
ventajas del encapsulamiento: Nos permite controlar la manera en que se va
a alterar la data interna de nuestro objeto.
Si quisiéramos que agentes externos puedan ver el valor la propiedad
Velocidad, pero que no puedan alterar libremente dicho valor, podemos
utilizar la siguiente sintaxis:

Herencia
Compartir código es una importante y crucial característica de cualquier
proyecto de software. Compartir código permite ahorrar trabajo cuando
queremos hacer un cambio en nuestro sistema; permite que un solo
algoritmo pueda procesar distintas clases de entidades; entre otras cosas.

Hay varias maneras de compartir código, una de ellas es utilizando


herencia. La herencia es una relación especial entre dos clases, la clase base
y la clase derivada, en donde la clase derivada obtiene la habilidad de
utilizar ciertas propiedades y funcionalidades de la clase base, incluso
pudiendo sustituir funcionalidad de la clase base. La idea es que la clase
derivada “hereda” algunas de las características de la clase base.

Podemos ver un ejemplo de la clase Carro. Un carro es un tipo de vehículo,


además, queremos procesar otro tipo de vehículos, cada uno con su entidad,
como camión. Un carro y un camión comparten el concepto de velocidad,
además, ambos tienen la capacidad de acelerar, y ambos tienen la capacidad
de ir de reversa, sin embargo, cuando un camión va de reversa, este debe
emitir un sonido. Finalmente, un carro debe poder encender la radio.
Vamos entonces a modelar esto:
Vemos que tenemos 3 clases: Vehículo, Carro y Camión. Carro y Camión
heredan de la clase Vehículo. La relación de herencia se representa de esta
manera:
Vemos además que la función Acelerar está definida en la clase Vehículo,
esto hace que todas las clases derivadas pueden hacer uso de dicha función.
Lo mismo sucede con los campos y propiedades.

Ciertamente las clases Carro y Camión pueden definir sus propios


miembros que no se relacionan con la clase Vehículo. Por ejemplo, la clase
Carro tiene el método EncenderRadio el cual solo esta lo tiene.

Podemos también modificar funcionalidad de la clase base. Para esto, en la


clase base, el método debe estar marcado como virtual. Y cuando se quiera
sobrescribir, es decir, cambiar o agregar funcionalidad, esto lo podemos
hacer haciendo un override, tal cual vemos en la clase Camión. Dentro del
método Reversa de la clase Camión, tenemos el código base.Reversa(); el
cual sirve para invocar el método reversa de la clase base.

Podemos utilizar el código anterior de la siguiente manera:

Polimorfismo

Cuando empezamos a hablar de herencia, dijimos que la herencia “permite


que un solo algoritmo pueda procesar distintas clases de entidades”. La idea
es que podemos tener una función la cual reciba un parámetro, como una
clase base, y podemos pasarle a ese método objetos que sean instancias de
las clases derivadas de dicha clase base. Lo mismo ocurre si el método
recibe como parámetro una interfaz. Podemos pasarle a dicho método
cualquier clase que implemente dicha interfaz.

Polimorfismo significa de muchas formas. En nuestro caso llamamos


polimorfismo cuando un método recibe un parámetro que abarca varios
tipos.

Veamos un ejemplo de polimorfismo donde pasamos a un método la clase


base Vehículo:

Este método invoca los métodos Acelerar y Reversa del vehículo que se le
envíe como parámetro. La ventaja que esto ofrece es que podemos
generalizar algoritmos para que funcionen con distintos tipos. En este caso,
este método va a funciona con cualquier clase que herede de Vehículo, en
tal sentido, incluso si en el futuro agregamos la clase Motocicleta, la cual
hereda de Vehículo, podemos utilizar esta nueva clase con el método
Reparar, y va a funcionar perfectamente. De esta manera se da el
polimorfismo, pues el método reparar puede trabajar con varios tipos
distintos.
En el método reparar no podemos hacer uso del método EncenderRadio de
la clase Carro, pues la clase Vehículo no implementa dicho método. Lo que
podríamos hacer es utilizar el operador is para castear a Carro en caso de
que el Vehículo sea un carro:

Esta sintaxis es una manera resumida de decir:

 Lenguajes de programación donde se usa POO


Simula

Aunque ya hoy no se utilice, Simula es merecedor de este primer lugar


debido a que ha sido el primer lenguaje de programación orientada a
objetos que incluyó el concepto de clase.

Este POO desarrollado por Ole Johan Dahl y Kristen Nygaard en 1962
influyó en casi todos los lenguajes de programación moderno. Esto es
gracias a muchas características interesantes como el polimorfismo, los
objetos y las instancias, entre otras.
Java

Java es uno de los lenguajes de programación orientados a objetos más


importantes de la actualidad.

Además de un lenguaje de programación, Java es una plataforma. Es decir


que se requiere instalar una máquina virtual Java para poder correr las
aplicaciones creadas con el lenguaje.

Fue lanzada al mercado por Sun Microsystems en 1995, y al día de hoy


tiene una relevancia más que importante. Este lenguaje de programación
orientado a objetos está presente en muchas implementaciones, tanto
empotrado en dispositivos como en aplicaciones para celulares y
computadoras.

ADA

Ada es un lenguaje de programación orientado a objetos estático de


propósito general y fuertemente tipado. Fue diseñado en 1983 por Jean
Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa
de los Estados Unidos.

Fue nombrado de este modo debido a Augusta Ada Byron y está inspirado
fuertemente por Pascal.

C++

C++ es un lenguaje de programación orientado a objetos que fue


desarrollado por Bjarne Stroustrup en 1979. El propósito de su creación fue
mejorar algunos aspectos del lenguaje C para permitir la creación y
manipulación de objetos.
Más tarde sus desarrolladores le agregaron opciones para la programación
genérica, que se sumaron a sus capacidades de lenguaje de programación
estructurada y programación orientada a objetos. Es por ello que C++ es
considerado como un lenguaje híbrido y multiparadigma.

C#

Podría considerarse e a “C#” como un lenguaje de programación


multiparadigma. Este fue desarrollado por Microsoft con el objetivo de
completar su plataforma NET.

Cabe destacar que la sintaxis de este lenguaje proviene de C++, y a su vez


de C. Para el desarrollo de software C# utiliza el modelo de objetos
provisto por NET, plataforma similar a Java.

Ruby

Ruby se comenzó a desarrollar en 1993 y fue presentado en 1995. Su


creador es Yukihiro Matsumoto. Se trata de un lenguaje de programación
interpretado, reflexivo y orientado a objetos.

Además se distribuye bajo una licencia de software libre.

Podría decirse que Ruby es una cruza entre dos lenguajes de programación
diferentes. Esta afirmación es debido a que Ruby combina una sintaxis
inspirada en Python y Perl, con características de programación orientada a
objetos muy parecida al lenguaje Smalltalk.
Python

Otro de los lenguajes de programación orientados a objetos más


importantes de la actualidad es Python. Básicamente, Python es un lenguaje
de programación interpretado de alto nivel y multipropósito.

Python fue desarrollado en 1991 por Guido van Rossum y actualmente


administrado por Python Software Foundation, este lenguaje de
programación es de código abierto.

Al igual que C++ es considerado como un lenguaje de programación


multiparadigma, Esto es debido a que el lenguaje es capaz de ofrecer
soporte parcial a la orientación de objetos y a la programación imperativa.

PHP

PHP es un lenguaje de código abierto muy popular en la actualidad. Su


nombre es el acrónimo recursivo de PHP: Hypertext Preprocessor y es un
lenguaje de programación creado Rasmus Lerdorf en 1994.

Podría considerarse a PHP como un lenguaje de programación


multipropósito, pero con los años se ha adaptado y usado ampliamente en el
desarrollo web, ya que puede ser incrustado en HTML.
Referencias bibliográfica

 Gavilanch, V. a. P. B. (2018, July 5). Los 4 pilares de la


Programación Orientada a Objetos. Felipe Gavilán.
https://gavilanch.wordpress.com/2018/07/05/los-4-pilares-
de-la-programacion-orientada-a-objetos/
 Marker, G. (2022). Lenguajes de programación orientada
a objetos. Tecnología + Informática.
https://www.tecnologia-informatica.com/lenguajes-de-
programacion-orientada-a-objetos/
 https://platzi.com/tutoriales/1474-oop/6108-4-elementos-
y-pilares-basicos-de-la-programacion-orientada-a-objetos-
poo/
 Qué es la Programación Orientada a Objetos. (n.d.).
Intelequia. https://intelequia.com/blog/post/qu%C3%A9-
es-la-programaci%C3%B3n-orientada-a-objetos
 Online, P. (2022, January 17). ¿Qué es la Programación
Orientada a Objetos? Profesional Online.
https://www.profesionalonline.com/blog/programacion/qu
e-es-la-programacion-orientada-a-objetos/
 Qué es la programación orientada a objetos. (n.d.).
CódigoFacilito. https://codigofacilito.com/articulos/js-
orientado-objetos

También podría gustarte