You are on page 1of 9

CARACTERISTICAS DE LOS LENGUAJES DE PROGRAMACIÓN

ORIENTADOS A OBJETOS

 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 de los componentes del
sistema. Algunos autores confunden este concepto con el principio de
ocultación, principalmente porque se suelen emplear conjuntamente.
 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 especifica
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.
 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 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. 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.
 Recolección de basura: la recolección de basura o garbage collector 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.
.
https://es.wikibooks.org/wiki/Programaci%C3%B3n_Orientada_a_Objetos/Caracter
%C3%ADsticas_de_la_POO

Caracteristicas de P.O.O
Características de la POO

Hay un cierto desacuerdo sobre exactamente qué características de un método de


programación o lenguaje le definen como “orientado a objetos”, pero hay un
consenso general en que las características siguientes son las más importantes
(para más información, seguir los enlaces respectivos):

Abstracción: 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.

Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse


pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite
aumentar la cohesión de los componentes del sistema. Algunos autores confunden
este concepto con el principio de ocultación, principalmente porque se suelen
emplear conjuntamente.

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 especifica
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 pueden cambiar el estado interno
de un objeto de maneras inesperadas, 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.

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 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. 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. (4)

Conceptos Básicos de POO

Se puede hablar de Programación Orientada a Objetos cuando se reúnen las


características de: abstracción, encapsulación, herencia y polimorfismo; y los
conceptos básicos que las
forman: objetos, mensajes, clases, instancias y métodos.

Conceptos Básicos:

 Un objeto es una encapsulación abstracta de información, junto con los métodos


o procedimientos para manipularla. Un objeto contiene operaciones que definen
su comportamiento y variables que definen su estado entre las llamadas a las
operaciones.
 Una clase equivale a la generalización o abstracción de un tipo específico de
objetos.
 Un mensaje representa una acción a tomar por un determinado objeto.
 Una instancia es la concrección de una clase.
 Un método consiste en la implementación en una clase de un protocolo de
respuesta a los mensajes dirigidos a los objetos de la misma. La respuesta a tales
mensajes puede incluir el envío por el método de mensajes al propio objeto y aun
a otros, también como el cambio del estado interno del objeto.

Características:

La abstracción: Consiste en la generalización conceptual de un determinado


conjunto de objetos y de sus atributos y propiedades, dejando en un segundo
término los detalles concretos de cada objeto. ¿Qué se consigue con la abstracción?
Bueno, básicamente pasar del plano material (cosas que se tocan) al plano mental
(cosas que se piensan).
La encapsulación: Se refiere a la capacidad de agrupar y condensar en un entorno
con límites bien-definidos distintos elementos. Cuando hablemos de encapsulación
en general siempre nos referiremos, pues, a encapsulación abstracta. De manera
informal, primero generalizamos (la abstracción) y luego decimos: la generalización
está bien, pero dentro de un cierto orden: hay que poner límites (la encapsulación),
y dentro de esos límites vamos a meter, a saco, todo lo relacionado con lo abstraído:
no sólo datos, sino también métodos, comportamientos, etc.

Por un lado es una abstracción pues, de acuerdo con la definición establecida


anteriormente, es en ésta donde se definen las propiedades y atributos genéricos
de determinados objetos con características comunes (recordemos el ejemplo de la
sala de cine). La Clase es, por otro lado, una encapsulación porque constituye una
cápsula o saco que encierra y amalgama de forma clara tanto los datos de que
constan los objetos como los procedimientos que permiten manipularlos. Las Clases
se constituyen, así, en abstracciones encapsuladas.

La herencia: Se aplica sobre las clases. O sea, de alguna forma las clases pueden
tener descendencia, y ésta heredará algunas características de las clases “padres”.
Si disponemos las clases con un formato de árbol genealógico, tenderemos lo que
se denomina una estructura jerarquizada de clases.

La OOP promueve en gran medida que las relaciones entre objetos se basen en
construcciones jerárquicas. Esto es, las clases pueden heredar diferencialmente de
otras clases (denominadas “superclases”) determinadas características, mientras
que, a la vez, pueden definir las suyas propias. Tales clases pasan, así, a
denominarse “subclases” de aquéllas.

La herencia se implementa mediante un mecanismo que se denomina derivación


de clases: las superclases pasan a llamarse clases base, mientras que las
subclases se constituyen en clases derivadas. El mecanismo de herencia está
fuertemente entroncado con la reutilización del código en OOP. Una clase derivada
posibilita, el fácil uso de código ya creado en cualquiera de las clases base ya
existentes.

El concepto de herencia constituye un estrato básico del paradigma de objetos, pero


esto no significa que todas las relaciones entre clases en OOP deban ajustarse
siempre a este modelo jerárquico. Es necesario establecer si la pretendida relación
entre objetos es de pertenencia o de derivación. En una relación típica de
pertenencia un objeto contiene al otro
Polimorfismo: Esta propiedad, como su mismo nombre sugiere múltiples formas,
se refiere a la posibilidad de acceder a un variado rango de funciones distintas a
través del mismo interfaz. O sea, que, en la práctica, un mismo identificador puede
tener distintas formas (distintos cuerpos de función, distintos comportamientos)
dependiendo, en general, del contexto en el que se halle inserto.

El polimorfismo se puede establecer mediante la sobrecarga de identificadores y


operadores, la ligadura dinámica y las funciones virtuales. El término sobrecarga se
refiere al uso del mismo identificador u operador en distintos contextos y con
distintos significados.

La sobrecarga de funciones conduce a que un mismo nombre pueda representar


distintas funciones con distinto tipo y número de argumentos. En el ámbito de la
OOP, la sobrecarga de funciones equivale a que un mismo mensaje puede ser
enviado a objetos de diferentes clases de forma que cada objeto respondería al
mensaje apropiadamente.

La sobrecarga de operadores permite, por otro lado, el desarrollo de un código más


coherente, como especialización de la sobrecarga de funciones, posibilitando la re-
definición (para tipos de datos definidos-por-el-usuario) de las operaciones
realizadas por éstos (+, -, *, >, etc.). Esto es, ocurre lo mismo que en la sobrecarga
de funciones, pero aquí, en vez de identificadores de funciones, tenemos
operadores.

Gracias a la ligadura dinámica, pueden invocarse operaciones en objetos obviando


el tipo actual del éstos hasta el momento de la ejecución del código.
Características de la P.O.O.:

No hay un acuerdo aceptado por todo el mundo respecto a cuáles son las
características que definen la POO, pero al menos todos concuerdan en estas tres:

1. Abstracción.
2. Encapsulación.
3. Herencia.

Abstracción:

Cada vez que pronunciamos una palabra, realmente lo que hacemos es asociar ese
sonido (o ese conjunto de garabatos al escribir) con una serie de cosas. Decimos
que un ave es tal cosa, que una silla es tal otra, etc.

Cuando vamos a aplicar la POO, lo primero que debemos hacer es cumplir con una
vieja máxima de guerra: Divide y Vencerás. Es decir, lo que hacemos es seccionar
nuestro código en grupos de código más pequeño que, al unirlos, hacen el trabajo.
Un buen ejemplo de abstracción es el cuerpo humano, aunque el cuerpo es una
unidad, está dividido en lo que conocemos por sistemas (el sistema respiratorio, el
sistema linfático, cardiovascular, etc., etc.). Estos sistemas, a su vez están
compuestos por otros más pequeños: los órganos, y así sucesivamente. La
abstracción nos permite dividir nuestro programa en distintos objetos que se
agrupan para formar cosas más complejas.

Pero ¿qué demonios es realmente la abstracción? Básicamente es la capacidad de


separar los elementos (al menos mentalmente) para poder verlos de forma singular.
Como cuando describimos el cuerpo humano y decimos cabeza, brazo(s), pierna(s),
etc.

Encapsulación:

También conocida como ocultamiento. Cuando me acuesto a ver televisión no me


preocupo del modo como éste funciona, o lo que hace para cambiar de canal o
aumentar el volumen. A menos que seas experto en electrónica o técnico en
televisores, te pasará lo mismo: no lo sabes y no te importa; sólo sabes que al
presionar un botón ocurre la magia.
La encapsulación se encarga de mantener ocultos los procesos internos que
necesita para hacer lo que sea que haga, dándole al programador acceso sólo a lo
que necesita. Esto da dos ventajas iniciales: Lo que hace el usuario puede ser
controlado internamente (incluso sus errores), evitando que todo colapse por una
intervención indeseada (tú no quieres que tu mamá, que no tiene ni idea de
electrónica, abra tu televisor y empiece a jugar con los circuitos para cambiar los
canales manualmente ¿verdad?). La segunda ventaja es que, al hacer que la mayor
parte del código esté oculto, puedes hacer cambios y/o mejoras sin que eso afecte
el modo como los usuarios van a utilizar tu código. Sólo tienes que mantener igual
la forma de acceder a él (en el caso del control de la tele, que los botones sigan
siendo los mismos y que el botón de “apagado” no cambie el volumen). Por cierto,
estas puertas de acceso que das a los usuarios son lo que se conoce como interfaz.

Herencia:

Uno de los elementos (a mi modo de ver) más interesantes de la P.O.O. La herencia


es la capacidad que tiene una clase de derivar las propiedades y métodos de otra
(suena a chino ¿no? Calma, lo veremos luego con paciencia). Tratemos de
explicarlo con un ejemplo:

Decimos que una gallina es un ave; esto quiere decir que las gallinas tienen
características comunes con otras aves (pico, plumas, etc.), es decir que la
gallina hereda las características comunes de todas las aves. Pero, además,
resulta que un ave es un animal, lo que significa que también comparte
características comunes al caballo, el perro, el hombre (seeee, somo animales) y
cualquier otra cosa que pueda ser clasificada como animal.

La herencia nos permite, entre otras cosas, evitar tener que escribir el mismo código
una y otra vez, puesto que al definir que una categoría (que en programación
llamaremos clase) pertenece a otra, automáticamente estamos atribuyéndoles las
características generales de la primera, sin tener que definirlas de nuevo.

https://algonzalezpoo.wordpress.com/caracteristicas-de-poo/

You might also like