Está en la página 1de 20

DEFINICIONES:

La programación orientada a objetos es un enfoque de programación que combina


datos y acciones asociadas (métodos) en estructuras lógicas (objetos). Este enfoque
aumenta la capacidad para administrar la complejidad del software, lo cual resulta
especialmente importante cuando se desarrollan y mantienen aplicaciones y estructuras
de datos de gran tamaño. (MATLAB, 2018).

La programación Orientada a objetos (POO, u OOP según sus siglas en inglés) es un


paradigma de programación que usa objetos en sus interacciones, para diseñar
aplicaciones y programas informáticos. Está basada en varias técnicas, incluyendo
herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento. Su uso
se popularizó a principios de la década de 1990. En la actualidad, existe una gran
variedad de lenguajes de programación que soportan la orientación a objetos. (Ángel
Roldán, 2017).

La POO es una forma especial de programar, este paradigma de programación es


cercano a como expresamos las cosas en la vida real en nuestro día a día. Con la POO
tenemos que aprender a pensar las cosas de una manera distinta para poder escribir
nuestros programas en términos de objetos, propiedades y métodos. La POO tiene como
principio que todo en la vida es un objeto programable, entonces para empezar a
programar con este paradigma tendríamos que empezar con desarrollar nuestro
pensamiento basado en objetos.

Así pues, la programación orientada a objetos es una forma de programar que trata de
encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y
amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

 Clase

Definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La


instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.

 Herencia
Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y
operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la
misma D. Por lo tanto, puede usar los mismos métodos y variables públicas declaradas en
C. Los componentes registrados como "privados" (private) también se heredan, pero
como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden
ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico
el ideal de OOP.

 Objeto

Entidad provista de un conjunto de propiedades o atributos (datos) y de


comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan
a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos
internos del sistema (del programa). Es una instancia a una clase.

 Método

Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se


desencadena tras la recepción de un "mensaje". Desde el punto de vista del
comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio
en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para
otro objeto del sistema.

 Evento

Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un
mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje
adecuado al objeto pertinente. También se puede definir como evento, a la reacción que
puede desencadenar un objeto, es decir la acción que genera.

 Mensaje

Una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos
con ciertos parámetros asociados al evento que lo generó.

 Propiedad o atributo
Contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que
hace los datos visibles desde fuera del objeto y esto se define como sus características
predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.

 Estado interno

Es una variable que se declara privada, que puede ser únicamente accedida y
alterada por un método del objeto, y que se utiliza para indicar distintas situaciones
posibles para el objeto (o clase de objetos). No es visible al programador que maneja una
instancia de la clase.

 Componentes de un objeto

Atributos, identidad, relaciones y métodos.

 Identificación de un objeto

Un objeto se representa por medio de una tabla o entidad que esté compuesta por sus
atributos y funciones correspondientes. En comparación con un lenguaje imperativo, una
"variable", no es más que un contenedor interno del atributo del objeto o de un estado
interno, así como la "función" es un procedimiento interno del método del objeto.

HISTORIA Y EVOLUCIÓN DE LA POO

Los conceptos de la programación orientada a objetos tienen origen en Simula 67,


un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen
Nygaard del Centro de Cómputo Noruego en Oslo. En este centro, se trabajaba en
simulaciones de naves, que fueron confundidas por la explosión combinatoria de cómo las
diversas cualidades de diferentes naves podían afectar unas a las otras.

La idea ocurrió para agrupar los diversos tipos de naves en diversas clases de
objetos, siendo responsable cada clase de objetos de definir sus propios datos y
comportamientos. Fueron refinados más tarde en Smalltalk, que fue desarrollado en
Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para
ser un sistema completamente dinámico en el cual los objetos se podrían crear y
modificar "en marcha" (en tiempo de ejecución) en lugar de tener un sistema basado en
programas estáticos.

La programación orientada a objetos tomó posición como el estilo de programación


dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++,
una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al
auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a
objetos está particularmente bien adaptada. En este caso, se habla también de
programación dirigida por eventos.

Las características de orientación a objetos fueron agregadas a muchos lenguajes


existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La
adición de estas características a los lenguajes que no fueron diseñados inicialmente para
ellas condujo a menudo a problemas de compatibilidad y en la capacidad de
mantenimiento del código. Los lenguajes orientados a objetos "puros", por su parte,
carecían de las características de las cuales muchos programadores habían venido a
depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos
lenguajes basados en métodos orientados a objetos, pero permitiendo algunas
características imperativas de maneras "seguras".

El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje


con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran
parte debido a la aparición de Internet, y a la implementación de la máquina virtual de
Java en la mayoría de navegadores. PHP en su versión 5 se ha modificado, soporta una
orientación completa a objetos, cumpliendo todas las características propias de la
orientación a objetos.

TÉCNICAS PARA ASOCIAR CON UML

Hay muchos paradigmas o modelos para la resolución de problemas en la


informática, que es el estudio de algoritmos y datos. Hay cuatro categorías de modelos
para la resolución de problemas: lenguajes imperativos, funcionales, declarativos y
orientados a objetos (OOP). En los lenguajes orientados a objetos, los algoritmos se
expresan definiendo 'objetos' y haciendo que los objetos interactúen entre sí. Esos objetos
son cosas que deben ser manipuladas y existen en el mundo real. Pueden ser edificios,
artefactos sobre un escritorio o seres humanos. 

Los lenguajes orientados a objetos dominan el mundo de la programación porque


modelan los objetos del mundo real. UML es una combinación de varias notaciones
orientadas a objetos: diseño orientado a objetos, técnica de modelado de objetos e
ingeniería de software orientada a objetos.

UML usa las fortalezas de estos tres enfoques para presentar una metodología
más uniforme que sea más sencilla de usar. UML representa buenas prácticas para la
construcción y documentación de diferentes aspectos del modelado de sistemas de
software y de negocios.

El UML es popular entre programadores, pero no suele ser usado por


desarrolladores de bases de datos. Una razón es sencillamente que los creadores de
UML no se enfocaron en las bases de datos. A pesar de ello, el UML es efectivo para el
modelado de alto nivel de datos conceptuales y se puede usar en diferentes tipos de
diagramas UML.

UML usa elementos y los asocia de diferentes formas para formar diagramas que
representan aspectos estáticos o estructurales de un sistema, y diagramas de
comportamiento, que captan los aspectos dinámicos de un sistema.

Diagramas UML estructurales

 Diagrama de clases: El diagrama UML más comúnmente usado, y la base


principal de toda solución orientada a objetos. Las clases dentro de un sistema,
atributos y operaciones, y la relación entre cada clase. Las clases se agrupan para
crear diagramas de clases al crear diagramas de sistemas grandes.
 Diagrama de componentes: Muestra la relación estructural de los elementos del
sistema de software, muy frecuentemente empleados al trabajar con sistemas
complejos con componentes múltiples. Los componentes se comunican por medio
de interfaces.
 Diagrama de estructura compuesta: Los diagramas de estructura compuesta se
usan para mostrar la estructura interna de una clase.
 Diagrama de implementación: Ilustra el hardware del sistema y su software. Útil
cuando se implementa una solución de software en múltiples máquinas con
configuraciones únicas.
 Diagrama de objetos; Muestra la relación entre objetos por medio de ejemplos
del mundo real e ilustra cómo se verá un sistema en un momento dado. Dado que
los datos están disponibles dentro de los objetos, estos pueden usarse para
clarificar relaciones entre objetos.
 Diagrama de paquetes: Hay dos tipos especiales de dependencias que se
definen entre paquetes: la importación de paquetes y la fusión de paquetes. Los
paquetes pueden representar los diferentes niveles de un sistema para revelar la
arquitectura. Se pueden marcar las dependencias de paquetes para mostrar el
mecanismo de comunicación entre niveles.

Diagramas UML de comportamiento

 Diagramas de actividades: Flujos de trabajo de negocios u operativos


representados gráficamente para mostrar la actividad de alguna parte o
componente del sistema. Los diagramas de actividades se usan como una
alternativa a los diagramas de máquina de estados.
 Diagrama de comunicación: Similar a los diagramas de secuencia, pero el
enfoque está en los mensajes que se pasan entre objetos. La misma información
se puede representar usando un diagrama de secuencia y objetos diferentes.
 Diagrama de panorama de interacciones: Hay siete tipos de diagramas de
interacciones. Este diagrama muestra la secuencia en la cual actúan.
 Diagrama de secuencia: Muestra cómo los objetos interactúan entre sí y el orden
de la ocurrencia. Representan interacciones para un escenario concreto.
 Diagrama de máquina: de estados Similar a los diagramas de actividades,
describen el comportamiento de objetos que se comportan de diversas formas en
su estado actual.
 Diagrama de temporización: Al igual que en los diagramas de secuencia, se
representa el comportamiento de los objetos en un período de tiempo dado. Si hay
un solo objeto, el diagrama es simple. Si hay más de un objeto, las interacciones
de los objetos se muestran durante ese período de tiempo particular.
 Diagrama de caso de uso: Representa una funcionalidad particular de un
sistema. Se crea para ilustrar cómo se relacionan las funcionalidades con sus
controladores (actores) internos/externos.

LENGUAJES MÁS CONOCIDOS QUE FUNCIONEN BAJO EL PARADIGMA

POO

 Simula 67
El primer lenguaje orientado a objetos es el Simula 67, fue desarrollado por los
noruegos: Krinsten Nygaard y Ole-Johan Dahl y fue presentado en el año 1967.

Simula 67 fue primer lenguaje que presentó las nociones de clase y herencia
jerárquica. No se admite la herencia múltiple. El ocultamiento de información se lleva a
cabo “protegiendo” una característica, lo cual, a su vez, evita que sea heredada en lo
sucesivo. Admite la sobrecarga de métodos. La comprobación de tipos se puede realizar,
bien estáticamente en el momento de la compilación, para mayor eficiencia, o bien en el
momento de la ejecución si se define una característica como “virtual”.

 Smalltalk

A principio de los años 70 ' en el centro de investigación "Palo Alto Xerox " crearon
Smalltalk fue el primer lenguaje Orientado a Objetos puro de los lenguajes Orientados a
Objetos, es decir, únicamente utiliza clases y objetos 
Los objetos Smalltalk presentan características comunes:

 Tienen una memoria propia.


 Poseen capacidad para comunicarse con otros objetos.
 Poseen la capacidad de heredar características de objetos ancestros.
 Tienen capacidad de procesamiento

Los objetos se comunican entre sí mediante el envío de mensajes. Asimismo, un


objeto puede proveer muchas operaciones (actualmente esto está determinado por cada
implementación). 
D. Parnas uno de los creadores propuso la disciplina de ocultar la información.
Encapsulaba cada una de las variables globales de la aplicación en un solo módulo junto
con sus operaciones asociadas, sólo mediante las cuales se podía tener acceso a esas
variables.
El resto de los módulos (objetos) podían acceder a las variables sólo de forma
indirecta mediante las operaciones diseñadas para este propósito
Interfaz

 C++
C++ es un lenguaje de programación creado por Bjarne Stroustrup en 1983.
Stroustrup tomó como base el lenguaje de programación más popular en aquella época el
cual era C (diseñado en 1971  por Dennis Ritchie Ken Thompson basados B y BCPL) al
que le añadió cualidades y características de las que carecía.

C++ es un lenguaje de programación orientado a objetos que toma la base del


lenguaje C y le agrega la capacidad de abstraer tipos como en Smalltalk.

La intención de su creación fue el extender al exitoso lenguaje de programación C con


mecanismos que permitieran la manipulación de objetos. En ese sentido, desde el punto
de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido 

Posteriormente se añadieron facilidades de programación genérica, que se sumó a los


otros dos paradigmas que ya estaban admitidos (programación estructurada y la
programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de
programación multiparadigma. C++ introduce nuevas palabras clave y operadores para
manejo de clases
C++ tiene los siguientes tipos fundamentales:

 Caracteres: char (también es un entero), wchar_t


 Enteros: short, int, long, long long
 Números en coma flotante: float, double, long double
 Booleanos: bool
 Vacío: void

Características 
 Tiene un conjunto completo de instrucciones de control.
 Permite la agrupación de instrucciones.
 Incluye el concepto de puntero (variable que contiene la dirección de otra variable).
 Los argumentos de las funciones se transfieren por su valor.
 E/S no forma parte del lenguaje, sino que se proporciona a través de una
biblioteca de funciones.
 Permite la separación de un programa en módulos que admiten compilación
independiente.
 Eiffel
Eiffel es un lenguaje de programación orientado a objetos diseñado por Bertrand
Meyer en 1985. Este lenguaje dispone de diseño por contrato que facilita la detección de
errores y la depuración de códigos .Las clases son la unidad básica, su gestión de
memoria es automática y es implementada por el recolector de basura.

 Posee un panel central de la herencia, incluyendo herencia múltiple.


 Es un lenguaje orientado hacia el diseño de grandes aplicaciones y su
compatibilidad asegura su portabilidad hacia otros sistemas operativos
 Posee dos desventajas, la primera es el manejo de memoria, que no es de los
mejores y la segunda es que sus librerías de clases son reducidas.

Hay 3 compiladores para Eiffel que son

 Small Eiffel
 ISE Eiffel
 Visual Eiffel

Este lenguaje soporta Herencia múltiple, polimorfismo, encapsulación y tipos


genéricos. Otras características de este lenguaje son:
 No es sensible a mayúsculas y minúsculas
 Programación genérica con y sin restricciones
 Rutinas de ejecución única
 Gestión de un sistema de tipo uniforme

 Delphi

En este caso Delphi no es un lenguaje de programación únicamente orientado a


objetos, sino que es un entorno de desarrollo de software diseñado para la programación
visual. Pero existe una versión especializada en objetos que es Objet Pascal y fue
desarrollado por Apple computer en 1986 y se utilizaron para la Macintosh. En 1994 se
dejó de utilizar este lenguaje cuando en Apple empezaron a utilizar chips de Motorola de
68k, de arquitectura IBM que fue re-escrito en C++.

El desarrollo de Borland Delphi se inició en 1993, y Delphi 1.0 fue lanzado oficialmente
en los Estados Unidos el 14 de febrero de 1995. Delphi presentó una nueva sintaxis
usando la palabra clave "class" en lugar de "object", el constructor" Create" y un
destructor virtual "Destroy " (no teniéndose así que llamar a "New" ni a" Dispose"), las
propiedades, los  punteros de método, y algunas otras cosas; y al mismo tiempo mantenía
compatibilidad con la anterior sintaxis (permitiendo migración). 

 Java
Es un lenguaje de programación orientado a objetos que fue creado en 1995 (es una
extensión de C++) se popularizo en 1996 por su lanzamiento comercial de su primera
versión, la JDK 1.0 en Java todos los tipos, a excepción de los tipos fundamentales de
variables (int, char, long...) son clase

El código generado por el compilador Java es independiente de la arquitectura: podría


ejecutarse en un entorno UNIX, Mac o Windows

Posee todos los conceptos en los que se basa la programación orientada a objetos,
como la herencia polimorfismo, encapsulamiento, entre otras cosas.

Su filosofía es aprovechar el software existente. Facilitar la adaptación del mismo a


otros usos diferentes a los originales sin necesidad de modificar el código ya existente.

Java proporciona una colección de clases para su uso en aplicaciones de red, que
permiten abrir sockets y establecer y aceptar conexiones con servidores o clientes
remotos, facilitando así la creación de aplicaciones distribuidas .

Proporciona numerosas comprobaciones en compilación y en tiempo de ejecución


y  especifica los tamaños de sus tipos de datos básicos y el comportamiento de sus
operadores aritméticos

La sintaxis de Java se deriva en gran medida de C++. Pero a diferencia de éste, que
combina la sintaxis para programación genérica, estructurada y orientada a objetos, Java
fue construido desde el principio para ser completamente orientado a objetos. Todo en
Java es un objeto (salvo algunas excepciones), y todo en Java reside en alguna clase

 C#
Es un lenguaje de programación orientado a objetos desarrollado y estandarizado por
Microsoft como parte de su plataforma .Net. Este lenguaje fue creado al principio de los
2000 por Microsoft. Con el C# se pretendió  incorporar las ventajas o mejoras que tiene el
lenguaje JAVA. Así se consiguió que tuviese las ventajas del C,del C++, pero además la
productividad que posee el lenguaje JAVA y se le denomino C#
C# utiliza plantillas de proyecto, diseñadores, páginas de propiedades, asistentes de
código, un modelo de objetos y otras características del entorno de desarrollo.
C# es simple, eficaz, con seguridad de tipos y orientado a objetos.  Las numerosas
innovaciones de C# permiten desarrollar aplicaciones rápidamente y mantener la
expresividad y elegancia de los lenguajes de estilo de C.  

 Una variable de objeto de cierta clase no almacena los valores del objeto sino su
referencia (al igual que Java).
 El operador de asignación no copia los valores de un objeto, sino la referencia al
mismo (al igual que Java).
 Un constructor tiene el mismo nombre que su clase y es sintácticamente similar a
un método.
 La palabra clave this es una referencia al mismo objeto en el cual se usa.
 Tiene la Capacidad para desarrollar componentes de software que se puedan usar
en ambientes distribuidos.
 Su código fuente es portable

El cambio de los programadores familiarizados a C,  c++ y Java a este lenguaje es


relativamente fácil ya que posee características similares a los anteriores

Entre los lenguajes orientados a objetos se destacan los siguientes:

 ABAP
 ABL
 ActionScript
 ActionScript 3
 C Sharp (C#)
 Clarion
 Clipper
 D
 Object Pascal (Embarcadero Delphi)
 Gambas
 GObject
 Genie
 Harbour
 Eiffel
 Fortran 90/95
 Java
 JavaScript
 Lexico
 Objective-C
 Ocaml
 Oz
 R
 Pauscal (en español)
 Perl
 Perl 6
 PHP
 PowerScript
 Processing.
 Python
 Ruby
 Self
 Smalltalk
 Swift
 Magik
 Vala
 VB.NET
 Visual FoxPro
 Visual Basic 6.0
 Visual DataFlex
 Visual Objects
 XBase++
 DRP
 Scala

Muchos de estos lenguajes de programación no son puramente orientados a objetos,


sino que son híbridos que combinan la POO con otros paradigmas.

Al igual que C++, otros lenguajes, como OOCOBOL, OOLisp, OOProlog y Object
REXX, han sido creados añadiendo extensiones orientadas a objetos a un lenguaje de
programación clásico.

Un nuevo paso en la abstracción de paradigmas de programación es la Programación


Orientada a Aspectos (POA). Aunque es todavía una metodología en estado de
maduración, cada vez atrae a más investigadores e incluso proyectos comerciales en todo
el mundo.

CARACTERÍSTICAS Y FUNDAMENTOS:

Existe un acuerdo acerca de qué características contempla la "orientación a


objetos". Las características siguientes son las más importantes:

 Abstracción
Denota las características esenciales de un objeto, donde se capturan sus
comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto
que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros
objetos en el sistema sin revelar "cómo" se implementan estas características.
Los procesos, las funciones o los métodos pueden también ser abstraídos, y, cuando
lo están, una variedad de técnicas son requeridas para ampliar una abstracción.
El proceso de abstracción permite seleccionar las características relevantes dentro de
un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades
en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a
objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan
modelar la realidad o el problema que se quiere atacar.
 Encapsulamiento
Significa reunir todos los elementos que pueden considerarse pertenecientes a una
misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión (diseño
estructurado) de los componentes del sistema. Algunos autores confunden este concepto
con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

 Polimorfismo
Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo
nombre; al llamarlos por ese nombre se utilizará el comportamiento correspondiente al
objeto que se esté usando. O, dicho de otro modo, las referencias y las colecciones de
objetos pueden contener objetos de diferentes tipos, y la invocación de un
comportamiento en una referencia producirá el comportamiento correcto para el tipo real
del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última
característica se llama asignación tardía o asignación dinámica. Algunos lenguajes
proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales
como las plantillas y la sobrecarga de operadores de C++.
 Herencia
Las clases no se encuentran 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. Estos pueden compartir (y extender) su
comportamiento sin tener que volver a implementarlo. Esto suele hacerse habitualmente
agrupando los objetos en clases, y estas en árboles o enrejados que reflejan un
comportamiento común. Cuando un objeto hereda de más de una clase, se dice que
hay herencia múltiple; siendo de alta complejidad técnica por lo cual suele recurrirse a la
herencia virtual para evitar la duplicación de datos.
 Modularidad
Se denomina "modularidad" a la propiedad que permite subdividir una aplicación en
partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicación en sí y de las restantes partes. Estos
módulos se pueden compilar por separado, pero tienen conexiones con otros módulos. Al
igual que la encapsulación, los lenguajes soportan la modularidad de diversas formas.
 Principio de ocultación
Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto
expone una "interfaz" a otros objetos que específica cómo pueden interactuar con los
objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su
modificación por quien no tenga derecho a acceder a ellas; solamente los propios
métodos internos del objeto pueden acceder a su estado. Esto asegura que otros objetos
no puedan cambiar el estado interno de un objeto de manera inesperada, eliminando
efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto,
permitiendo un acceso directo a los datos internos del objeto de una manera controlada y
limitando el grado de abstracción. La aplicación entera se reduce a un agregado
o rompecabezas de objetos.
 Recolección de basura
La recolección de basura (garbage collection) es la técnica por la cual el entorno de
objetos se encarga de destruir automáticamente, y por tanto desvincular la memoria
asociada, los objetos que hayan quedado sin ninguna referencia a ellos. Esto significa que
el programador no debe preocuparse por la asignación o liberación de memoria, ya que el
entorno la asignará al crear un nuevo objeto y la liberará cuando nadie lo esté usando. En
la mayoría de los lenguajes híbridos que se extendieron para soportar el Paradigma de
Programación Orientada a Objetos como C++ u Object Pascal, esta característica no
existe y la memoria debe desasignarse expresamente.
CLASES Y OBJETOS:

Objetos

 Un objeto es una cosa tangible, algo a que se puede aprehender intelectualmente


o algo hacia lo que se puede dirigir una acción o pensamiento.
 Un objeto representa un ítem individual e identificable, o una entidad real o
abstracta, con un papel definido en el dominio del problema
 Un objeto tiene:
1. Estado
2. Comportamiento
3. Identidad

La estructura y el comportamiento de objetos similares se definen en sus clases


comunes. El término objeto y ejemplo (instance) de una clase son intercambiables.
Estado de un objeto

El estado de un objeto abarca todas las propiedades del objeto, y los valores actuales
de cada una de esas propiedades. Las propiedades de los objetos suelen ser estáticas,
mientras los valores que toman estas propiedades cambian con el tiempo.

 El hecho de que los objetos tengan estado implica que ocupan un espacio, ya en
el mundo físico, ya en la memoria del ordenador.
 El estado de un objeto está influido por la historia del objeto.
 No deben confundirse los objetos, que existen en el tiempo, son mutables, tienen
estado, pueden ser creados, destruidos y compartidos..., con los valores (los
asignados a una variable, por ejemplo) que son cantidades con las propiedades de
ser atemporales, inmutables.
 El estado de un objeto representa el efecto acumulado de su comportamiento.

Identidad de un objeto

Identidad es la propiedad de un objeto que lo lleva a distinguirse de otros.

Comportamiento de un objeto

Comportamiento es como un objeto actúa y reacciona, en términos de sus


cambios de estado y de los mensajes que intercambia.

El comportamiento de un objeto representa su actividad externamente visible y


testable. Son las operaciones que una clase realiza (llamadas también mensajes) las que
dan cuenta de cómo se comporta la clase. Por operación se denota el servicio que una
clase ofrece a sus clientes. Un objeto puede realizar cinco tipos de operaciones sobre
otro, con el propósito de provocar una reacción:

1. Modificador: altera el estado de un objeto.


2. Selector: accede al estado de un objeto, sin alterarlo.
3. Iterador: permite a todas las partes de un objeto ser accedidas en un orden.
4. Constructor: crea un objeto y/o inicializa su estado.
5. Destructor: libera el estado de un objeto y/o destruye el objeto.

Relaciones entre objetos


Las relaciones entre objetos abarcan las operaciones, resultados y suposiciones que
unos hacen sobre los otros.

1. Links Son conexiones físicas o conceptuales entre objetos. Denota la asociación


específica por la que un objeto (cliente) usa o solicita el servicio de otro objeto
(servidor). El paso de mensajes entre objetos los sincroniza.
2. Agregaciones Denota relaciones todo/parte, con capacidad para gobernar desde el
todo las partes. Es equivalente a la relación "tener un". El todo puede contener a la
parte.

Clases

Una clase es un conjunto de objetos que comparten una estructura y comportamiento


comunes.

 Clase representa una abstracción, la esencia que comparten los objetos.


 Un objeto es un ejemplo de una clase.
 Un objeto no es una clase, y una clase no es un objeto (aunque puede serlo, p.e.
en Smalltalk).
 Las clases actúan como intermediarias entre una abstracción y los clientes que
pretenden utilizar la abstracción. De esta forma, la clase muestra:
1. visión externa de comportamiento (interface), que enfatiza la abstracción
escondiendo su estructura y secretos de comportamiento.
2. visión interna (implementación), que abarca el código que se ofrece en la
interface de la clase.

Relaciones entre clases

Representan tipos de compartición entre clases, o relaciones semánticas.

1. Asociación. Indica relaciones de mandato bidireccionales (Punteros ocultos en C+


+). Conlleva dependencia semántica y no establece una dirección de dependencia.
Tienen cardinalidad.
2. Herencia. Por esta relación una clase (subclase) comparte la estructura y/o
comportamiento definidos en una (herencia simple) o más (herencia múltiple)
clases, llamadas superclases.
o Representa una relación del tipo "es un" entre clases.
o Una subclase aumenta o restringe el comportamiento o estructura de la
superclase (o ambas cosas).
o Una clase de la que no existen ejemplos se denomina {\it abstracta}.
o C++ declara como virtuales todas aquellas funciones que quiere modificar
en sus subclases.
3. Agregación. Representa una relación del tipo "tener un" entre clases. Cuando la
clase contenida no existe independientemente de la clase que la contiene se
denomina agregación por valor y además implica contenido físico, mientras que si
existe independientemente y se accede a ella indirectamente, es agregación por
referencia.
4. Uso. Es un refinamiento de la asociación donde se especifica cual es el cliente y
cual el servidor de ciertos servicios, permitiendo a los clientes acceder sólo a las
interfaces públicas de los servidores, ofreciendo mayor encapsulación de la
información.
5. Ejemplificación Se usa en lenguajes que soportan genericidad (declaración de
clases parametrizadas y argumentos tipo template). Representa las relaciones
entre las clases parametrizadas, que admiten parámetros formales, y las clases
obtenidas cuando se concretan estos parámetros formales, ejemplificados o
inicializados con un ejemplo.
6. Metaclases Son clases cuyos ejemplos son a su vez clases. No se admiten en C+
+.

Relaciones entre clases y objetos

 Todo objeto es el ejemplo de una clase, y toda clase tiene 0 o más objetos.

 Mientras las clases son estáticas, con semántica, relaciones y existencia fijas
previamente a la ejecución de un programa, los objetos se crean y destruyen
rápidamente durante la actividad de una aplicación. El diseño de clases y objetos
es un proceso incremental e interactivo. De asegurar la optimización en los
parámetros:

1. Acoplamiento: Grado de acoplamiento entre módulos.


2. Cohesión: Mide el grado de conectividad entre elementos de un módulo, y entre
objetos de una clase.
3. Suficiencia: Indica que las clases capturan suficientes características de la
abstracción para conseguir un comportamiento e interacción eficiente y con
sentido.
4. Completitud: Indica que la interface de la clase captura todo el significado
característico de una abstracción, escrito en el mínimo espacio.
5. Primitividad: Las operaciones deben implementarse si dan acceso a una
representación fundamental de la abstracción. Cuales son operaciones primitivas y
cuales no (se pueden realizar a partir de otras) es un asunto subjetivo y afecta a la
eficiencia en la implementación.

ÁMBITOS DE CLASES

Una clase es una colección de elementos (miembros) junto con las operaciones
que se realizan con ellos. El término ámbito de clase se aplica a los nombres de los
miembros de una clase particular. Las clases y sus miembros tienen reglas de acceso y
de ámbito muy especiales. El nombre N de un miembro de una clase C tiene ámbito “local
a C”, y puede ser utilizado solo en las siguientes situaciones: En funciones miembro
(métodos) de C. En expresiones tales como c.N, donde c es un objeto de C (Selector
directo de miembro) En expresiones tales como cptr->N, donde cptr es un puntero a una
instancia de C (Selector indirecto de miembro) En expresiones tales como C::N o D::N,
donde D es una clase derivada de C. En referencias anticipadas de miembros dentro de la
clase.

También podría gustarte