Publicado el 3 de Diciembre del 2018
733 visualizaciones desde el 3 de Diciembre del 2018
511,0 KB
8 paginas
Creado hace 14a (01/02/2010)
Programación II
Introducción
Ángel Lucas González Martínez
Jaime Ramírez
Jaime Ramírez
Guillermo Román
DLSIIS. Facultad de Informática
Universidad Politécnica de Madrid
1
Ilusión de Simplicidad
Introducción
2
1
Objetivo de la asignatura
• Aprender técnicas y conocimientos para el desarrollo de
programas/sistemas grandes (> 10Kloc)
programas/sistemas grandes (> 10Kloc)
• Dos problemas:
– El cerebro no es capaz de manejar tanta información
simultáneamente por lo que se necesitan procesos y herramientas
cognitivas
– Además, los programas monolíticos no ayudan a desarrollar un
b
buen software
ft
• La solución pasa por organizar y estructurar tanto el
conocimiento como los programas
Introducción
3
Abstracción
• La palabra clave es
ABSTRACCIÓN
ABSTRACCIÓN
es decir, no detenerse en los detalles hasta que no sea
necesario
• La abstracción es la herramienta cognitiva principal, que
nos permite abordar problemas enormes
• Por ejemplo, para conocer el número de alumnos que hay
en una clase una persona los contaría, lo visualizamos
en una clase una persona los contaría, lo visualizamos
como el “cardinal de un conjunto”, o “número de
elementos de una lista”, obviando los detalles de cada uno
de los alumnos
Introducción
4
2
Modelizar
• Otro concepto esencial es
MODELIZAR
MODELIZAR
consiste en representar el mundo real (el universo del
discurso) en un determinado lenguaje
• Los puntos claves en el proceso de modelización son:
– Entender el problema con un nivel de abstracción adecuado: ¿Qué
es lo importante? ¿Qué detalles no interesan?
– Necesitamos un lenguaje adecuado para representar el modelo en
función del nivel de abstracción
– Representar la solución con un nivel de abstracción adecuado
d
l d
b
d
• La capacidad de modelizar y abstraer se adquiere con la
l
l
i
i
i
experiencia.
• Misma realidad + distintos problemas ⇒ Mod. Diferentes
Introducción
Arquitectura: orden y estructura
• Observemos la siguientes clasificaciones de las piezas de
un automóvil:
un automóvil:
de plástico
de metal
de porcelana
de cristal
telas
etc.
bloque motor
carburador
encendido
chasis
interior
etc.
volante
cuadro
palanca
elevalunas
climatizador
etc.
• ¿Cuál nos gusta más? ¿Por qué?
• ¿Seríamos capaces de identificar a qué se dedican las
personas que hicieron las clasificaciones anteriores?
• Fueron un chatarrero, un ingeniero y un conductor.
Introducción
5
7
3
Ingeniería del Software
• La ingeniería del software busca:
– Eficiencia para construir nuevos sistemas
Eficiencia para construir nuevos sistemas
– Efectividad a la hora de resolver los problemas
– Poder reutilizar y aprovechar esfuerzos realizados
– Facilitar el crecimiento gradual y controlado de los sistemas
desarrollados
– Facilitar el mantenimiento del software realizado
– No ser “rehenes” de las personas que realizaron el software
• La solución:
• La solución:
– Compartimentar la solución
– Separar lo genérico (más reutilizable) de lo específico
– Documentar y especificar
Introducción
9
Cohesión y Acoplamiento
• La compartimentación depende del problema ... “a un
chatarrero no le vale de nada la estructuración del
ingeniero”
• La cohesión y el acoplamiento son dos conceptos
esenciales para la correcta organización del software
• La cohesión habla del grado de relación (similitud) que
existe entre los elementos de un mismo compartimento
• El acoplamiento habla del grado de relación (dependencia)
que existe entre compartimentos diferentes
q
p
• Los objetivos a perseguir son:
Maximizar la cohesión
Minimizar el acoplamiento
Introducción
10
4
Módulos
• Supongamos que tenemos un programa que compartimentar
•
¿Cómo lo estructuraríamos?
¿Cómo lo estructuraríamos?
– Clasificación alfabética por la primera letra del identificador
– Por un lado las operaciones de entrada/salida, por otro los elementos
básicos definidos (tipos), por otro las operaciones de tratamiento de esos
datos, por otro la miscelánea, etc.
– Se empaqueta cada tipo con las operaciones que trabajan sobre ellos
• Cualquier lenguaje de programación mínimamente aceptable permite
compartimentar el código en módulos.
– Ada es un lenguaje que permite la utilización de módulos (paquetes).
)
– Java es un lenguaje que permite la utilización de dos tipos de módulos: clases y
ió d
ód l
Ad
(
i
l
ili
l
j
paquetes.
Introducción
11
Necesidad de ocultación
En Ada 95:
package Fecha is
Ti
Dí
bt
i P iti
subtype Tipo_Día is Positive range 1 .. 31;
1 31
subtype Tipo_Mes is Positive range 1 .. 12;
subtype Tipo_Año is Positive range 1950 .. 2100;
type Tipo_Fecha is record
Día : Tipo_Día;
Mes : Tipo_Mes;
Año : Tipo_Año;
end record;
Posibles Puntos de
acoplamiento
procedure Crear Fecha (Día : in Tipo Día; Mes : in Tipo Mes;
procedure Crear_Fecha (Día : in Tipo_Día; Mes : in Tipo_Mes;
Año : in Tipo_Año; Fecha : out
Tipo_Fecha);
function darDía (Fecha : Tipo_Fecha) return Tipo_Día;
-- etc.
end Fecha;
Introducción
12
5
Necesidad de ocultación
En Java:
public class FechaPublico{
public class FechaPublico{
public int dia;
public int mes;
public int anio;
Posibles Puntos de
acoplamiento
public FechaPublico(int dia, int mes, int anio) {
………
}
public int darDia() {
………
}
}}
• ¿Qué puede hacer un programa cliente con este paquete?
• ¿Cuáles son los puntos de acoplamiento? ¿Qué debería quedar
oculto?
Introducción
13
Necesidad de ocultación
d
i
Puntos de acoplamiento
P
public class TestFechaPublica {
public static void main(String[] args) {//MAIN
Fecha.FechaPublico fecha1;
Fecha FechaPublico fecha1;
l
try {
fecha1 = new Fecha.FechaPublico(30, 5, 2005);
System.out.println("La primera fecha es " +fecha1);
fecha1.mes =2; //se crea una fecha incorrecta!!
System.out.println("La primera fecha es " + fecha1);
//Se produce una excepción
fecha1 = new Fecha FechaPublico(30 2 2005);
fecha1 = new Fecha.FechaPublico(30, 2, 2005);
} catch (Fecha.FechaIncorrecta e) {
e.printStackTrace();
} }//MAIN
}
Introducción
14
6
Un poco de terminología
• Un código ya existente se dice que ofrece unos
servicios
servicios
• El programa que lo usa se dice que es un cliente
• Los mecanismos de ocultación1 de los lenguajes
hacen que los programas clientes conozcan sólo la
interfaz (los servicios). De esta forma se abstraen
los detalles de implementación
Sin embargo, para usar correctamente un código el
• Sin embargo para usar correctamente un código el
programador debe conocer qué hace dicho código
y el coste. Para ello, junto al interfaz debe
aparecer una explicación de lo que dicho código
hace.
(1) http://es.wikipedia.org/wiki/Ocultaci%C3%B3n_de_informaci%C3%B3n
Introducción
15
Ocultación
p
• Las ventajas de la ocultación son:
– permite minimizar el acoplamiento,
,
– permite abstraerse de los detalles,
– independencia de la implementación,
– muy importante, reusabilidad
p
• Los lenguajes de programación ofrecen mecanismos para
ocultar e impedir a los clientes el uso de ciertos elementos
de nuestro código
• ¿Cómo se instrumenta la ocultación y qué ofrecen los
l
j ?
lenguajes?
• Los módulos tienen dos partes bien diferenciadas :
– Una parte pública o interfaz (specification en Ada).
– Una parte privada o implementación (body en Ada).
Introducción
16
7
Otros conceptos importantes
• Sobrecarga
• Genéricos o plantillas
• Herencia/Polimorfismo
• Legibilidad: convenios de nombres de identificadores
• Eficiencia: orden de complejidad
• etc
etc.
Introducción
17
8
Comentarios de: Programación II - Introducción (0)
No hay comentarios