0% encontró este documento útil (0 votos)
4 vistas13 páginas

Contenido Semana 05

Paradigmas de programacion Semana 05 UES

Cargado por

elmerlemus1997
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas13 páginas

Contenido Semana 05

Paradigmas de programacion Semana 05 UES

Cargado por

elmerlemus1997
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

UNIVERSIDAD DE EL SALVADOR

Facultad Multidisciplinaria De Occidente


Departamento de Ingeniería y
Arquitectura

Ingeniería en Desarrollo de
Software/Educación En Línea
Paradigmas de Programación
Ciclo I-2023

Unidad 02: Paradigmas Orientados a Objetos

2.1 Conceptos del modelo orientado a objetos.

La programación orientada a objetos, tal vez el paradigma de programación más


utilizado en el mundo del desarrollo de software y de la ingeniería de software del
siglo XXI, trae un nuevo enfoque a los retos que se plantean en la programación
estructurada cuando los problemas a resolver son complejos. Al contrario que la
programación procedimental que enfatiza en los algoritmos, la POO enfatiza en los
datos.
En lugar de intentar ajustar un problema al enfoque procedimental de un lenguaje,
POO intenta ajustar el lenguaje al problema. La idea es diseñar formatos de datos
que se correspondan con las características esenciales de un problema.
La idea fundamental de los lenguajes orientados a objetos es combinar en una
única unidad o módulo, tanto los datos como las funciones que operan sobre esos
datos. Tal unidad se llama un objeto.
Las funciones de un objeto se llaman funciones miembro en C++ o métodos (éste
es el caso de Smalltalk, uno de los primeros lenguajes orientados a objetos), y son
el único medio para acceder a sus datos.
Los datos de un objeto, se conocen también como atributos o variables de instancia.
Si se desea leer datos de un objeto, se llama a una función miembro del objeto. Se
accede a los datos y se devuelve un valor.
No se puede acceder a los datos directamente. Los datos están ocultos, de modo
que están protegidos de alteraciones accidentales. Los datos y las funciones se dice
que están encapsulados en una única entidad.
El encapsulamiento de datos y la ocultación de los datos son términos clave en la
descripción de lenguajes orientados a objetos.

Desde la aparición de la programación orientada a objetos (POO u OOP) se empezó


a pensar en bases de datos adaptadas a estos lenguajes.
Este modelo es considerado como el fundamento de las bases de datos de tercera
generación, siendo consideradas las bases de datos en red como la primera y las
bases de datos relacionales como la segunda generación.
Aunque no han reemplazado a las bases de datos relacionales, si son el tipo de base
de datos que más está creciendo en los últimos años.

2.2 Objetos. Constructores y destructores. Métodos y mensajes.

Objetos

El objeto es el centro de la programación orientada a objetos. Un objeto es algo que


se visualiza, se utiliza y juega un rol o papel. Si se programa con enfoque orientado
a objetos, se intentan descubrir e implementar los objetos que juegan un rol en el
dominio del problema y en consecuencia programa.
La estructura interna y el comportamiento de un objeto, en una primera fase, no
tiene prioridad. Es importante que un objeto tal como un carro o una casa juegan un
rol. Dependiendo del problema, diferentes aspectos de un aspecto son relevantes.
Un carro puede ser ensamblado de partes tales como un motor, una carrocería, unas
puertas o puede ser descrito utilizando propiedades tales como su velocidad, su
kilometraje o su fabricante.
Estos atributos indican el objeto. De modo similar, una persona también se puede
ver como un objeto, del cual se disponen diferentes atributos. Dependiendo de la
definición del problema, esos atributos pueden ser el nombre, apellido, dirección,
número de teléfono, color del cabello, altura, peso, profesión, etc.
Un objeto no necesariamente ha de realizar algo concreto o tangible. Puede ser
totalmente abstracto y también puede describir un proceso. Por ejemplo, un partido
de baloncesto o de rugby puede ser descrito como un objeto.
Los atributos de este objeto pueden ser los jugadores, el entrenador, la puntuación
y el tiempo transcurrido de partido.
Cuando se trata de resolver un problema con orientación a objetos, dicho problema
no se descompone en funciones como en programación estructurada tradicional,
caso de C, sino en objetos.
El pensar en términos de objetos tiene una gran ventaja: se asocian los objetos del
problema a los objetos del mundo real.

¿Qué tipos de cosas son objetos en los programas orientados a objetos? La


respuesta está limitada por su imaginación aunque se pueden agrupar en
categorías típicas que facilitarán su búsqueda en la definición del problema de un
modo más rápido y sencillo.

• Recursos Humanos:
— Empleados.
— Estudiantes.
— Clientes.
— Vendedores.
— Socios.
• Colecciones de datos:
— Arrays (arreglos).
— Listas.
— Pilas.
— Árboles.
— Árboles binarios.
— Grafos.
• Tipos de datos definidos por usuarios:
— Hora.
— Números complejos.
— Puntos del plano.
— Puntos del espacio.
— Ángulos.
— Lados.
• Objetos físicos:
— Carros.
— Aviones.
— Trenes.
— Barcos.
— Motocicletas.
— Casas.

La correspondencia entre objetos de programación y objetos del mundo real es el


resultado eficiente de combinar datos y funciones que manipulan esos datos. Los
objetos resultantes ofrecen una mejor solución al diseño del programa que en el
caso de los lenguajes orientados a procedimientos. Un objeto se puede definir
desde el punto de vista conceptual como una entidad individual de un sistema y que
se caracteriza por un estado y un comportamiento. Desde el punto de vista de
implementación un objeto es una entidad que posee un conjunto de datos y un
conjunto de operaciones (funciones o métodos).

El estado de un objeto viene determinado por los valores que toman sus datos,
cuyos valores pueden tener las restricciones impuestas en la definición del
problema.
Los datos se denominan también atributos y componen la estructura del objeto y
las operaciones —también llamadas métodos— representan los servicios que
proporciona el objeto.

Los mensajes.

El mensaje es el fundamento de una relación de comunicación que enlaza


dinámicamente los objetos que fueron separados en el proceso de descomposición
de un módulo. En la práctica, un mensaje es una comunicación entre objetos en los
que un objeto (el cliente) solicita al otro objeto (el proveedor o servidor) hacer o
ejecutar alguna acción.
La noción de un mensaje es un concepto abstracto que se puede implementar de
varias formas, tales como una llamada a una función, un evento o suceso directo,
una interrupción, una búsqueda dinámica, etc. En realidad un mensaje combina
flujos de control y flujos de datos en una única entidad. Las flechas simples indican
el flujo de control y las flechas con un pequeño círculo en el origen son flujos de
datos.

Tipos de mensajes

Existen diferentes categorías de mensajes:


• Constructores (crean objetos).
• Destructores (destruyen objetos).
• Selectores (devuelven todo o parte del estado de un objeto).
• Modificadores (cambian todo o parte del estado de un objeto).
• Iteradores (visitan el estado de un objeto o el contenido de una estructura de datos
que incluyen varios objetos).

EJEMPLO
Esquema de una clase con métodos o funciones correspondientes a los tipos de
mensajes.

clase VueloAvión
publico
// constructores ...
// destructores ...
// selectores ...
// modificadores ...
// iteradores ...
privado
// atributos del vuelo
fin_clase
Métodos

En el paradigma orientado a objetos, el programa se organiza como un conjunto


finito de objetos que contiene datos y operaciones (funciones miembro o métodos)
que llaman a esos datos y que se comunican entre sí mediante mensajes.

Declaración de métodos

Las clases normalmente constan de dos cosas: variables de instancia y métodos.


Existen dos formatos para la declaración de los métodos, dependiendo de que se
siga el modelo C++ (función miembro) o el modelo Java / C# (método).

C++: tipo_retorno
NombreClase:: nombreFuncion(listaParámetros) {

// cuerpo de la función
}

Java: tipo_retorno
NombreClase(listaParámetros) {

// cuerpo del método

Los métodos que tienen un tipo de retorno distinto de void devuelve un valor a la
rutina llamadora utilizando el formato siguiente de la sentencia return:
return valor;

Donde valor es el valor devuelto.

Clase Fecha en pseudocódigo


//Pseudocódigo
clase Fecha
var
privado entero: dia, mes, anyo
procedimiento fijarFecha(E entero: d, m, a)
inicio
dia ← d
mes ← m
anyo ← a
fin_procedimiento
procedimiento
mostrarFecha ()
inicio
escribir(dia, '/', mes, '/', anyo)
fin_procedimiento
fin_clase

Los métodos que pueden aparecer en la definición de una clase se clasifican en


función del tipo de operación que representan. Estos métodos tienen una
correspondencia con los tipos de mensajes que se pueden enviar entre los objetos
de una aplicación, como por otra parte era lógico pensar.

• Constructores y destructores, son funciones miembro a las que se llama


automáticamente cuando un operador se crea o se destruye.
• Selectores, que devuelven los valores de los miembros dato.
• Modificadores o mutadores, que permiten a un programa cliente cambiar los
contenidos de los miembros dato.
• Operadores, que permiten definir operadores estándar para los objetos de las
clases.
• Iteradores, que procesan colecciones de objetos, tales como arrays y listas.

Constructores

Un constructor es un método que tiene el mismo nombre que la clase y cuyo


propósito es inicializar los miembros datos de un nuevo objeto que se ejecuta
automáticamente cuando se crea un objeto de una clase.
Sintácticamente es similar a un método.
Dependiendo del número y tipos de los argumentos proporcionados, una función o
método constructor se llama automáticamente cada vez que se crea un objeto.
Si no se ha escrito ninguna función constructor en la clase, el compilador
proporciona un constructor por defecto.
A su rol como inicializador, un constructor puede también añadir otras tareas
cuando es llamado. Un constructor tiene el mismo nombre que la propia clase.
Cuando se define un constructor no se puede especificar un valor de retorno, ni
incluso nada (void); un constructor nunca devuelve un valor.
Un constructor puede, sin embargo, tomar cualquier número de parámetros (cero o
más).

Reglas
1. El constructor tiene el mismo nombre que la clase.
2. Puede tener cero o más parámetros.
3. No devuelve ningún valor.

Constructor por defecto


Un constructor que no tiene parámetros se llama constructor por defecto. Un
constructor por defecto normalmente inicializa los miembros dato asignándoles
valores por defecto.

Un constructor es cualquier función que tiene el mismo nombre que su clase.


El propósito principal de un constructor es inicializar las variables miembro de un
objeto cuando éste se crea. Por consiguiente, un constructor se llama
automáticamente cuando se declara un objeto.
En general, una clase puede contener múltiples constructores pero se diferencian
entre sí en la lista de parámetros. Cada constructor se debe declarar sin ningún tipo
de dato de retorno (ni incluso void).

DESTRUCTORES

La contrapartida a un constructor es un destructor Los destructores son funciones


(métodos) que tienen el mismo nombre de la clase al igual que los constructores,
pero para distinguirlos sintácticamente se les precede por una tilde (~) o por la
palabra reservada destructor.
Al igual que sucede con los constructores, se proporciona un constructor por
defecto en el caso de que no se incluya explícitamente en la declaración de la clase.
Al contrario que los constructores, sólo puede haber un destructor por clase. Esto se
debe a que los destructores no pueden tener argumentos ni devolver valores. Los
destructores se llaman automáticamente siempre que un objeto deje de existir y su
objetivo es limpiar cualquier efecto no deseado que haya podido dejar el objeto.

Una función destructor se llama a la vez que un objeto sale fuera de ámbito
(desaparece). Los destructores deben tener el mismo nombre que su clase pero
suelen ir precedidos de una tilde. Sólo puede haber un destructor por clase.
Un destructor no tiene argumentos ni devuelve ningún valor. Si no se incluye ningún
destructor en la clase, el compilador proporciona un destructor por defecto.

El uso más frecuente de un destructor es liberar memoria que fue asignada por el
constructor. Si un destructor no se declara explícitamente, se crea uno vacío
automáticamente. Si un objeto tiene ámbito local, su destructor se llama cuando el
control pasa fuera de su bloque de definición.

2.3 Clases. Estructura. Encapsulamiento.

Clases

El término tipo abstracto de datos se consigue en programación orientada a objetos


con el término clase. Una clase es la implementación de un tipo abstracto de datos
y describe no sólo los atributos (datos) de un objeto sino también sus operaciones
(comportamiento). Así, la clase carro define que un coche/carro consta de motor,
ruedas, placa de matrícula, etc. y se puede conducir (manejar), acelerar, frenar, etc.

En POO los objetos son miembros de clases. En esencia, una clase es un tipo de
datos al igual que cualquier otro tipo de dato definido en un lenguaje de
programación.
La diferencia reside en que la clase es un tipo de dato que contiene datos y
funciones. Una clase contiene muchos objetos y es preciso definirla, aunque su
definición no implica creación de objetos.
Una clase es, por consiguiente, una descripción de un número de objetos similares.
Madonna, Sting, Prince, Juanes, Carlos Vives o Juan Luis Guerra son miembros u
objetos de la clase "músicos de rock". Un objeto concreto, Juanes o Carlos Vives,
son instancias de la clase "músicos de rock". Una clase es una descripción general
de un conjunto de objetos similares.
Por definición todos los objetos de una clase comparten los mismos atributos
(datos) y las mismas operaciones (métodos). Una clase encapsula las abstracciones
de datos y operaciones necesarias para describir una entidad u objeto del mundo
real.

Instancias

Una clase describe un objeto, en la práctica múltiples objetos. En conceptos de


programación, una clase es, realmente, un tipo de dato, y se pueden crear, en
consecuencia, variables de ese tipo.
En programación orientada a objetos, a estas variables, se las denomina instancias
(“instances”), y también por sus sinónimos ejemplares, casos, etcétera. Las
instancias son la implementación de los objetos descritos en una clase.
Estas instancias constan de los datos o atributos descritos en la clase y se pueden
manipular con las operaciones definidas en la propia clase. En un lenguaje de
programación OO, objeto e instancia son términos sinónimos.
Así, cuando se declara una variable de tipo Auto, se crea un objeto Auto (una
instancia de la clase Auto).

Estructura

La idea fundamental de la orientación a objetos y de los lenguajes que implementan


este paradigma de programación es combinar (encapsular) en una única unidad
tanto los datos como las funciones que operan (manipulan) sobre los datos.
Esta característica permite modelar los objetos del mundo real de un modo mucho
más eficiente que con funciones y datos.
Esta unidad de programación se denomina objeto. Las funciones de un objeto, se
llaman funciones miembro (en C++) o métodos (Java y otros lenguajes de
programación), constituyen el único método para acceder a sus datos.
Si se desea leer datos de un objeto se llama a una función miembro del objeto. Se
accede a los datos y se devuelve un valor. No se puede acceder a los datos
directamente. Los datos están ocultos y se dice que junto con las funciones están
encapsulados en una entidad única. La encapsulación o encapsulamiento de los
datos y la ocultación de los datos son conceptos clave en programación orientada
a objetos.
La modificación de los datos de un objeto se realiza a través de una de las funciones
miembro de ese objeto que interactúa con él, y ninguna otra función puede acceder
a los datos. Esta propiedad facilita la escritura, depuración y mantenimiento de un
programa. En un sistema orientado a objetos, un programa se organiza en un
conjunto finito de objetos que contienen datos y operaciones (funciones miembro
o método) que se comunican entre sí mediante mensajes (llamadas a funciones
miembro).
La estructura de un programa orientado a objetos:

Las etapas necesarias para modelar un sistema —resolver en consecuencia un


problema— empleando orientación a objetos son:
1. Identificación de los objetos del problema.
2. Agrupamiento en clases (tipos de objetos) de los objetos con características y
comportamiento comunes.
3. Identificación de los datos y operaciones de cada una de las clases.
4. Identificación de las relaciones existentes entre las diferentes clases del modelo.

Encapsulamiento

La encapsulación o encapsulamiento, significa reunir en una cierta estructura a


todos los elementos que a un cierto nivel de abstracción se pueden considerar
pertenecientes a una misma entidad, y es el proceso de agrupamiento de datos y
operaciones relacionadas bajo una misma unidad de programación, lo que permite
aumentar la cohesión de los componentes del sistema.
En este caso, los objetos que poseen las mismas características y comportamiento
se agrupan en clases que no son más que unidades de programación que
encapsulan datos y operaciones. La encapsulación oculta lo que hace un objeto de
lo que hacen otros objetos y del mundo exterior, por lo que se denomina también
ocultación de datos. Un objeto tiene que presentar “una cara” al mundo exterior de
modo que se puedan iniciar esas operaciones.
El aparato de TV tiene un conjunto de botones, bien en la propia TV o incorporados
en un mando a distancia. Una máquina lavadora tiene un conjunto de mandos e
indicadores que establecen la temperatura y el nivel del agua. Los botones de la TV
y las marchas de la máquina lavadora constituyen la comunicación con el mundo
exterior, las interfaces.

En esencia, la interfaz de una clase representa un “contrato” de prestación de


servicios entre ella y los demás componentes del sistema. De este modo, los clientes
de un componente sólo necesitan conocer los servicios que éste ofrece y no cómo
están implementados internamente. Por consiguiente, se puede modificar la
implementación de una clase sin afectar a las restantes relacionadas con ella.

En general, esto implica mantener el contrato y se puede modificar la


implementación de una clase sin afectar a las restantes clases relacionadas con
ella; sólo es preciso mantener el contrato. Existe una separación de la interfaz y de
la implementación. La interfaz pública establece qué se puede hacer con el objeto;
de hecho, la clase actúa como una “caja negra”. La interfaz pública es estable, pero
la implementación se puede modificar.

El encapsulado o encapsulación de datos es el proceso de agrupar datos y


operaciones relacionadas bajo la misma unidad de programación. En el caso de los
objetos que poseen las mismas características y comportamiento se agrupan en
clases, que no son más que unidades o módulos de programación que encapsulan
datos y operaciones.
La ocultación de datos permite separar el aspecto de un componente, definido por
su interfaz con el exterior, de sus detalles internos de implementación.
Los términos ocultación de la información (information hiding) y encapsulación de
datos (data encapsulation) se suelen utilizar como sinónimos, pero no siempre es
así, y muy al contrario, son términos similares pero distintos.

Normalmente, los datos internos están protegidos del exterior y no se puede


acceder a ellos más que desde su propio interior y por tanto, no están ocultos. El
acceso al objeto está restringido sólo a través de una interfaz bien definida.

El diseño de un programa orientado a objetos contiene, al menos, los siguientes


pasos:
1. Identificar los objetos del sistema.
2. Agrupar en clases a todos objetos que tengan características y comportamiento
comunes.
3. Identificar los datos y operaciones de cada una de las clases.
4. Identificar las relaciones que pueden existir entre las clases.

También podría gustarte