SlideShare una empresa de Scribd logo
1 de 51
Fundamentos de
programación
TIC’S
M. En C. Jovan Abundez Peralta
1. Fundamentos de programación
orientada a objetos
1.1. Evolución de la programación
•1.1.1. ¿Lenguaje de programación?
– Conjunto de reglas, símbolos y palabras especiales utilizados
para construir un programa de forma que pueda ser entendido
por el ordenador.
•1.1.2. Clasificación:
– Lenguajes máquina
– Lenguajes de bajo nivel o ensambladores
– Lenguajes de alto nivel
• 1.1.2.1. Lenguaje máquina
– Es aquél que entiende directamente el ordenador ya que sus
instrucciones son secuencias binarias. También se le conoce
como código binario.
– Dificultad de desarrollo, verificación y puesta a punto de
programas. El código desarrollado no es portable.
• 1.1.2.2. Lenguajes de bajo nivel o ensambladores
– Está compuesto por las instrucciones del lenguaje máquina
escritas mediante nemotécnicos. Es más fácil de utilizar que el
anterior.
– El programa sigue siendo dependiente de la máquina. Requiere
una fase de traducción del código fuente al programa objeto.
• 1.1.2.3. Lenguajes de alto nivel
– Son los más utilizados por los programadores.
– Mayor facilidad en el desarrollo, verificación y mantenimiento
de los programas.
– Los programas desarrollados son portables. Requiere una fase
de traducción del código fuente al programa objeto.
• Tanto los lenguajes ensambladores como los de alto
nivel, antes de ser ejecutados se traducen a lenguaje
máquina, único lenguaje interpretado por la
computadora.
• 1.1.3. Paradigmas de programación
– No sólo existen varios tipos de lenguajes de programación, sino
que también se pueden encontrar distintas formas de programar
una aplicación. Hay diversos paradigmas que permiten
encontrar una solución más adecuada a los problemas. Para
cada paradigma conviene utilizar ciertos lenguajes de
programación, y no cualquiera. Esto se debe a que la mayoría
de los lenguajes fueron creados para ser utilizados en
determinados ambientes de programación.
– Un paradigma de programación representa un enfoque
particular o filosofía para la construcción del software. No es
mejor uno que otro sino que cada uno tiene ventajas y
desventajas. También hay situaciones donde un paradigma
resulta más apropiado que otro.
• Ejemplos de paradigmas:
– El paradigma imperativo es considerado el más común y está
representado, por ejemplo, por el C o por BASIC.
– El paradigma funcional está representado por la familia de
lenguajes LISP (en particular Scheme), ML o Haskell.
– El paradigma lógico, un ejemplo es PROLOG.
– El paradigma orientado a objetos. Un lenguaje completamente
orientado a objetos es Smalltalk.
• 1.1.3.1. Programación secuencial
– Este tipo de programación se basa en la creación de programas
a partir de un conjunto de sentencias escritas de forma
secuencial y cuya ejecución sigue dicha secuencia. Se utiliza la
sentencia como goto o similar para realizar una bifurcación en
la ejecución del programa hacia una etiqueta determinada. Una
etiqueta es una marca en el código de un programa para que sea
referenciado en algún momento de su ejecución.
• Algunos lenguajes que se utilizan para este tipo de
programación son Basic, Assembler, Fortran y Cobol,
entre otros.
• 1.1.3.2. Programación estructurada
– La programación estructurada es una forma de escribir
programación de computadora de forma clara, para ello se
utilizan únicamente tres estructuras: secuencial, selectiva e
iterativa; siendo innecesario y no permitiéndose el uso de la
instrucción o instrucciones de transferencia incondicional
(GOTO).
•1.1.3.2.1. Ventajas
– Los programas son más fáciles de entender, ya que pueden ser
leídos de forma secuencial, sin necesidad de hacer seguimiento
a saltos de línea (GOTO) dentro de bloques de código para
entender la lógica.
– La estructura del programa es más clara puesto que las
instrucciones están más ligadas o relacionadas entre sí.
– Reducción del esfuerzo en las pruebas. El seguimiento de las
fallas (”depuración") se facilita debido a la lógica más visible,
por lo que los errores se pueden detectar y corregir más
fácilmente.
– Reducción de los costos de mantenimiento.
– Programas más sencillos y más rápidos.
– Los bloques de código son auto explicativos, lo que apoya a la
documentación.
• 1.1.3.2.2. Desventajas
– El principal inconveniente de este método de programación, es
que se obtiene un único bloque de programa, que cuando se
hace demasiado grande puede resultar problemático su manejo,
esto se resuelve empleando la programación modular,
definiendo módulos interdependientes programados y
compilados por separado. Un método un poco más sofisticado
es la programación por capas, en la que los módulos tienen una
estructura jerárquica muy definida y se denominan capas.
• 1.1.3.3. Programación orientada a objetos
– La Programación Orientada a Objetos (POO u OOP según
siglas en ingles) es un paradigma de programación que define
los programas en términos de "clases de objetos", objetos que
son entidades que combinan estado (es decir, datos),
comportamiento (esto es, procedimientos o métodos) e
identidad (propiedad del objeto que lo diferencia del resto).
– La programación orientada a objetos expresa un programa
como un conjunto de estos objetos, que colaboran entre ellos
para realizar tareas. Esto permite hacer los programas y
módulos más fáciles de escribir, mantener y reutilizar.
– De esta forma, un objeto contiene toda la información, (los
denominados atributos) que permiten definirlo e identificarlo
frente a otros objetos pertenecientes a otras clases (e incluso
entre objetos de una misma clase, al poder tener valores bien
diferenciados en sus atributos).
• 1.1.3.3.1. Diferencias con la programación estructurada
– Aunque la programación estructurada (a veces llamada
procedural o procedimental) condujo a mejoras de la técnica de
programación secuencial, los métodos modernos de diseño de
software orientado a objetos incluyen mejoras entre las que
están el uso de los patrones de diseño, diseño por contrato, y
lenguajes de modelado (ejemplo: UML).
• Las principales diferencias entre la programación
estructurada y la orientada a objetos son:
– La programación orientada a objetos es más moderna, es una
evolución de la programación estructurada que plasma en el
diseño de una familia de lenguajes conceptos que existían
previamente con algunos nuevos.
– La programación orientada a objetos se basa en lenguajes que
soportan sintáctica y semánticamente la unión entre los tipos
abstractos de datos y sus operaciones (a esta unión se la suele
llamar clase).
– La programación orientada a objetos incorpora en su entorno
de ejecución mecanismos tales como el polimorfismo y el
envió de mensajes entre objetos.
1.2. Conceptos fundamentales de la POO
– La POO se basa en la idea natural de un mundo lleno de objetos
y que la resolución de problemas se realiza mediante el modelo
de objetos
– La programación Orientada a Objetos es una metodología que
basa la estructura de los programas en torno a los objetos.
– Los lenguajes de POO ofrecen medios y herramientas para
describir los objetos manipulados por un programa. Más que
describir cada objeto individualmente, estos lenguajes proveen
una construcción (Clase) que describe a un conjunto de objetos
que poseen las mismas propiedades.
•1.2.1. Objeto
– Es un elemento, unidad o identidad (real o abstracta), que se
tranforma en el dominio del software; con un papel bien
definido en el dominio del problema.
– Un objeto es una entidad caracterizada por sus atributos
propios y cuyo comportamiento está determinado por las
acciones o funciones que pueden modificarlo, así como
también las acciones que requiere de otros objetos. Un objeto
tiene identidad e inteligencia y constituye una unidad que
oculta tanto datos como la descripción de su manipulación.
•1.2.1.1. Características generales de los objetos
– Un objeto se identifica por un nombre o un identificador único
que lo diferencia de los demás. Ejemplo: el objeto Cuenta de
Ahorros número 12345 es diferente al objeto Cuenta de Ahorros
número 25789. En este caso el identificador que los hace únicos
es el número de la cuenta.
– Un objeto posee estados. El estado de un objeto está
determinado por los valores que poseen sus atributos en un
momento dado.
– Un objeto tiene un comportamiento. Se describe o representa
mediante sus operaciones o métodos. Los métodos se utilizarán
para obtener o cambiar el estado de los objetos, así como para
proporcionar un medio de comunicación entre objetos.
–Un objeto tiene un conjunto de atributos. Los atributos de un
objeto contienen valores que determinan el estado del objeto
durante su tiempo de vida. Se implementan con variables,
constantes y estructuras de datos (similares a los campos de un
registro).
–Los objetos soportan encapsulamiento. La estructura interna de
un objeto normalmente está oculta a los usuarios del mismo. Los
datos del objeto están disponibles solo para ser manipulados por
los propios métodos del objeto. El único mecanismo que lo
conecta con el mundo exterior es el paso de mensajes.
–Un objeto tiene un tiempo de vida dentro del programa o sistema
que lo crea y utiliza. Para ser utilizado en un algoritmo el objeto
debe ser creado y al finalizar su utilización debe ser destruido de
manera automática.
•1.2.1.2. Mensaje
– Es la petición de un objeto a otro para solicitar la ejecución de
alguno de sus métodos o para obtener el valor de un atributo
público.
•Estructuralmente, un mensaje consta de 3 partes:
– Identidad del receptor: Nombre del objeto que contiene el
método a ejecutar.
– Nombre del método a ejecutar: Solo los métodos declarados
públicos.
– Lista de Parámetros que recibe el método (cero o mas
parámetros)
•Su sintaxis algorítmica es:
– <Nombre_Objeto>.<Nombre_Método> ( [<Lista de
Parámetros> ] );
• 1.2.2. Atributos
– Son los datos o variables que caracterizan al objeto y cuyos
valores en un momento dado indican su estado.
– Un atributo es una característica de un objeto. Mediante los
atributos se define información oculta dentro de un objeto, la
cual es manipulada solamente por los métodos definidos sobre
dicho objeto
– Un atributo consta de un nombre y un valor. Cada atributo está
asociado a un tipo de dato, que puede ser simple (entero, real,
lógico, carácter, string) o estructurado (arreglo, registro,
archivo, lista, etc.)
• 1.2.3. Método.
– Son funciones que determinan el comportamiento de los
objetos. Se declaran y definen dentro de una clase por lo que
cualquier objeto de esa clase tendrá disponibles a esos métodos.
– Son las operaciones (acciones o funciones) que se aplican sobre
los objetos y que permiten crearlos, cambiar su estado o
consultar el valor de sus atributos.
• 1.2.3.1. Clasificación
– Métodos de consulta. Sirven para extraer información de los
objetos.
– Métodos modificadores. Sirven para cambiar uno o varios
valores de los atrbutos del objeto.
– Métodos de cálculo. Son los que manipulan los atributos de los
objetos.
– Métodos constructores. Inicializa el objeto con valores
definidos. El constructor es llamado automáticamente siempre
que se crea un objeto en la aplicación.
– Métodos desctructores. Un objeto es destruido automáticamente
cuando se eliminan todas las referencias al mismo.
• 1.2.3.2. Definición y declaración de método
– Un método esta compuesto por dos partes: la cabecera y el
cuerpo.
– Sintaxis de declaración
//cabecera
Acceso Tipo Nombre_Método (Parámetros) Excepciones{
//Cuerpo
Sentencias
}
– La cabecera esta definida por:
• Acceso al método. Puede ser publico o privado.
• Tipo de valor de retorno. Si el método no requiere
devolver un resultado se ocupa la palabra reservada void
• Nombre del método. Se recomienda que éste sea
descriptivo.
• Parámetros. Son los valores que el método recibe del
exterior y que requiere para su función.
• Excepciones. Si el método puede lanzar excepciones se
indica al final de la cabecera.
– El cuerpo del método se encuentra encerrado entre llaves y
contiene el grupo de sentencias que indican su
funcionamiento.
•1.2.4. Clase
– Cada clase describe una posibilidad infinita de un conjunto
individual de objetos. Cada objeto que pertenezca a una clase es
llamado instancia de la clase.
– La clase puede definirse como la agrupación o colección de
objetos que comparten una estructura común y un
comportamiento común.
– Es una plantilla que contiene la descripción general de una
colección de objetos. Consta de atributos y métodos que
resumen las características y el comportamiento comunes de un
conjunto de objetos.
– Todo objeto (también llamado instancia de una clase), pertenece
a alguna clase. Mientras un objeto es una entidad concreta que
existe en el tiempo y en el espacio, una clase representa solo
una abstracción.
– Todos aquellos objetos que pertenecen a la misma clase son
descritos o comparten el mismo conjunto de atributos y
métodos. Todos los objetos de una clase tienen el mismo
formato y comportamiento, son diferentes únicamente en los
valores que contienen sus atributos. Todos ellos responden a los
mismos mensajes.
•En general, es posible crear una clase a partir de cualquier
objeto que esté a nuestro alrededor. Por ejemplo:
Persona
Automóvil
Mascota
• 1.2.4. Herencia:
– Mecanismo que permite derivar caracteristicas de una clase a
otra y así extender sus funcionalidades.
– Java soporta la herencia mediante la extención de clases, que
permite definir una nueva clase basada en otra son modificarla.
• 1.2.4.1. Clasificación
• Herencia simple. Es aquella en la que una clase se extiende a
partir de otra que es única, es decir, un objeto hereda
propiedades a partir de una sola clase. Java soporta
exclusivamente la herencia simple.
• Herencia múltiple. Un objeto puede heredar propiedades de
varias clases previamente definidas. Solo algunos lenguajes
soportan estas caracteristicas, por ejemplo C++
• 1.2.4.1.1. Clase base y clase derivada:
– Una clase base es aquella que va a heredar sus propiedades y
una clase derivada es la que recibe las propiedades de la clase
base.
– En Java a la clase base se le denomina superclase o clase padre,
a la clase derivada se le llama subclase, clase hija o clase
extendida.
– Ejemplo:
Clase padre: Persona
Atributos: Nombre, Apellidos,
Edad, Estado civil
Métodos: LeerDatos(),
DespliegaInformación(),
CalculaEdad()
Clase derivada: Estudiante
Atributos: Carrera, No_control,
Semestre
Métodos:
CalcularCalificaciones(),
DespliegaCalificaciones(),
LeerCalificaciones()
• 1.2.5. Encapsulamiento
– Es la propiedad del que permite ocultar al mundo exterior la
representación interna del objeto. Esto quiere decir que el
objeto puede ser utilizado, pero los datos esenciales del mismo
no son conocidos fuera de él.
– La idea central del encapsulamiento es esconder los detalles y
mostrar lo relevante. Permite el ocultamiento de la información
separando el aspecto correspondiente a la especificación de la
implementación; de esta forma, distingue el "qué hacer" del
"cómo hacer". La especificación es visible al usuario, mientras
que la implementación se le oculta.
• El encapsulamiento en un sistema orientado a objeto se
representa en cada clase u objeto, definiendo sus atributos
y métodos con los siguientes modos de acceso:
– Público (+) Atributos o Métodos que son accesibles fuera de la
clase. Pueden ser llamados por cualquier clase, aun si no está
relacionada con ella.
– Privado (-) Atributos o Métodos que solo son accesibles dentro
de la implementación de la clase.
– Protegido (#): Atributos o Métodos que son accesibles para la
propia clase y sus clases hijas (subclases).
• 1.2.8. Polimorfismo
–El polimorfismo es la capacidad para enviar el mismo mensaje a
objetos diferentes y que cada uno de ellos responda de un modo
específico.
–Una de las formas en que se presenta el polimorfismo es
mediante la sobrecarga y se produce cuando se dispone de un
número de funciones y métodos diferentes pero representadas con
el mismo nombre. El polimorfismo se presenta cuando un único
método se puede aplicar a diferentes tipos de argumentos.
• 1.2.8.1. Sobrecarga
– Cuando en una clase un mismo método se define varias veces
con distinto número de parámetros pero utilizando diferentes
tipos de datos se dice que es una sobrecarga de métodos.
• 1.2.8.1.1. Ejemplo:
Class Datos {
Public void Suma (int s){
Total+=s;
}
Public void Suma (double s)
Total+=s;
}
1.3. Lenguajes orientados a objetos
• Action Script 3.
• Ada.
• C++.
• C#.
• VB.Net.
• Visual FoxPro.
• Clarion.
• Builder C++.
• Delphi.
• Harbour.
• Eiffel.
• Java.
• Léxico (en castellano).
• Objective-C.
• Ocaml.
• Oz.
• Perl (soporta herencia
múltiple).
• PHP (en su versión 5).
• PowerBuilder.
• Python.
• Ruby.
• Smalltalk.
• Magik (SmallWorld).
• 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.
1.4. Relaciones entre clases y objetos
•Algorítmicamente, las clases son descripciones netamente estáticas
o plantillas que describen objetos. Su rol es definir nuevos tipos
conformados por atributos y operaciones.
•Por el contrario, los objetos son instancias particulares de una
clase. Las clases son una especie de molde de fábrica, en base al cual
son construidos los objetos.
•La declaración de una variable de una clase NO crea el objeto.
• La asociación siguiente: <Nombre_Clase> <Nombre_Variable>;
(por ejemplo, Rectángulo R), no genera o no crea automáticamente
un objeto Rectángulo. Sólo indica que R será una referencia o una
variable de objeto de la clase Rectángulo.
• La creación de un objeto, debe ser indicada explícitamente por el
programador, de forma análoga a como inicializamos las variables
con un valor dado, sólo que para los objetos se hace a través de un
método Constructor.
• Las clases no se construyen para que trabajen de manera aislada, la
idea es que ellas se puedan relacionar entre sí, de manera que
puedan compartir atributos y métodos sin necesidad de rescribirlos.
• La posibilidad de establecer jerarquías entre las clases es una
característica que diferencia esencialmente la programación
orientada a objetos de la programación tradicional, ello debido
fundamentalmente a que permite extender y reutilizar el código
existente sin tener que rescribirlo cada vez que se necesite.
1.4.1. Los cuatro tipos de relaciones entre clases son:
– Herencia (Generalización / Especialización o Es-un)
– Agregación (Todo / Parte o Forma-parte-de)
– Composición (Es parte elemental de)
– Asociación (entre otras, la relación Usa-a)
1.4.1.1. Relación de Herencia (Generalización /
Especialización, Es un)
– Es un tipo de jerarquía de clases, en la que cada subclase
contiene los atributos y métodos de una (herencia simple) o más
superclases (herencia múltiple).
– Mediante la herencia las instancias de una clase hija (o
subclase) pueden acceder tanto a los atributos como a los
métodos públicos y protegidos de la clase padre (o superclase).
Cada subclase o clase hija en la jerarquía es siempre una
extensión (esto es, conjunto estrictamente más grande) de la(s)
superclase(s) o clase(s) padre(s) y además incorporar atributos y
métodos propios, que a su vez serán heredados por sus hijas.
• Representación
– En el diagrama de clases: La herencia se representa mediante
una relación de generalización/especificación, que se denota de
la siguiente forma:
• Ejemplo: El siguiente diagrama de clases muestra la
relación de Herencia entre la Clase Animal y sus hijas
• 1.4.1.2. Relación de Agregación (Todo / Parte, Forma
parte de)
– Es una relación que representa a los objetos compuestos por
otros objetos. Indica Objetos que a su vez están formados por
otros. El objeto en el nivel superior de la jerarquía es el todo y
los que están en los niveles inferiores son sus partes o
componentes.
• Representación
– En el diagrama de clases: La relación forma parte de, no es más
que una asociación, que se denota:
– La multiplicidad es el rango de cardinalidad permitido que
puede asumir la asociación. Se puede usar * en el limite
superior para representar una cantidad ilimitada (ejemplo: 3..*).
• Ejemplo: Objeto Casa descrito en términos de sus
componentes
• 1.4.1.3. Relación de composición
– Un componente es parte esencial de un elemento. La relación es
más fuerte que el caso de agregación, al punto que si el
componente es eliminado o desaparece, la clase mayor deja de
existir.
• Representación
– En el diagrama de clases: La relación de composición, se denota
de la siguiente forma:
• Ejemplo
• 1.4.1.4. Relación de Asociación («uso», usa, cualquier
otra relación)
– Es una asociación que se establece cuando dos clases tienen una
dependencia de utilización, es decir, una clase utiliza atributos
y/o métodos de otra para funcionar. Estas dos clases no
necesariamente están en jerarquía, es decir, no necesariamente
una es clase padre de la otra, a diferencia de las otras relaciones
de clases.
– El ejemplo mas común de esta relación es de objetos que son
utilizados por los humanos para alguna función, como Lápiz (se
usa para escribir), tenedor (se usa para comer), silla (se usa para
sentarse), etc. Otro ejemplo son los objetos Cajero y Cuenta. El
Cajero “usa a” la cuenta para hacer las transacciones de
consulta y retiro y verificar la información del usuario.
• Representación
– En el diagrama de clases: La relación de uso, se denota con una
dependencia estereotipada:
• Ejemplo
1.5. Papel de clases y objetos en el análisis y el
diseño
•Durante el análisis y las primeras etapas del diseño, el
desarrollador tiene dos tareas principales:
– Identificar las clases y objetos que forman el vocabulario del
dominio del problema.
– Idear las estructuras por las que conjuntos de objetos trabajan
juntos para lograr los comportamientos que satisfacen los
requerimientos del problema.
•En conjunto, se llama a esas clases y objetos las
abstracciones clave del problema, y se denomina a esas
estructuras cooperativas los mecanismos de la implantación.
Durante estas fases del desarrollo, el interés principal del
desarrollo debe estar en la vista externa de estas
abstracciones clave y mecanismos.
• Esta vista representa el marco de referencia lógico del
sistema y, por tanto, abarca la estructura de clases y la
estructura de objetos del mismo. En las etapas finales del
diseño y entrando ya en la implantación, la tarea del
desarrollador cambia: el centro de atención está en la
vista interna de estas abstracciones clave y mecanismos,
involucrando a su representación física. Pueden
expresarse estas decisiones de diseño como parte de la
arquitectura de módulos y la arquitectura de procesos del
sistema
1.5. Papel de clases y objetos en el análisis y el
diseño
•1.5.1. Abstracción
– Es el principio de ignorar aquellos aspectos de un fenómeno
observado que no son relevantes, con el objetivo de
concentrarse en aquellos que si lo son. Una abstracción denota
las características esenciales de un objeto (datos y operaciones),
que lo distingue de otras clases de objetos. Decidir el conjunto
correcto de abstracciones de un determinado dominio, es el
problema central del diseño orientado a objetos.
– Los mecanismos de abstracción son usados en POO para extraer
y definir del medio a modelar, sus características y su
comportamiento. Dentro de la POO son muy usados
mecanismos de abstracción: la Generalización, la Agregación y
la clasificación.
• La generalización es el mecanismo de abstracción mediante el cual
un conjunto de clases de objetos son agrupados en una clase de
nivel superior (Superclase), donde las semejanzas de las clases
constituyentes (Subclases) son enfatizadas, y las diferencias entre
ellas son ignoradas. En consecuencia, a través de la generalización,
la superclase almacena datos generales de las subclases, y las
subclases almacenan sólo datos particulares. La especialización es
lo contrario de la generalización. La clase Pediatra es una
especialización de la superclase Médico.
• La agregación es el mecanismo de abstracción por el cual una clase
de objeto es definida a partir de sus partes (otras clases de objetos).
Mediante agregación se puede definir por ejemplo un computador,
por descomponerse en: la CPU, la ULA, la memoria y los
dispositivos periféricos. El contrario de agregación es la
descomposición.
• La clasificación consiste en la definición de una clase a partir de un
conjunto de objetos que tienen un comportamiento similar. La
ejemplificación es lo contrario a la clasificación, y corresponde a la
instanciación de una clase, usando el ejemplo de un objeto en
particular.
• 1.5.2. Modularidad
– Es la propiedad que permite tener independencia entre las
diferentes partes de un sistema. La modularidad consiste en
dividir un programa en módulos o partes, que pueden ser
compilados separadamente, pero que tienen conexiones con
otros módulos. En un mismo módulo se suele colocar clases y
objetos que guarden una estrecha relación. El sentido de
modularidad está muy relacionado con el ocultamiento de
información.

Más contenido relacionado

Similar a Fundamentos de programacion (20)

Técnicas de programación
Técnicas de programaciónTécnicas de programación
Técnicas de programación
 
Clase 2
Clase 2Clase 2
Clase 2
 
Programación rientada a Aspectos - David Burbano
Programación rientada a Aspectos - David BurbanoProgramación rientada a Aspectos - David Burbano
Programación rientada a Aspectos - David Burbano
 
Poovb
PoovbPoovb
Poovb
 
Poo
PooPoo
Poo
 
Herrera poveda quilachamin_paper
Herrera poveda quilachamin_paperHerrera poveda quilachamin_paper
Herrera poveda quilachamin_paper
 
Programación modular
Programación modularProgramación modular
Programación modular
 
Introobjetos
IntroobjetosIntroobjetos
Introobjetos
 
Programación
ProgramaciónProgramación
Programación
 
Clase 2 POO
Clase 2 POOClase 2 POO
Clase 2 POO
 
Introduccion a la programación I Parte
Introduccion a la programación I Parte Introduccion a la programación I Parte
Introduccion a la programación I Parte
 
Introduccion a la Programación I parte
Introduccion a la Programación I parte Introduccion a la Programación I parte
Introduccion a la Programación I parte
 
Evoluciýýn de la programaciýýn
Evoluciýýn de la programaciýýnEvoluciýýn de la programaciýýn
Evoluciýýn de la programaciýýn
 
Unidad 1 clase 5 - fp
Unidad 1   clase 5 - fpUnidad 1   clase 5 - fp
Unidad 1 clase 5 - fp
 
Lucy
LucyLucy
Lucy
 
Programación Orientada a Aspectos (POA)
Programación Orientada a Aspectos (POA)Programación Orientada a Aspectos (POA)
Programación Orientada a Aspectos (POA)
 
Glosario de terminos
Glosario de terminosGlosario de terminos
Glosario de terminos
 
Programación Orientada a Aspectos - Fernando Córdoba
Programación Orientada a Aspectos - Fernando CórdobaProgramación Orientada a Aspectos - Fernando Córdoba
Programación Orientada a Aspectos - Fernando Córdoba
 
Tecnología Orientada A Objetos
Tecnología Orientada A ObjetosTecnología Orientada A Objetos
Tecnología Orientada A Objetos
 
Objetos: 1. paradigmas de programación
Objetos: 1. paradigmas de programaciónObjetos: 1. paradigmas de programación
Objetos: 1. paradigmas de programación
 

Último

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 

Último (7)

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 

Fundamentos de programacion

  • 2. 1. Fundamentos de programación orientada a objetos 1.1. Evolución de la programación •1.1.1. ¿Lenguaje de programación? – Conjunto de reglas, símbolos y palabras especiales utilizados para construir un programa de forma que pueda ser entendido por el ordenador. •1.1.2. Clasificación: – Lenguajes máquina – Lenguajes de bajo nivel o ensambladores – Lenguajes de alto nivel
  • 3. • 1.1.2.1. Lenguaje máquina – Es aquél que entiende directamente el ordenador ya que sus instrucciones son secuencias binarias. También se le conoce como código binario. – Dificultad de desarrollo, verificación y puesta a punto de programas. El código desarrollado no es portable.
  • 4. • 1.1.2.2. Lenguajes de bajo nivel o ensambladores – Está compuesto por las instrucciones del lenguaje máquina escritas mediante nemotécnicos. Es más fácil de utilizar que el anterior. – El programa sigue siendo dependiente de la máquina. Requiere una fase de traducción del código fuente al programa objeto.
  • 5. • 1.1.2.3. Lenguajes de alto nivel – Son los más utilizados por los programadores. – Mayor facilidad en el desarrollo, verificación y mantenimiento de los programas. – Los programas desarrollados son portables. Requiere una fase de traducción del código fuente al programa objeto.
  • 6. • Tanto los lenguajes ensambladores como los de alto nivel, antes de ser ejecutados se traducen a lenguaje máquina, único lenguaje interpretado por la computadora.
  • 7. • 1.1.3. Paradigmas de programación – No sólo existen varios tipos de lenguajes de programación, sino que también se pueden encontrar distintas formas de programar una aplicación. Hay diversos paradigmas que permiten encontrar una solución más adecuada a los problemas. Para cada paradigma conviene utilizar ciertos lenguajes de programación, y no cualquiera. Esto se debe a que la mayoría de los lenguajes fueron creados para ser utilizados en determinados ambientes de programación. – Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro sino que cada uno tiene ventajas y desventajas. También hay situaciones donde un paradigma resulta más apropiado que otro.
  • 8. • Ejemplos de paradigmas: – El paradigma imperativo es considerado el más común y está representado, por ejemplo, por el C o por BASIC. – El paradigma funcional está representado por la familia de lenguajes LISP (en particular Scheme), ML o Haskell. – El paradigma lógico, un ejemplo es PROLOG. – El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk.
  • 9. • 1.1.3.1. Programación secuencial – Este tipo de programación se basa en la creación de programas a partir de un conjunto de sentencias escritas de forma secuencial y cuya ejecución sigue dicha secuencia. Se utiliza la sentencia como goto o similar para realizar una bifurcación en la ejecución del programa hacia una etiqueta determinada. Una etiqueta es una marca en el código de un programa para que sea referenciado en algún momento de su ejecución.
  • 10. • Algunos lenguajes que se utilizan para este tipo de programación son Basic, Assembler, Fortran y Cobol, entre otros. • 1.1.3.2. Programación estructurada – La programación estructurada es una forma de escribir programación de computadora de forma clara, para ello se utilizan únicamente tres estructuras: secuencial, selectiva e iterativa; siendo innecesario y no permitiéndose el uso de la instrucción o instrucciones de transferencia incondicional (GOTO).
  • 11. •1.1.3.2.1. Ventajas – Los programas son más fáciles de entender, ya que pueden ser leídos de forma secuencial, sin necesidad de hacer seguimiento a saltos de línea (GOTO) dentro de bloques de código para entender la lógica. – La estructura del programa es más clara puesto que las instrucciones están más ligadas o relacionadas entre sí.
  • 12. – Reducción del esfuerzo en las pruebas. El seguimiento de las fallas (”depuración") se facilita debido a la lógica más visible, por lo que los errores se pueden detectar y corregir más fácilmente. – Reducción de los costos de mantenimiento. – Programas más sencillos y más rápidos. – Los bloques de código son auto explicativos, lo que apoya a la documentación.
  • 13. • 1.1.3.2.2. Desventajas – El principal inconveniente de este método de programación, es que se obtiene un único bloque de programa, que cuando se hace demasiado grande puede resultar problemático su manejo, esto se resuelve empleando la programación modular, definiendo módulos interdependientes programados y compilados por separado. Un método un poco más sofisticado es la programación por capas, en la que los módulos tienen una estructura jerárquica muy definida y se denominan capas.
  • 14. • 1.1.3.3. Programación orientada a objetos – La Programación Orientada a Objetos (POO u OOP según siglas en ingles) es un paradigma de programación que define los programas en términos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del resto). – La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar.
  • 15. – De esta forma, un objeto contiene toda la información, (los denominados atributos) que permiten definirlo e identificarlo frente a otros objetos pertenecientes a otras clases (e incluso entre objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos). • 1.1.3.3.1. Diferencias con la programación estructurada – Aunque la programación estructurada (a veces llamada procedural o procedimental) condujo a mejoras de la técnica de programación secuencial, los métodos modernos de diseño de software orientado a objetos incluyen mejoras entre las que están el uso de los patrones de diseño, diseño por contrato, y lenguajes de modelado (ejemplo: UML).
  • 16. • Las principales diferencias entre la programación estructurada y la orientada a objetos son: – La programación orientada a objetos es más moderna, es una evolución de la programación estructurada que plasma en el diseño de una familia de lenguajes conceptos que existían previamente con algunos nuevos. – La programación orientada a objetos se basa en lenguajes que soportan sintáctica y semánticamente la unión entre los tipos abstractos de datos y sus operaciones (a esta unión se la suele llamar clase). – La programación orientada a objetos incorpora en su entorno de ejecución mecanismos tales como el polimorfismo y el envió de mensajes entre objetos.
  • 17. 1.2. Conceptos fundamentales de la POO – La POO se basa en la idea natural de un mundo lleno de objetos y que la resolución de problemas se realiza mediante el modelo de objetos – La programación Orientada a Objetos es una metodología que basa la estructura de los programas en torno a los objetos. – Los lenguajes de POO ofrecen medios y herramientas para describir los objetos manipulados por un programa. Más que describir cada objeto individualmente, estos lenguajes proveen una construcción (Clase) que describe a un conjunto de objetos que poseen las mismas propiedades.
  • 18. •1.2.1. Objeto – Es un elemento, unidad o identidad (real o abstracta), que se tranforma en el dominio del software; con un papel bien definido en el dominio del problema. – Un objeto es una entidad caracterizada por sus atributos propios y cuyo comportamiento está determinado por las acciones o funciones que pueden modificarlo, así como también las acciones que requiere de otros objetos. Un objeto tiene identidad e inteligencia y constituye una unidad que oculta tanto datos como la descripción de su manipulación.
  • 19. •1.2.1.1. Características generales de los objetos – Un objeto se identifica por un nombre o un identificador único que lo diferencia de los demás. Ejemplo: el objeto Cuenta de Ahorros número 12345 es diferente al objeto Cuenta de Ahorros número 25789. En este caso el identificador que los hace únicos es el número de la cuenta. – Un objeto posee estados. El estado de un objeto está determinado por los valores que poseen sus atributos en un momento dado. – Un objeto tiene un comportamiento. Se describe o representa mediante sus operaciones o métodos. Los métodos se utilizarán para obtener o cambiar el estado de los objetos, así como para proporcionar un medio de comunicación entre objetos.
  • 20. –Un objeto tiene un conjunto de atributos. Los atributos de un objeto contienen valores que determinan el estado del objeto durante su tiempo de vida. Se implementan con variables, constantes y estructuras de datos (similares a los campos de un registro). –Los objetos soportan encapsulamiento. La estructura interna de un objeto normalmente está oculta a los usuarios del mismo. Los datos del objeto están disponibles solo para ser manipulados por los propios métodos del objeto. El único mecanismo que lo conecta con el mundo exterior es el paso de mensajes. –Un objeto tiene un tiempo de vida dentro del programa o sistema que lo crea y utiliza. Para ser utilizado en un algoritmo el objeto debe ser creado y al finalizar su utilización debe ser destruido de manera automática.
  • 21. •1.2.1.2. Mensaje – Es la petición de un objeto a otro para solicitar la ejecución de alguno de sus métodos o para obtener el valor de un atributo público. •Estructuralmente, un mensaje consta de 3 partes: – Identidad del receptor: Nombre del objeto que contiene el método a ejecutar. – Nombre del método a ejecutar: Solo los métodos declarados públicos. – Lista de Parámetros que recibe el método (cero o mas parámetros) •Su sintaxis algorítmica es: – <Nombre_Objeto>.<Nombre_Método> ( [<Lista de Parámetros> ] );
  • 22. • 1.2.2. Atributos – Son los datos o variables que caracterizan al objeto y cuyos valores en un momento dado indican su estado. – Un atributo es una característica de un objeto. Mediante los atributos se define información oculta dentro de un objeto, la cual es manipulada solamente por los métodos definidos sobre dicho objeto – Un atributo consta de un nombre y un valor. Cada atributo está asociado a un tipo de dato, que puede ser simple (entero, real, lógico, carácter, string) o estructurado (arreglo, registro, archivo, lista, etc.)
  • 23. • 1.2.3. Método. – Son funciones que determinan el comportamiento de los objetos. Se declaran y definen dentro de una clase por lo que cualquier objeto de esa clase tendrá disponibles a esos métodos. – Son las operaciones (acciones o funciones) que se aplican sobre los objetos y que permiten crearlos, cambiar su estado o consultar el valor de sus atributos. • 1.2.3.1. Clasificación – Métodos de consulta. Sirven para extraer información de los objetos. – Métodos modificadores. Sirven para cambiar uno o varios valores de los atrbutos del objeto. – Métodos de cálculo. Son los que manipulan los atributos de los objetos.
  • 24. – Métodos constructores. Inicializa el objeto con valores definidos. El constructor es llamado automáticamente siempre que se crea un objeto en la aplicación. – Métodos desctructores. Un objeto es destruido automáticamente cuando se eliminan todas las referencias al mismo. • 1.2.3.2. Definición y declaración de método – Un método esta compuesto por dos partes: la cabecera y el cuerpo. – Sintaxis de declaración //cabecera Acceso Tipo Nombre_Método (Parámetros) Excepciones{ //Cuerpo Sentencias }
  • 25. – La cabecera esta definida por: • Acceso al método. Puede ser publico o privado. • Tipo de valor de retorno. Si el método no requiere devolver un resultado se ocupa la palabra reservada void • Nombre del método. Se recomienda que éste sea descriptivo. • Parámetros. Son los valores que el método recibe del exterior y que requiere para su función. • Excepciones. Si el método puede lanzar excepciones se indica al final de la cabecera. – El cuerpo del método se encuentra encerrado entre llaves y contiene el grupo de sentencias que indican su funcionamiento.
  • 26. •1.2.4. Clase – Cada clase describe una posibilidad infinita de un conjunto individual de objetos. Cada objeto que pertenezca a una clase es llamado instancia de la clase. – La clase puede definirse como la agrupación o colección de objetos que comparten una estructura común y un comportamiento común. – Es una plantilla que contiene la descripción general de una colección de objetos. Consta de atributos y métodos que resumen las características y el comportamiento comunes de un conjunto de objetos. – Todo objeto (también llamado instancia de una clase), pertenece a alguna clase. Mientras un objeto es una entidad concreta que existe en el tiempo y en el espacio, una clase representa solo una abstracción.
  • 27. – Todos aquellos objetos que pertenecen a la misma clase son descritos o comparten el mismo conjunto de atributos y métodos. Todos los objetos de una clase tienen el mismo formato y comportamiento, son diferentes únicamente en los valores que contienen sus atributos. Todos ellos responden a los mismos mensajes. •En general, es posible crear una clase a partir de cualquier objeto que esté a nuestro alrededor. Por ejemplo: Persona Automóvil Mascota
  • 28. • 1.2.4. Herencia: – Mecanismo que permite derivar caracteristicas de una clase a otra y así extender sus funcionalidades. – Java soporta la herencia mediante la extención de clases, que permite definir una nueva clase basada en otra son modificarla. • 1.2.4.1. Clasificación • Herencia simple. Es aquella en la que una clase se extiende a partir de otra que es única, es decir, un objeto hereda propiedades a partir de una sola clase. Java soporta exclusivamente la herencia simple. • Herencia múltiple. Un objeto puede heredar propiedades de varias clases previamente definidas. Solo algunos lenguajes soportan estas caracteristicas, por ejemplo C++
  • 29. • 1.2.4.1.1. Clase base y clase derivada: – Una clase base es aquella que va a heredar sus propiedades y una clase derivada es la que recibe las propiedades de la clase base. – En Java a la clase base se le denomina superclase o clase padre, a la clase derivada se le llama subclase, clase hija o clase extendida. – Ejemplo: Clase padre: Persona Atributos: Nombre, Apellidos, Edad, Estado civil Métodos: LeerDatos(), DespliegaInformación(), CalculaEdad() Clase derivada: Estudiante Atributos: Carrera, No_control, Semestre Métodos: CalcularCalificaciones(), DespliegaCalificaciones(), LeerCalificaciones()
  • 30. • 1.2.5. Encapsulamiento – Es la propiedad del que permite ocultar al mundo exterior la representación interna del objeto. Esto quiere decir que el objeto puede ser utilizado, pero los datos esenciales del mismo no son conocidos fuera de él. – La idea central del encapsulamiento es esconder los detalles y mostrar lo relevante. Permite el ocultamiento de la información separando el aspecto correspondiente a la especificación de la implementación; de esta forma, distingue el "qué hacer" del "cómo hacer". La especificación es visible al usuario, mientras que la implementación se le oculta.
  • 31. • El encapsulamiento en un sistema orientado a objeto se representa en cada clase u objeto, definiendo sus atributos y métodos con los siguientes modos de acceso: – Público (+) Atributos o Métodos que son accesibles fuera de la clase. Pueden ser llamados por cualquier clase, aun si no está relacionada con ella. – Privado (-) Atributos o Métodos que solo son accesibles dentro de la implementación de la clase. – Protegido (#): Atributos o Métodos que son accesibles para la propia clase y sus clases hijas (subclases).
  • 32. • 1.2.8. Polimorfismo –El polimorfismo es la capacidad para enviar el mismo mensaje a objetos diferentes y que cada uno de ellos responda de un modo específico. –Una de las formas en que se presenta el polimorfismo es mediante la sobrecarga y se produce cuando se dispone de un número de funciones y métodos diferentes pero representadas con el mismo nombre. El polimorfismo se presenta cuando un único método se puede aplicar a diferentes tipos de argumentos.
  • 33. • 1.2.8.1. Sobrecarga – Cuando en una clase un mismo método se define varias veces con distinto número de parámetros pero utilizando diferentes tipos de datos se dice que es una sobrecarga de métodos. • 1.2.8.1.1. Ejemplo: Class Datos { Public void Suma (int s){ Total+=s; } Public void Suma (double s) Total+=s; }
  • 34. 1.3. Lenguajes orientados a objetos • Action Script 3. • Ada. • C++. • C#. • VB.Net. • Visual FoxPro. • Clarion. • Builder C++. • Delphi. • Harbour. • Eiffel. • Java. • Léxico (en castellano). • Objective-C. • Ocaml. • Oz. • Perl (soporta herencia múltiple). • PHP (en su versión 5). • PowerBuilder. • Python. • Ruby. • Smalltalk. • Magik (SmallWorld).
  • 35. • 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.
  • 36. 1.4. Relaciones entre clases y objetos •Algorítmicamente, las clases son descripciones netamente estáticas o plantillas que describen objetos. Su rol es definir nuevos tipos conformados por atributos y operaciones. •Por el contrario, los objetos son instancias particulares de una clase. Las clases son una especie de molde de fábrica, en base al cual son construidos los objetos. •La declaración de una variable de una clase NO crea el objeto.
  • 37. • La asociación siguiente: <Nombre_Clase> <Nombre_Variable>; (por ejemplo, Rectángulo R), no genera o no crea automáticamente un objeto Rectángulo. Sólo indica que R será una referencia o una variable de objeto de la clase Rectángulo. • La creación de un objeto, debe ser indicada explícitamente por el programador, de forma análoga a como inicializamos las variables con un valor dado, sólo que para los objetos se hace a través de un método Constructor.
  • 38. • Las clases no se construyen para que trabajen de manera aislada, la idea es que ellas se puedan relacionar entre sí, de manera que puedan compartir atributos y métodos sin necesidad de rescribirlos. • La posibilidad de establecer jerarquías entre las clases es una característica que diferencia esencialmente la programación orientada a objetos de la programación tradicional, ello debido fundamentalmente a que permite extender y reutilizar el código existente sin tener que rescribirlo cada vez que se necesite.
  • 39. 1.4.1. Los cuatro tipos de relaciones entre clases son: – Herencia (Generalización / Especialización o Es-un) – Agregación (Todo / Parte o Forma-parte-de) – Composición (Es parte elemental de) – Asociación (entre otras, la relación Usa-a) 1.4.1.1. Relación de Herencia (Generalización / Especialización, Es un) – Es un tipo de jerarquía de clases, en la que cada subclase contiene los atributos y métodos de una (herencia simple) o más superclases (herencia múltiple).
  • 40. – Mediante la herencia las instancias de una clase hija (o subclase) pueden acceder tanto a los atributos como a los métodos públicos y protegidos de la clase padre (o superclase). Cada subclase o clase hija en la jerarquía es siempre una extensión (esto es, conjunto estrictamente más grande) de la(s) superclase(s) o clase(s) padre(s) y además incorporar atributos y métodos propios, que a su vez serán heredados por sus hijas. • Representación – En el diagrama de clases: La herencia se representa mediante una relación de generalización/especificación, que se denota de la siguiente forma:
  • 41. • Ejemplo: El siguiente diagrama de clases muestra la relación de Herencia entre la Clase Animal y sus hijas
  • 42. • 1.4.1.2. Relación de Agregación (Todo / Parte, Forma parte de) – Es una relación que representa a los objetos compuestos por otros objetos. Indica Objetos que a su vez están formados por otros. El objeto en el nivel superior de la jerarquía es el todo y los que están en los niveles inferiores son sus partes o componentes. • Representación – En el diagrama de clases: La relación forma parte de, no es más que una asociación, que se denota:
  • 43. – La multiplicidad es el rango de cardinalidad permitido que puede asumir la asociación. Se puede usar * en el limite superior para representar una cantidad ilimitada (ejemplo: 3..*). • Ejemplo: Objeto Casa descrito en términos de sus componentes
  • 44. • 1.4.1.3. Relación de composición – Un componente es parte esencial de un elemento. La relación es más fuerte que el caso de agregación, al punto que si el componente es eliminado o desaparece, la clase mayor deja de existir. • Representación – En el diagrama de clases: La relación de composición, se denota de la siguiente forma: • Ejemplo
  • 45. • 1.4.1.4. Relación de Asociación («uso», usa, cualquier otra relación) – Es una asociación que se establece cuando dos clases tienen una dependencia de utilización, es decir, una clase utiliza atributos y/o métodos de otra para funcionar. Estas dos clases no necesariamente están en jerarquía, es decir, no necesariamente una es clase padre de la otra, a diferencia de las otras relaciones de clases. – El ejemplo mas común de esta relación es de objetos que son utilizados por los humanos para alguna función, como Lápiz (se usa para escribir), tenedor (se usa para comer), silla (se usa para sentarse), etc. Otro ejemplo son los objetos Cajero y Cuenta. El Cajero “usa a” la cuenta para hacer las transacciones de consulta y retiro y verificar la información del usuario.
  • 46. • Representación – En el diagrama de clases: La relación de uso, se denota con una dependencia estereotipada: • Ejemplo
  • 47. 1.5. Papel de clases y objetos en el análisis y el diseño •Durante el análisis y las primeras etapas del diseño, el desarrollador tiene dos tareas principales: – Identificar las clases y objetos que forman el vocabulario del dominio del problema. – Idear las estructuras por las que conjuntos de objetos trabajan juntos para lograr los comportamientos que satisfacen los requerimientos del problema. •En conjunto, se llama a esas clases y objetos las abstracciones clave del problema, y se denomina a esas estructuras cooperativas los mecanismos de la implantación. Durante estas fases del desarrollo, el interés principal del desarrollo debe estar en la vista externa de estas abstracciones clave y mecanismos.
  • 48. • Esta vista representa el marco de referencia lógico del sistema y, por tanto, abarca la estructura de clases y la estructura de objetos del mismo. En las etapas finales del diseño y entrando ya en la implantación, la tarea del desarrollador cambia: el centro de atención está en la vista interna de estas abstracciones clave y mecanismos, involucrando a su representación física. Pueden expresarse estas decisiones de diseño como parte de la arquitectura de módulos y la arquitectura de procesos del sistema
  • 49. 1.5. Papel de clases y objetos en el análisis y el diseño •1.5.1. Abstracción – Es el principio de ignorar aquellos aspectos de un fenómeno observado que no son relevantes, con el objetivo de concentrarse en aquellos que si lo son. Una abstracción denota las características esenciales de un objeto (datos y operaciones), que lo distingue de otras clases de objetos. Decidir el conjunto correcto de abstracciones de un determinado dominio, es el problema central del diseño orientado a objetos. – Los mecanismos de abstracción son usados en POO para extraer y definir del medio a modelar, sus características y su comportamiento. Dentro de la POO son muy usados mecanismos de abstracción: la Generalización, la Agregación y la clasificación.
  • 50. • La generalización es el mecanismo de abstracción mediante el cual un conjunto de clases de objetos son agrupados en una clase de nivel superior (Superclase), donde las semejanzas de las clases constituyentes (Subclases) son enfatizadas, y las diferencias entre ellas son ignoradas. En consecuencia, a través de la generalización, la superclase almacena datos generales de las subclases, y las subclases almacenan sólo datos particulares. La especialización es lo contrario de la generalización. La clase Pediatra es una especialización de la superclase Médico. • La agregación es el mecanismo de abstracción por el cual una clase de objeto es definida a partir de sus partes (otras clases de objetos). Mediante agregación se puede definir por ejemplo un computador, por descomponerse en: la CPU, la ULA, la memoria y los dispositivos periféricos. El contrario de agregación es la descomposición.
  • 51. • La clasificación consiste en la definición de una clase a partir de un conjunto de objetos que tienen un comportamiento similar. La ejemplificación es lo contrario a la clasificación, y corresponde a la instanciación de una clase, usando el ejemplo de un objeto en particular. • 1.5.2. Modularidad – Es la propiedad que permite tener independencia entre las diferentes partes de un sistema. La modularidad consiste en dividir un programa en módulos o partes, que pueden ser compilados separadamente, pero que tienen conexiones con otros módulos. En un mismo módulo se suele colocar clases y objetos que guarden una estrecha relación. El sentido de modularidad está muy relacionado con el ocultamiento de información.