Está en la página 1de 15

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

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”.

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:

// 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;
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.

El concepto de herencia

La herencia es específica de la programación orientada a objetos, donde una clase nueva se


crea a partir de una clase existente. La herencia (a la que habitualmente se denomina
subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las
atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad
para definir atributos y métodos nuevos para la subclase, que luego se aplican a los
atributos y métodos heredados.
Esta particularidad permite crear una estructura jerárquica de clases cada vez más
especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea
especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases
que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas
clases tiende a proteger las datos miembro usando la encapsulación).

Jerarquía de clase

La relación primaria-secundaria entre clases puede representarse desde un punto de vista


jerárquico, denominado vista de clases en árbol. La vista en árbol comienza con una clase
general llamada superclase (a la que algunas veces se hace referencia como clase primaria,
clase padre, clase principal, o clase madre; existen muchas metáforas genealógicas). Las
clases derivadas (clase secundaria o subclase) se vuelven cada vez más especializadas a
medida que van descendiendo el árbol. Por lo tanto, se suele hacer referencia a la relación
que une a una clase secundaria con una clase primaria mediante la frase "es una" x o y.

Herencia múltiple

Algunos lenguajes orientados a objetos, como C++ permiten herencias múltiples, lo que
significa que una clase puede heredar los atributos de otras dos superclases. Este método
puede utilizarse para agrupar atributos y métodos desde varias clases dentro de una sola.
polimorfismo (P.O.O)

POLIMORFISMO:

Concepto:En programación orientada a objetos se denomina polimorfismo a la capacidad


que tienen los objetos de una clase de responder al mismo mensaje o evento en función de
los parámetros utilizados durante su invocación. Un objeto polimórfico es una entidad que
puede contener valores de diferentes tipos durante la ejecución del programa.

En algunos lenguajes, el término polimorfismo es también conocido como ‘Sobrecarga de


parámetros’ ya que las características de los objetos permiten aceptar distintos parámetros
para un mismo método (diferentes implementaciones) generalmente con comportamientos
distintos e independientes para cada una de ellas.

Ejemplo:

‘ este método devuelve la suma de 2 parámetros


Function suma(int numero1,int numero2)
‘ este método devuelve la suma de los 3 parámetros
Function suma(int numero1,int numero2, int numero3)
‘ este método devuelve la concatenación de cadena1 y cadena2
Function suma(String cadena1, String cadena2)
[7]

DIAGRAMAS UML Y
PROGRAMACION ORIENTADA A
OBJETOS
A lo largo del curso emos visto varias formas de programar en este apartado encontraras
algunos aspectos que involucran la programación orientada a objetos.
La Programación Orientada a Objetos(POO) es un modelo de la programación que como
su nombre lo dice utiliza objetos por medio de mensajes que nos ayudara a resolver
problemas.

Los objetos tienen propiedades y acciones que muestran comportamientos diferentes


dependiendo del problema a resolver.

Un ejemplo seria el siguiente:

En esta imagen observamos que la clase es Persona,observamos que define objetos.

Los objetos son instancias de clases.

Un ejemplo de esta clase constituida por objetos seria la transferencia de dinero de la


cuenta 1 a la cuenta 2.

CONCEPTOS DE PROGRAMACION ORIENTADA A OBJETOS

CLASE

Representa características,atributos y métodos de un conjunto de objetos del mismo tipo.

ATRIBUTO
Son las propiedades que describen a los objetos pueden ser datos.

MÉTODO

Son las acciones las operaciones,los procedimientos y funciones los cuales los tenemos que
aplicar a los atributos de los objetos que ocupamos.

OBJETO

Como ya sabemos un objeto es la instancia de una clase donde los objetos pueden contener
atributos y métodos que manejan la solución al problema que queremos resolver.

Un ejemplo de objetos en nuestro salón de clases son:

 alumno
 profesor
 mesa
 silla
 mesa
 pizarrón

EN LA PROGRAMACIÓN ORIENTADA A OBJETOS UTILIZAMOS TRES


ASPECTOS MUY IMPORTANTES

ABSTRACCIÓN

La abstracción se refiere a acciones que solo ocuparemos aunque nuestro programa tenga
muchas funciones solo se utilizan las necesarias.

Un ejemplo de abstracción seria un vehículo

 Marca
 Modelo
 Color
 Tipo de vehículo ( automóvil, camión de carga, camión de
 Tipo de Combustible (gasolina, diesel, etc.)
 Uso (particular, público)
 Número de pasajeros
 Nombre del propietario
 Dirección del propietario

HERENCIA

Esto se refiere a que un objeto hereda las características de la clase padre que es de la que
proviene aunque una clase de igual forma puede heredar características de otra clase.
La herencia define la relación entre clases “es un”, donde una subclase hereda de una o
más superclases.

POLIMORFISMO

En el polimorfismo nos referimos que muchas veces una operacion tiene el mismo nombre
pero tienen diferentes clases y funciones siendo distintas en cada una de ellas.

Un ejemplo seria la función abrir:

ENCAPSULAMIENTO

Esto se refiere a que varios objetos al programarlos ocultan sus funcionalidades internas
al exterior ya que reduce errores que pueden ocurrir cuando estamos ejecutando nuestros
programas.La ventaja es que puede tener acceso a varias acciones son mostrar sus
detalles.

Un ejemplo muy notorio es el control de la televisión.

Otro aspecto que tenemos que saber es que cada mensaje esta asociado a un método ya
que cuando un objeto recibe un mensaje la respuesta es una ejecución de un método.

En su ejecución los programas realizan tres cosas importantes


 crea los objetos necesarios
 se procesa internamente nuestras funciones
 cuando los objetos no son necesarios automáticamente se destruyen

Los atributos de los objetos solo son manipulados por los métodos que son propios del
objeto que estamos ocupando.

Para controlar el acceso a los miembros de una clase utilizaremos tres tipos diferentes

CONSTRUCTORES

Los constructores son métodos que sirven para inicializar los datos o variables de una
clase tiene el mismo nombre de la clase y no especificamos ningún valor de retorno.

MIEMBROS STATIC DE UNA CLASE

Son miembros que estan ligados a las clases y no a los objetos.Son comunes para todos los
objetos de la clase.

METODOS GET Y SET

Significan establecer y obtener el metodo get se usa cuando quieres saber cual es el valor
que tiene una variable privada de otra clase, el metodo set es para establecer un valor en
una variable privada de otra clase.

DIAGRAMAS UML

Los diagramas UML describen objetos y las estructuras de información que necesitamos
para realizar un programa es una visualización general de lo que necesitamos realizar en
nuestro programa.

DIAGRAMA DE CASOS DE USO


Muestra las operaciones de una aplicación y cómo se relaciona con su entorno.
En los casos de uso se muestra el usuario donde puede desempeñar diferentes
papeles.Denota su uso en una funcion determinada pero de igual manera puede
desempeñar uno o mas casos.

DIAGRAMAS DE CLASE

la clase representa un conjunto de propiedades que es la estructura y comportamiento que


tendra nuestro programa por medio de objetos al que llamamos instancia de clases.

Los atributos representan las propiedades de un objeto y tienen un valor se pueden


representar como + público,# protegido,− privado.

Las operaciones van hacer el comportamiento de los objetos de nuestra clase.

También podría gustarte