Вы находитесь на странице: 1из 6

23/1/2019 Fundamentos de la POO

Fundamentos de la POO
Por Armando Canchala

Contenido
Fundamentos
Modularidad
Reutilización
Visión POO
Lenguajes basados en clases
Modelo de embebimiento:
Modelo de Delegación:
El método lookup:
Subclases

Fundamentos
La POO es una técnica para desarrollar soluciones computacionales utilizando componentes de software (objetos de software).

Objeto: Componente o código de software que contiene en sí mismo tanto sus características (campos) como sus
comportamientos (métodos); se accede a través de su interfaz o signatura.

Campo: Es una característica de un objeto, que ayuda a definir su estructura y permite diferenciarlo de otros objetos. Se define
con un identificador y un tipo, el cual indica los valores que puede almacenar. El conjunto de valores de los campos definen el
estado del objeto.

Método: Es la implementación de un algoritmo que representa una operación o función que un objeto realiza. El conjunto de los
métodos de un objeto determinan el comportamiento del objeto.

La POO es un paradigma de la programación de computadores; esto hace referencia al conjunto de teorías, estándares, modelos
y métodos que permiten organizar el conocimiento, proporcionando un medio bien definido para visualizar el dominio del
problema e implementar en un lenguaje de programación la solución a ese problema.

La POO se basa en el modelo objeto donde el elemento principal es el objeto, el cual es una unidad que contiene todas sus
características y comportamientos en sí misma, lo cual lo hace como un todo independiente pero que se interrelaciona con
objetos de su misma clase o de otras clase, como sucede en el mundo real.

Anterior al paradigma de objetos, está el paradigma algorítmico o de procesos, el cual se fundamenta en los procesos o
funciones que se llevan a cabo en el mundo real dentro del dominio del problema analizado. Se refiere a lo que entra, como lo
maneja el proceso, y lo que sale del proceso. La programación tradicional la sustentan los procesos, algoritmos, bloques de
construcción modulares cuya abstracción va de lo general a lo particular, mientras que en la POO tiene como marco de
referencia conceptual el objeto, el cual pertenece a una clase que agrupa a todos compañeros con las mismas características y un
comportamiento similar.

Una ventaja de la POO frente al paradigma algorítmico es la facilidad que brinda a través de sus herramientas, de concebir,
analizar, modelar, diseñar e implementar el mundo real de manera fiel a como se presenta en la realidad; el paso que hay desde
la concepción y asimilación del problema hasta la implementación del mismo es un proceso que se hace de manera casi natural.
Esto porque el mundo está lleno de objetos reales, los cuales se pueden representar como tales en una solución computarizada.

Principio de la página
Modularidad

https://msdn.microsoft.com/es-co/library/bb972232(d=printer).aspx 1/6
23/1/2019 Fundamentos de la POO

Proceso de crear partes de un todo que se integran perfectamente entre sí para que funcionen por un objetivo general, y a las
cuales se les pueden agregar más componentes que se acoplen perfectamente al todo, o extraerle componentes sin afectar su
funcionamiento. En el caso que se requiera actualizar un módulo, no hay necesidad de hacer cambios en otras partes del todo.
Un ejemplo clásico es un conjunto de módulos que, al integrarlos conforman un armario, el cual puede agregarle más
funcionalidad si se le agregan más módulos, o al contrario. También se puede cambiar su finalidad si se acomodan esos módulos
para darle otro objetivo: volverlo una mesa.

Esto ayuda a la descomposición de problemas en subproblemas, es decir,  a la solución de problemas por composición de
soluciones a subproblemas.

Principio de la página
Reutilización
Capacidad de usar un mismo código para varias implementaciones o necesidades (desarrollos); para esto se debe tener en
cuenta:

Polimorfismo: Esta propiedad indica que un elemento puede tomar distintas formas. Podemos definirlo como el uso de
varios tipos en un mismo componente o función. Por ejemplo, una función que sume dos operandos, la cual maneja, o
dos números o dos cadenas, para retornar un total de una suma o de una concatenación. También se denomina
subsumption (más delante de detalla este concepto).

Genericidad: Usar algoritmos genéricos para resolver varias situaciones, como acceso a varios motores de bases de datos
de forma transparente, como el PEAR de PHP. Consiste en parametrizar una función con varios tipos de datos donde ella
misma en su cuerpo decida cómo operar, como la ut0110.4gl.

Operaciones Relacionadas: Todas las operaciones de un módulo deben estar dentro de él, como parte de su cuerpo ...

Caja negra: Saber qué entra y qué sale (la interfaz del módulo: signatura) y no cómo lo hace (su implementación), como
la co0020.4gl.

Sobrecarga: Modalidad de herencia que permite usar el mismo módulo para diferentes implementaciones de una
operación, es decir, usando diferente signatura: una función que pueda recibir un parámetro, o dos, o ninguno; pero
opera correctamente con cualquiera de ellos con que se lo invoque, está sobrecargada; por ejemplo, la función saludar(),
cuando va sin parámetros retorna la cadena “Hola”, cuando se invoque con un nombre, (saludar(var_nombre)), retorna
“Hola $var_nombre”, y así sucesivamente. Esto debe manejarse por código dentro de la función.

Principio de la página
Visión POO
La visión OO se basa en la siguiente analogía:

1. Construcción de un modelo mecánico de un sistema físico a partir de objetos concretos. Los objetos aquí serían, en
un modelo de una pista de carreras: los autos, las carreteras, las llegadas, las graderías, espectadores, etc. En un modelo
de un sistema planetario, tenemos los objetos concretos: los planetas, los órbitas, el sol, la energía, etc.

2. Construcción de un modelo algorítmico de un sistema físico a partir de objetos de software. Los objetos aquí serían:
rutinas de conexión a DB, shorts, validación de acceso, despliegue, impresiones, etc.

Este concepto de POO se puede ver como una intuitiva correspondencia entre un software de simulación de un sistema físico y el
sistema físico en sí (o su modelo mecánico).

Modelo algorítmico: Análisis, diseño e implementación de un software usando objetos de “software”.

https://msdn.microsoft.com/es-co/library/bb972232(d=printer).aspx 2/6
23/1/2019 Fundamentos de la POO

Objetos de software : Componentes que integran o conforman el modelo; pueden ser unidades de código para resolver
situaciones específicas, shorts, uso de DB, prints, funciones, vectores, etc.

Modelo mecánico: Análisis, diseño e implementación de prototipo a escala de un sistema físico usando objetos concretos.

Objetos concretos: Partes físicas del modelo mecánico, ojo del modelo, no del sistema real; o sea, los objetos planeta no son los
planetas reales.

Modelo: Es una vista  de un sistema del mundo real, es decir,  una abstracción de dicho sistema considerando un cierto
propósito. Así, el modelo describe completamente aquellos aspectos del sistema que son relevantes al propósito del modelo y a
un apropiado nivel de detalle.

Diagrama: Representación gráfica de un modelo.

Abstracción: Capacidad del ser humano para entender una situación excluyendo detalles y sólo viéndola a alto nivel. El hombre
ha comprendido el mundo con la abstracción. Esta propiedad permite distinguir a un objeto de los demás, observando sus
características y comportamientos, pensando en qué es y no en cómo se codificaría en un lenguaje. Con la abstracción se
destaca lo importante y se ignora lo irrelevante, o sea, hay ocultamiento de información. Hay abstracción de datos al declarar
una variable tipo integer, ya que internamente el compilador lo implementa en 2 bytes, lo cual es transparente al programador, o
al declarar una variable date, el compilador controla los días de los meses, acepta sólo operaciones válidas entre las fechas,
permitiendo al programador abstraerse de esos detalles. Estos tipos de datos abstractos coleccionan valores y operaciones, los
cuales se usan transparentemente sin importar su implementación: otro lo implementa y yo lo uso.

La reutilización es la principal característica de la POO, la cual se logra mediante:

Encapsulación de información: Ocultamiento de información, datos o funciones especiales a los usuarios. En el caso de
la programación, el encapsulamiento es lo que permite que tanto la estructura (campos) como el comportamiento
(métodos) se encuentren dentro del mismo cuerpo de código de la clase con la que se crean los objetos. Dentro de la
clase se deben agrupar tanto la información o datos de los campos como las operaciones o métodos o funciones que
operan sobre esta información.

Herencia: Propiedad que permite a los objetos ser construidos a partir de otros; es recibir de un módulo superior sus
características, tales como atributos o funciones (campos y métodos o comportamientos), para usarlos en el módulo
actual. Heredar es compartir atributos.

Sobreescritura ( override ): Posibilidad de heredar un método de un módulo y cambiarle el comportamiento en el


heredero, con la opción de poder usar el original, si se desea.

Métodos unidos a los objetos: los métodos de un objeto son inseparables y siempre formarán parte de su cuerpo, como
un todo.

Noción de self : unicidad de los objetos; son únicos y no se repiten, aunque sean de la misma clase. Así como se puede
definir varias variables del tipo INT cada una de las cuales es única, se puede crear o instanciar varios objetos de una
misma clase.

Principio de la página
Lenguajes basados en clases
Utilizan las clases como estructuras para la creación de los objetos. Una clase se define como la descripción de los atributos
(campos y  métodos) de los objetos. Con los campos se define el estado del objeto en un momento dado, tales como color,
tamaño, longitud, básico, etc., y con los métodos se define su comportamiento, tal como abrirDB(), validarAcceso(), insertar(),
actualizar(), eliminar(), listar(), frenar(), arrancar(), etc. El proceso de crear un objeto significa crear su estructura (atributos; es
decir, campos + métodos) en la memoria, donde guardará el contenido de sus campos y el código de sus métodos. Ejemplo:

https://msdn.microsoft.com/es-co/library/bb972232(d=printer).aspx 3/6
23/1/2019 Fundamentos de la POO

// Definición de la clase cell:


Class cell is
var contents: Integer :=0;
method get(): Integer is;
return self.contents;
end;
method set(n:integer) is
self.contents:=n;
end;
end;
// Creacion de objetos tipo cell:
objCell1 = new cell;
objCell2 = new cell;

Esta creación de objetos está determinada por dos modelos:

Principio de la página
Modelo de embebimiento:

Cuando cada objeto tiene un área de memoria independiente para guardar tanto sus campos como sus métodos. Es muy
eficiente en la búsqueda del código, pero consume muchos recursos en memoria.

Principio de la página
Modelo de Delegación:

Cuando varios objetos de una misma clase comparten el código de sus métodos (no sus campos), pues es el mismo para
todos. Esto ahorra memoria, pero puede traer otras situaciones, ya que un cambio en uno de los objetos, afecta a todos
sus congéneres.

Principio de la página
El método lookup:
Es un método o función especial de los compiladores que se encarga de buscar en el árbol de métodos en memoria (suite de
métodos) cuál es el correspondiente a ejecutar. Este proceso se denomina dispatch (despacho), y puede definirse ya sea en el
momento de compilación o en el de ejecución, dependiendo de la información que se tenga.

Principio de la página
Subclases
Es la descripción de una clase basada en la estructura de otra clase, la cual se denomina superclase. Se puede mirar como una
extensión de la superclase, donde se pueden tomar las características de la superclase, y adicionarle nuevas características. Este
concepto suele confundirse con el concepto de herencia, pero no siempre puede decirse que una subclase es una herencia, ya
que ésta puede redefinir (override) todo lo de su superclase, luego no heredaría nada. En la herencia se reciben las definiciones
de la superclase y se usan conjuntamente con nuevas definiciones; heredar es compartir atributos entre una clase y sus
subclases; si no comparte, no hay herencia. Ejemplo:

// Definición de la subclase recell


SubClass reCell of Cell is
var backup:integer:=0;
override set (n:integer) is
self.backup:=self.contents;
super.set(n);
end;

https://msdn.microsoft.com/es-co/library/bb972232(d=printer).aspx 4/6
23/1/2019 Fundamentos de la POO

method restore() is
Self.contents:=self.backup;
end;
end;
// Creación de objetos tipo reCell:
objRecell1 new reCell;
objRecell2 new reCell;

Con self tenemos acceso a los atributos de la clase desde su interior; para acceder a los atributos de la clase padre, se usa super.
La subclase es un mecanismo para evitar reescribir las definiciones de una clase que queremos usar en esa subclase. De acuerdo
a esto tenemos que una subclase es mayor (o igual) que la superclase, ya que la subclase contiene todo lo que tenga su
superclase y aún más. Por esto, se dice que una subclase es una especialización de la superclase; de forma análoga, una
superclase es una generalización de una subclase (más pequeño es más específico, más grande es más general).

Sea c una superclase y c’ una subclase suya, se cumple:

Si c’ <: c  y o : c’ entonces o : c;

Esto se lee: Si "c prima" es subclase de "c" y "o" es un objeto de “c prima”, entonces "o" también es un objeto de "c".

Esta ley también aplica para los tipos de datos convencionales o primitivos, ya que como sabemos un real es más que un entero,
lo que significa que un entero puede manejarse como real (pero al revés por que se truncarían los fracciones; habría coerción):

Real <: integer, lo que indica que un int se puede incluir entre los reales, osea que los reales son un subtipo de los integer ...

Con esto se concluye que una subclase es lo mismo que un subtipo, y cuando se implementa un método que puede procesar
transparentemente un valor, el cual puede ser real o integer, se dice que tiene la propiedad de polimorfismo o subsumption. Eso
se logra por esa relación de clase/subclase y tipo/subtipo, ya que de otra forma fallaría, pues el método esperaría un dato
exactamente del tipo con que se definió trabajar. O sea, que si yo soy del tipo A, y A es mayor que el tipo B, entonces yo también
soy del tipo B, así:

Si a : A y A <: B entonces a : B.

En el caso de nuestro ejemplo, de la superclase Cell y la subclase reCell, se puede decir que un objeto de tipo reCell (obj1reCell)
es del mismo tipo que un objeto Cell (obj1Cell), por lo tanto puedo usar una función para cualquiera de los dos objetos siempre
que esta función acepte objetos del tipo reCell (donde cabrá también el tipo Cell) y no solamente del Cell (donde solo cabrá el
Cell).

Ejemplo:

myCell = new cell;


myReCell = reCell;
procedure f(x:Cell) ...
myCell = myReCell; //Falla
f(myReCell); //Falla

Las líneas 4y5 son prohibidas porque en la 4 se definió el argumento tipo Cell; si se le define tipo ReCell, ya puedo llamar f
enviándole una Cell o una ReCell sin problema. Esto es polimorfismo o subsumption por subtipos.

Por otro lado, si analizamos la clase y subclase definidas arriba, vemos que el método restore solo es accedido por los objetos
ReCell, más no por los objetos Cell, quienes no lo “ven”; luego hay ocultamiento de información; así mismo el método get es
común a ambos, y el método set tiene diferente comportamiento por haber sido redefinido. En los lenguajes modernos existen
modificadores tales como private, public, protected, etc. para este manejo.

https://msdn.microsoft.com/es-co/library/bb972232(d=printer).aspx 5/6
23/1/2019 Fundamentos de la POO

Luis Armando Canchala Fernández es Tecnólogo en Sistemas de Información de la Universidad del Valle
de Cali-Colombia y está diplomado en POO en la misma Universidad. Trabaja desde hace 12 años como
Analista de Sistemas responsable de las áreas de fábrica, maquinaria y financiera, sobre plataforma
Informix, Cobol, Genexus y Visual Basic. En los últimos años ha estado capacitándose sobre tecnología
.net. Ha obtenido la 4a. Estrella del Programa Desarrollador Cinco Estrellas de Microsoft.

Principio de la página

© 2019 Microsoft

https://msdn.microsoft.com/es-co/library/bb972232(d=printer).aspx 6/6

Вам также может понравиться