Programacion Orientada A Objetos

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

PROGRAMACIÓN ORIENTADA A OBJETOS

ORIGEN

De acuerdo con (Booch G, 1998), “La Programación Orientada a Objetos (POO) es un


enfoque de programación que surgió en la década de 1960 y experimentó una evolución a
lo largo de múltiples décadas”. A continuación, mencionaremos algunos de los momentos
clave en la evolución de la POO:

En el lenguaje de programación Simula 67, Aunque no se reconoce como el punto de


partida absoluto de la Programación Orientada a Objetos,el lenguaje de programación
Simula 67, concebido por Ole-Johan Dahl y Kristen Nygaard en la década de 1960, se erige
como uno de los primeros idiomas en introducir conceptos esenciales de la POO, tales
como clases y herencia.Otro momento clave a mencionar fue en la década de 1970, Alan
Kay y su grupo en Xerox PARC fueron los artífices del lenguaje de programación Smalltalk,
ampliamente reconocido como el pionero en el ámbito de la programación orientada a
objetos”.Como afirma (Joyanes, L. 2000). “Smalltalk marcó el inicio de numerosos
conceptos esenciales de la POO, incluyendo la noción de objetos, clases, herencia y
polimorfismo. En los años 80, Bjarne Stroustrup desarrolló C++, una extensión de C que
habilitó la programación orientada a objetos y mantuvo la compatibilidad con código previo
en C, lo que impulsó la adopción de la POO en la industria. También en los 80, Bertrand
Meyer creó Eiffel, un lenguaje enfocado en crear software robusto mediante la POO, con
énfasis en la verificación de contratos y la programación por contrato. A mediados de los 90,
Sun Microsystems lanzó Java, un lenguaje seguro y portable basado en la POO,
convirtiéndose en uno de los más populares para aplicaciones empresariales y software de
plataforma cruzada”.

Con respecto a lo mencionado podemos deducir que la Programación Orientada a Objetos


nació como un enfoque de programación en el que los programas se organizan alrededor
de objetos que simbolizan entidades del mundo real. Ha evolucionado para convertirse en
uno de los cimientos más cruciales de la programación actual, ejerciendo un impacto
significativo en numerosos aspectos de la informática y la ingeniería de software.

OBJETOS Y VARIABLES DE REFERENCIAS

Según (Ceballos 2010). “Los objetos y las variables de referencia son conceptos esenciales
en la programación orientada a objetos y se vinculan con la manera en que se gestionan los
datos y se construyen estructuras de datos avanzadas en múltiples lenguajes de
programación”. A continuación, detallaremos ambos conceptos:

Un objeto es una instancia de una clase en la programación orientada a objetos. Las clases
son plantillas o modelos que definen las propiedades (atributos) y comportamientos
(métodos) que los objetos de esa clase tendrán. Los objetos son "instancias" concretas
basadas en esas plantillas.Los objetos cumplen la función de representar conceptos del
mundo real y son útiles para organizar y encapsular información y funcionalidades
relacionadas en una sola entidad. Por ejemplo, podemos imaginar una clase llamada
"Coche" que define los atributos como marca, modelo y color, junto a los métodos como
"arrancar" y "detener". Un objeto "Coche" específico sería una instancia de esta clase y
contendría valores concretos para sus atributos. Cabe destacar que los objetos se crean en
la memoria del sistema y ocupan un espacio reservado en ella. Es posible crear múltiples
objetos basados en la misma clase, y cada uno de ellos tendrá sus propios valores de
atributos y su propio estado.”

Como plantea (Andrew C 1999). “Una variable de referencia es una variable que guarda la
ubicación de memoria de un objeto en lugar de guardar el objeto directamente. En
numerosos lenguajes de programación orientados a objetos, como Java, C++, Python, y
otros, cuando creas un objeto, en realidad estás generando una referencia hacia dicho
objeto. Las variables de referencia resultan beneficiosas porque posibilitan la manipulación
y el trabajo eficiente con objetos sin necesidad de duplicar grandes conjuntos de datos. En
su lugar, solo se transfiere la referencia al objeto”.

Dicho todo esto podemos deducir que en la programación orientada a objetos, los objetos
son representaciones específicas de clases que encapsulan información y funcionalidad,
mientras que las variables de referencia son variables que guardan la ubicación de memoria
de objetos, lo que facilita el manejo eficiente de datos complejos sin necesidad de
replicarlos.

CLASES E INSTANCIAS

Teniendo en cuenta la perspectiva de (Booch G, 1998). “Las clases e instancias son


conceptos fundamentales en la programación orientada a objetos (POO). A continuación
explicaremos ambos conceptos en detalle:

Una clase se define como un patrón o un prototipo que establece un tipo particular de objeto
en la programación orientada a objetos.Representa un conjunto de atributos
(características) y métodos (acciones) que caracterizan a los objetos pertenecientes a dicha
clase. Las clases operan como una plantilla para la creación de objetos y determinan la
estructura y el comportamiento que los objetos de esa clase seguirán. En otras palabras,
una clase establece la apariencia y el comportamiento que tendrán sus objetos. Estas
clases son una abstracción de conceptos del mundo real. Por ejemplo, si estás
desarrollando un programa de administración de bibliotecas, podrías definir una clase
llamada "Libro" con atributos como título, autor y número de páginas, además de métodos
para gestionar el préstamo y la devolución de un libro. En la mayoría de los lenguajes de
programación orientados a objetos, para crear un objeto basado en una clase, primero
debes definir la clase y, luego, puedes generar múltiples instancias (objetos) de esa misma
clase”.

Según (James L, 1997). “Una instancia es un objeto concreto creado a partir de una clase.
Es una representación real y específica de esa clase, con sus propios valores de atributos y
estado. Cuando creas una instancia de una clase, estás creando un objeto único que sigue
las características y el comportamiento definidos en la clase, pero que puede tener valores
de atributos distintos a otras instancias de la misma clase. Por ejemplo, si tienes una clase
"Persona", puedes crear múltiples instancias de esa clase, cada una representando a una
persona diferente, con su propio nombre, edad y otras propiedades. Las instancias permiten
modelar objetos del mundo real en tu programa y trabajar con ellos de manera individual.
Puedes realizar operaciones específicas en cada instancia sin afectar a otras instancias de
la misma clase”.

ESTRUCTURA DE UNA CLASE Y MODIFICADORES DE ACCESO

Según (Programación Orientada a Objetos, s. f.), “La programación orientada a


objetos (POO) es un paradigma de programación que se basa en la idea de
organizar el código en objetos, que son instancias de clases. Las clases son el
plano o la plantilla a partir de la cual se crean los objetos en POO. La estructura de
una clase en programación orientada a objetos incluye varios componentes clave:

Nombre de la Clase: El nombre de la clase es un identificador único que se utiliza


para referirse a la clase en el código. Debe seguir convenciones de nomenclatura,
como empezar con una letra mayúscula y utilizar CamelCase (por ejemplo,
MiClase).

Atributos (o Propiedades): Los atributos son variables que representan


características o estados de los objetos creados a partir de la clase. Por ejemplo, si
tienes una clase Coche, los atributos podrían ser el color, la marca, el modelo, etc.
Los atributos se definen dentro de la clase y pueden tener un tipo de dato asociado.

Métodos: Los métodos son funciones definidas dentro de la clase que representan
el comportamiento de los objetos creados a partir de la clase. Los métodos pueden
acceder y modificar los atributos de la clase y pueden realizar diversas acciones. En
Python, el primer parámetro de un método se llama self y hace referencia al objeto
mismo.

Constructor: El constructor es un método especial que se llama al crear un objeto a


partir de la clase. En Python, el constructor se llama __init__ y se utiliza para
inicializar los atributos de la clase.

Encapsulación: En muchos lenguajes de programación orientada a objetos, como


Python, se pueden definir niveles de acceso para los atributos y métodos de una
clase. Esto controla la visibilidad y accesibilidad de estos elementos desde fuera de
la clase. Los niveles de acceso típicos son público, protegido y privado.

● Público: Los atributos y métodos públicos son accesibles desde cualquier


parte del programa.
● Protegido: Los atributos y métodos protegidos son accesibles dentro de la
clase y sus subclases.
● Privado: Los atributos y métodos privados sólo son accesibles dentro de la
clase.
En Python, la convención para indicar un atributo o método como privado es agregar
un guion bajo antes del nombre, por ejemplo, _atributo_privado.
Herencia: La herencia es un concepto fundamental en la POO que permite crear
nuevas clases basadas en las clases existentes. La nueva clase hereda los atributos
y métodos de la clase padre (o superclase) y puede agregar o modificar su
comportamiento según sea necesario.

Polimorfismo: El polimorfismo permite que diferentes objetos respondan de manera


diferente a la misma llamada de método. Esto se logra mediante el uso de la
herencia y la implementación de métodos con el mismo nombre en diferentes
clases.

Los modificadores de acceso son una característica importante en la programación


orientada a objetos (POO) que controla la visibilidad y accesibilidad de los atributos
y métodos de una clase desde fuera de la misma. Los modificadores de acceso
permiten establecer quién puede ver y modificar los miembros de una clase, y son
esenciales para mantener la encapsulación y el control sobre los objetos.

En la mayoría de los lenguajes de programación orientada a objetos, como Java, C+


+, C#, y otros, se utilizan tres tipos principales de modificadores de acceso:

Public (Público): Los miembros (atributos y métodos) marcados como públicos son
accesibles desde cualquier parte del programa, ya sea dentro de la clase, en otras
clases del mismo paquete (en Java), o desde cualquier clase que importe la clase
que contiene el miembro público.

Protected (Protegido): Los miembros marcados como protegidos son accesibles


dentro de la clase que los define y también por clases derivadas o subclases
(herencia). Sin embargo, no son accesibles desde fuera de la jerarquía de clases.

Private (Privado): Los miembros marcados como privados sólo son accesibles
dentro de la clase que los define. No son visibles desde fuera de la clase, incluso si
se trata de subclases.
Estos modificadores de acceso permiten mantener la encapsulación, que es un
principio fundamental en la POO. La encapsulación se refiere a la ocultación de los
detalles internos de una clase y sólo exponer una interfaz pública para interactuar
con los objetos de esa clase. Esto tiene varios beneficios:
● Ayuda a prevenir el acceso y la modificación no autorizados de los datos de
un objeto.
● Facilita el cambio interno de la implementación de una clase sin afectar a
otras partes del programa que la utilizan.
● Promueve una estructura de código más organizada y mantenible.
En resumen, los modificadores de acceso son una herramienta clave para controlar
quién puede acceder y modificar los miembros de una clase en programación
orientada a objetos, lo que contribuye a la seguridad y la robustez del código.”

HERENCIA, INTERFACES Y POLIMORFISMO

De acuerdo con (Programación Orientada a Objetos, s. f.), “La herencia es uno de


los conceptos fundamentales en la programación orientada a objetos (POO) y es
una forma de crear nuevas clases basadas en las clases existentes. La herencia
permite que una clase, llamada subclase o clase derivada, hereda los atributos y
métodos de otra clase, llamada superclase o clase base. Esto significa que la
subclase adquiere las características y el comportamiento de la superclase y puede
agregar sus propios atributos y métodos o modificar los existentes según sea
necesario.

Aquí hay algunos conceptos clave relacionados con la herencia:

Superclase (Clase Base): Es la clase original de la cual se heredan los atributos y


métodos. También se conoce como clase base o clase padre.

Subclase (Clase Derivada): Es la nueva clase que se crea a partir de una


superclase. La subclase hereda los atributos y métodos de la superclase y puede
agregar nuevos miembros o modificar los existentes.

Extends (Extender): En muchos lenguajes de programación orientada a objetos,


como Java, C++, C#, entre otros, se utiliza la palabra clave "extends" para indicar
que una clase está heredando de otra.
Sobrecarga de Método: La herencia permite que una subclase tenga métodos con el
mismo nombre que los de la superclase. Esto se conoce como sobrecarga de
método. La subclase puede proporcionar su propia implementación del método o
modificar el comportamiento del método heredado.

Acceso a Miembros: En la mayoría de los lenguajes de programación, los miembros


de la superclase pueden tener diferentes niveles de acceso (públicos, protegidos,
privados), y la subclase puede acceder a ellos de acuerdo con los modificadores de
acceso.

La herencia es útil en la programación orientada a objetos por varias razones:

Reutilización de Código: Permite reutilizar el código de la superclase en la subclase,


evitando la duplicación de código y promoviendo la eficiencia y la mantenibilidad.

Especialización: Permite definir clases más específicas (subclases) que tienen


características adicionales o especializadas en comparación con la superclase.
Jerarquía de Clases: Facilita la creación de una jerarquía de clases, donde las
clases se organizan en una estructura de árbol, lo que puede ser útil para modelar
relaciones en el mundo real.
Es importante destacar que no todas las características de la superclase se heredan
necesariamente en todas las situaciones. Los modificadores de acceso y las
especificaciones de los métodos pueden influir en qué miembros son visibles y
accesibles en la subclase. Además, algunos lenguajes de programación permiten la
herencia múltiple, donde una clase puede heredar de varias superclases. Sin
embargo, esto puede complicar la jerarquía de clases y se debe utilizar con
precaución.

Las interfaces son un concepto fundamental en la programación orientada a objetos


(POO) que se utiliza para definir los contratos que las clases deben seguir. En otras
palabras, una interfaz establece un conjunto de métodos (y posiblemente
constantes) que una clase concreta debe implementar. Las interfaces proporcionan
un mecanismo para definir la estructura de una clase sin especificar su
implementación exacta. Aquí hay algunas características clave de las interfaces en
POO:

Definición de Interfaz: Una interfaz se define mediante una declaración que enumera
los métodos que deben ser implementados por cualquier clase que implemente la
interfaz. Los métodos en una interfaz generalmente no tienen implementación;
simplemente se declaran con sus firmas.

Implementación de Interfaz: Las clases concretas implementan interfaces utilizando


la palabra clave implements en muchos lenguajes de programación. Cuando una
clase implementa una interfaz, debe proporcionar implementaciones concretas de
todos los métodos declarados en la interfaz.

Múltiple Implementación: En algunos lenguajes, como Java, una clase puede


implementar múltiples interfaces, lo que permite que la clase cumpla con múltiples
contratos a la vez.

Herencia de Interfaces: Al igual que las clases, las interfaces también pueden
heredar de otras interfaces. Esto significa que una interfaz puede extender o ampliar
otra interfaz, agregando nuevos métodos o heredando los métodos de la interfaz
padre.

Utilidad de las Interfaces: Las interfaces son útiles para lograr la abstracción y el
polimorfismo en el diseño de software. Al definir interfaces, puedes especificar un
conjunto común de comportamientos que las clases deben proporcionar, lo que
facilita el intercambio de objetos en diferentes contextos. Por ejemplo, puedes crear
una interfaz Figura con métodos calcularArea() y calcularPerimetro(), y luego tener
clases como Círculo y Rectángulo que implementan esta interfaz, lo que permite
tratarlas de manera uniforme en un contexto más amplio.

En resumen, las interfaces son una parte importante de la programación orientada a


objetos y se utilizan para definir contratos que las clases deben seguir. Proporcionan
una forma efectiva de lograr la abstracción y el polimorfismo en el diseño de
software, lo que facilita la creación de código flexible y reutilizable.

El polimorfismo es un concepto central en la programación orientada a objetos


(POO) que se refiere a la capacidad de objetos de diferentes clases de responder
de manera adecuada a una misma llamada de método o acción. Es una de las
características clave de la POO que permite escribir código más flexible y genérico.
El polimorfismo se basa en dos conceptos principales: el polimorfismo de subtipos y
el polimorfismo de interfaces.

Polimorfismo de Subtipos (Herencia): Este tipo de polimorfismo se basa en la


herencia de clases. En un sistema de herencia, una subclase puede heredar
métodos y propiedades de una superclase. Sin embargo, la subclase puede
proporcionar su propia implementación de esos métodos, lo que permite que objetos
de la subclase se comporten de manera diferente de los objetos de la superclase.

A través del polimorfismo de subtipos, puedes interactuar con objetos de diferentes


subclases como si fueran objetos de la superclase, y la ejecución del método se
determinará en tiempo de ejecución según el tipo real del objeto.

Polimorfismo de Interfaces: Este tipo de polimorfismo se basa en el uso de


interfaces o clases abstractas. Las interfaces definen un conjunto de métodos que
deben ser implementados por cualquier clase que las utilice. Esto permite tratar
objetos de diferentes clases que implementan la misma interfaz de manera
uniforme, sin necesidad de preocuparse por la implementación específica de cada
clase.

El polimorfismo de interfaces permite que diferentes clases proporcionen


implementaciones diferentes para el mismo método definido en una interfaz común.

En resumen, el polimorfismo es una característica fundamental de la POO que


permite que objetos de diferentes clases se comporten de manera diferente en
función de su tipo real, lo que facilita la escritura de código genérico y flexible.
Puedes lograr el polimorfismo tanto a través de la herencia como de la
implementación de interfaces, y esto mejora la modularidad y la capacidad de
extensión de tus programas.”
REFERENCIAS BIBLIOGRÁFICAS

Introducción a la OOP. (s. f.). https://kataix.umag.cl/~ruribe/Utilidades/Introduccion%20a


%20la%20Programacion%20Orientada%20a%20Objetos.pdf

Pablo Augusto S.(2017, 2 marzo). Programación orientada a Objetos y Estructura de


datos a fondo, España, Ed ALFAOMEGA.

Booch G.,(1998, 4 febrero). Análisis y diseño orientado a objetos con aplicaciones,


México, Ed Addison Wesley.

Joyanes, L. Programación en Java 2: algoritmos, estructuras de datos y


programación orientada a objetos, México, McGraw Hill, 2002.

Ceballos, F. J., Java 2. Curso de programación, 4a ed., México, Ra-ma, 2010

Andrew C. Staugaard, Jr: Técnicas estructuradas y orientadas a objetos, Prentice


Hall, 1998.

James L. Antonakos, Kenneth C. Mansfield. Programación estructurada en C,


Prentice Hall, 1997.

Programación Orientada a Objetos. (s. f.).


https://www.it.uc3m.es/java/git-gisc/units/oo-herencia/slides/ProgramacionOrientada
AObjetos.pdf

Introducción a la programación orientada a objetos. (s. f.).

https://www.cua.uam.mx/pdfs/revistas_electronicas/libros-electronicos/2016/2intro-

poo/programacion_web.pdf

También podría gustarte