05 as PrincipiosGeneralesDeDiseno
-
Upload
j-jesus-tovar-lerma -
Category
Documents
-
view
216 -
download
2
description
Transcript of 05 as PrincipiosGeneralesDeDiseno
-
!"#$%$"&'()*+,*(&-$.+$/012-&+ $.+$/012-&+
!"#$%&'(&$")*+'*,-./)"'**
34-5+$67$8&)9,):)05$;+9+&-4+5$.+4$$
-5$$$
-
?$!"#$%$"&'()*+,*(&-$.+$/012-&+
012'34-5*+'*'5&)*67)5'*
-! 30>:&+9.+&$+4$,09,+:*0$.+$:&)9,):)0$.+$.)5+=0$$
-! @.+9AB,-&$,(C4+5$509$405$:&)9,):)05$D+9+&-4+5$.+$.)5+=0$.+$(9$5)5*+>-$.+$5012-&+E$$
-
F$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-8&'8%+-*
G! 8&)9,):)0$.+$
-
J$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-8&'8%+-*
G! 8&)9,):)0$.+$
-
6$!"#$%$"&'()*+,*(&-$.+$/012-&+
9:$;*'5*$8**0$(9-$&+D4-$,0>X9>+9*+$-,+:*-.-$'(+$-U(.-$-$+W)*-&$(9$>-4$.)5+=0E$
8+&0T$'()S9$:&0:(50$+5*05$:&)9,):)05$.+$.)5+90$.+$
5012-&+Y$
-
M$!"#$%$"&'()*+,*(&-$.+$/012-&+
-
O$!"#$%$"&'()*+,*(&-$.+$/012-&+
"4D(905$.+$405$:&)9,):)05$D+9+&-4+5$'(+$+Z:4),-&+>05$K0U$)9,4(U+97$$-!H@//$-!I0.(4-&).-.$-!",0:4->)+9*0$$-!30K+5)L9$$-!N9,-:5(4-,)L9$
-
Q$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-8&'8%+-*
G! 8&)9,):)0$.+$
-
\$!"#$%$"&'()*+,*(&-$.+$/012-&+
AB,,*
Keep it simple, stupid! Keep it simple and short Keep it simple, sir Keep it simple and straightforward ! -! Todo diseo debera mantenerse lo ms simple posible -! En general, los diseos ms elegantes son los ms
simples -! La simplicidad en un diseo no se logra hacindolo de
forma rpida u omitiendo requerimientos -! Lograr la simplicidad en un diseo puede requerir un
tiempo considerable de anlisis durante varias iteraciones
Alguna idea?
-
G]$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-8&'8%+-*
G! 8&)9,):)0$.+$
-
GG$!"#$%$"&'()*+,*(&-$.+$/012-&+
C-+$7)"%+)+*
-! Modularidad es un principio de diseo que promueve el particionamiento de todo un sistema en varias partes, denominadas mdulos o componentes.
-! Este principio est basado en la idea de divide y vencers. Es ms fcil lidiar con la complejidad de todo un sistema mediante la descomposicin del mismo en partes ms pequeas.
-! Idealmente, cada mdulo o componente debe representar un elemento funcional del sistema.
-! Idealmente, cada mdulo o componente debera proveer mecanismos de acceso a su funcionalidad. Ej. interfaces.
Recuerdan que son las interfaces?
-
G?$!"#$%$"&'()*+,*(&-$.+$/012-&+
C-+$7)"%+)+*
^0&>-5$.+$:-&A,)09-&$(9$5)5*+>-7$
-!!9$5)5*+>-$.)5*&)V().0$5+$.)W).+$+9$,4)+9*+5$U$5+&W).0&+5$$
-!!9$5)5*+>-$5+$.)W).+$+9$5(V5)5*+>-5$$-!!9$5(V5)5*+>-$:(+.+$5+&$.)W).).0$+9$(90$0$>C5$:-'(+*+5$$
-!!9$:-'(+*+$5+$.)W).+$+9$,4-5+5$$-!!9-$,4-5+$5+$.)W).+$+9$>S*0.05$
-
GF$!"#$%$"&'()*+,*(&-$.+$/012-&+
-! En general la modularidad reduce la complejidad de un diseo, pues este es ms fcil de entender
-! Prodra promover la reusabilidad de los mdulos o componentes en algunos casos
-! Sin embargo, si se realiz una particin muy fina del sistema: -! Podra resultar en comunicacin ms compleja entre los
mdulos -! Podra afectar la seguridad debido al nmero de canales de
comunicacin (expuestos) -! Podra inhibir el desempeo, debido al overhead de
comunicacin -! Si se realiz poco particionamiento, podran reducirse las
desventajas anteriores, aunque al costo de cdigo ms grande (y sus posibles implicaciones, e.g. system footprint).
C-+$7)"%+)+*
-
GJ$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-8&'8%+-*
G! 8&)9,):)0$.+$
-
G6$!"#$%$"&'()*+,*(&-$.+$/012-&+
!(-=7)D%'8&-*
"4*0$",0:4->)+9*0$_-P0$",0:4->)+9*0$
E%4'7*+'*>'='8+'8(%)*
-
GM$!"#$%$"&'()*+,*(&-$.+$/012-&+
!(-=7)D%'8&-*
-! Es un principio de diseo basado en la idea de que los elementos de un sistema deberan ser altamente independientes entre ellos.
-! Los elementos altamente desacoplados no dependen altamente de otros elementos para prestar un servicio.
-! Al ser autocontenidos, los elementos altamente desacoplados requieren muy pocos elementos de informacin de otros elementos en el sistema.
-
GO$!"#$%$"&'()*+,*(&-$.+$/012-&+
En la Ingeniera de Software se reconocen algunos tipos de acoplamiento: Acoplamiento Normal: Un componente llama a otro y solo intercambian datos (parmetros de entrada/salida). Se reconocen algunos subtipos, dependiendo de los datos que intercambien los componentes: a)! de datos: los componentes se comunican mediante parmetros que
son tipos de datos simples. b)! de marca o por estampado: los componentes se comunican
mediante el paso de estructuras de datos. No es muy deseable si el componente receptor slo requiere parte de los datos que se le pasan.
c)! de control: cuando un mdulo controla la ejecucin del otro mediante un comando de control.
!(-=7)D%'8&-*
-
GQ$!"#$%$"&'()*+,*(&-$.+$/012-&+
F2'D=7-*+'*!(-=7)D%'8&-*E-"D)7*+'*6-8&"-7*
-
G\$!"#$%$"&'()*+,*(&-$.+$/012-&+
contina ! Acoplamiento Comn: Dos componentes acceden a un mismo recurso comn, tpicamente memoria compartida, una variable global o un archivo. Acoplamiento de Contenido: Ocurre cuando un componente modifica datos que son internos/privados de otro componente.
!(-=7)D%'8&-*
-
?]$!"#$%$"&'()*+,*(&-$.+$/012-&+
!(-=7)D%'8&-*
-!",0:4->)+9*0$`0&>-4$-!",0:4->)+9*0$$30>X9$-!",0:4->)+9*0$.+$309*+9).0$
-
?G$!"#$%$"&'()*+,*(&-$.+$/012-&+
-! En general el desacoplamiento promueve la modificabilidad del sistema, pues los cambios no deberan tener gran impacto sobre otras elementos.
-! Sin embargo, el hecho de tener elementos autocontenidos, podra resultar en cdigo ms grande (y sus posibles implicaciones, ej. system foot print).
!(-=7)D%'8&-*
-
??$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-8&'8%+-*
G! 8&)9,):)0$.+$
-
?F$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-G'5%H8*
Un elemento es altamente cohesivo, cuando hace una sla tarea o tiene una sla responsabilidad, y ofrece un conjunto de servicios y datos fuertemente relacionados.
-
?J$!"#$%$"&'()*+,*(&-$.+$/012-&+
En la Ingeniera de Software se reconocen algunos tipos de cohesin: Cohesin Funcional: Los elementos del componente estn relacionados porque contribuyen a una nica funcin.
Cohesin Secuencial: Los elementos del componente estn relacionados porque realizan distintas tareas en secuencia, de forma que las entradas de cada tarea son las salidas de la tarea anterior. Cohesin Comunicacional: Los elementos del componente estn relacionados porque realizan actividades usando los mismos datos.
6-G'5%H8*
-
?6$!"#$%$"&'()*+,*(&-$.+$/012-&+
contina ! Cohesin Procedimental: Los elementos del componente estn relacionados porque realizan actividades siempre en el mismo orden.
Cohesin Lgica: Los elementos del componente estn relacionados porque tienen la misma categora.
Cohesin Casual o Coincidente: Los elementos del componente estn relacionados porque contribuyen a las actividades pero relacionndose de una manera poco significativa.
6-G'5%H8*
-
?M$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-G'5%H8*
-!30K+5)L9$a(9,)09-4$-!30K+5)L9$5+,(+9,)-4$b$
c! 30K+5)L9$4LD),-$
c! 30K+5)L9$,0)9,).+9*+$
-
?O$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-G'5%H8*
La alta cohesin facilita el mantenimiento. Facilita el aislar los elementos para la modificacin o evolucin. Similarlmente, la alta cohesin hace los mdulos mas fciles de entender. Sin embargo, -! A menudo resulta cdigo ms grande. -! Podra inhibir el desempeo, por la razn anterior.
-
?Q$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-8&'8%+-*
G! 8&)9,):)0$.+$
-
?\$!"#$%$"&'()*+,*(&-$.+$/012-&+
F8()=5$7)(%H8**
-! La encapsulacin es un principio de diseo basado en la idea de ocultar los detalles de implementacin de un componente del sistema al exterior
-! La encapsulacin permite a los usuarios de un componente del sistema hacer uso de sus funcionalidades a travs de interfaces estables y bien definidas
-! Una encapsulacin efectiva generalmente resulta en interfaces simples, pues detalles irrelevantes son removidos de las mismas
-
F]$!"#$%$"&'()*+,*(&-$.+$/012-&+
F8()=5$7)(%H8**
Beneficios: -! Reduce complejidad en el sentido de que
a.! los elementos de la arquitectura pueden ser tratados como cajas negras que reciben entradas y producen salidas.
b.! las interfaces simples, son ms fciles de comprender y utilizar.
-! Facilita la modificabilidad en el sentido de que cambios la implementacin no son percibidos por los usuarios de los elementos. Las interfaces no sufren cambios.
Limitaciones: -! Podra inhibir la modificabilidad en el sentido de que algunos
cambios podran requerir cambios en las interfaces.
-
FG$!"#$%$"&'()*+,*(&-$.+$/012-&+
"4D(905$.+$405$:&)9,):)05$D+9+&-4+5$'(+$+Z:4),-&+>05$K0U$)9,4(U+97$$-!H@//$-!I0.(4-&).-.$-!",0:4->)+9*0$$-!30K+5)L9$$-!N9,-:5(4-,)L9$
-
F?$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-8&'8%+-*
G! 8&)9,):)0$.+$
-
FF$!"#$%$"&'()*+,*(&-$.+$/012-&+
F2'D=7-*
Revisemos este subconjunto de Conceptos Generales de Diseo en un ejemplo. Usemos el caso de un compilador.
Qu es un compilador?
Qu tipo de tareas se requieren para llevar a cabo la generacin de cdigo
mquina?
Un compilador puede ser visto como un sistema que acepta cdigo fuente y genera cdigo mquina para algn tipo de arquitectura de cmputo.
cdigo fuente
cdigo mquina
Compilador cdigo mquina
-
FJ$!"#$%$"&'()*+,*(&-$.+$/012-&+
cdigo fuente
cdigo mquina
Compilador cdigo mquina
Conceptualmente un compilador opera en fases. Cada una de las cuales transforma el programa fuente de una representacin en otra.
Anlisis Lxico
Anlisis Sintctico
Anlisis Semntico
Generacin de Cdigo Mquina Sintctico
Generacin de Cdigo Intermedio
Optimizacin de Cdigo Semntico Optimizacin de Cdigo de Cdigo
F2'D=7-*
Este es el diseo tpico de un compilador.
Flujo de datos
-
F6$!"#$%$"&'()*+,*(&-$.+$/012-&+
F2'D=7-*
-!!8I7%5%5*J;K%(-7$&+,)V+$,L.)D0$a(+9*+$U$:&0.(,+$(9-$(9$,09P(9*0$.+$*0d+95$
-!!8I7%5%5*,%8&I(3(-7$&+,)V+$405$*0d+95$U$5+$&+W)5-$5)$509$5)9*C,A,->+9*+$,0&&+,*05$e0V+.+,+9$-$4-$D&->CA,-$.+4$4+9D(-P+f$U$:&0.(,+$(9-$&+:&+5+9*-,)L9$.+$405$>)5>05$+9$(9-$+5*&(,*(&-$,09W+9)+9*+$:-&-$&+-4)g-&$0*&05$-9C4)5)5$
-
FM$!"#$%$"&'()*+,*(&-$.+$/012-&+
F2'D=7-*
-!!8I7%5%5*,'DI83(-7$&+W)5-$4-$+9*&-.-$&+,)V).-$:-&-$*&-*-&$.+$+9,09*&-&$+&&0&+5$5+>C9A,05$U$&+X9+$4-$)9a0&>-,)L9$50V&+$405$A:05$.+$.-*05$:-&-$4-$a-5+$.+$D+9+&-,)L9$.+$,L.)D0E$
-!L'8'")(%H8*+'*6H+%M-*B8&'"D'+%-7$C9A,0T$-4D(905$,0>:)4-.0&+5$D+9+&-9$(9-$&+:&+5+9*-,)L9$)9*+&>+.)-$+Z:4[,)*-$.+4$:&0D&->-$a(+9*+E$$
-
FO$!"#$%$"&'()*+,*(&-$.+$/012-&+
F2'D=7-*
-!0=3D%N)(%H8*+'*6H+%M-7$3095)5*+$+9$>+P0&-&$+4$,L.)D0$)9*+&>+.)0T$.+$>0.0$'(+$&+5(4*+$(9$,L.)D0$>C'()9-$>C5$&C:).0$.+$+P+,(*-&E$$
-!L'8'")(%H8*+'*6H+%M-*CI#$%8)O*$/+$*&-.(,+9$4-5$)95*&(,,)09+5$.+$,L.)D0$)9*+&>+.)0$-$)95*&(,,)09+5$.+$4-$>C'()9-$+5:+,[B,-E$
-
FQ$!"#$%$"&'()*+,*(&-$.+$/012-&+
cdigo fuente
cdigo mquina
Compilador cdigo mquina
Conceptualmente un compilador opera en fases. Cada una de las cuales transforma el programa fuente de una representacin en otra.
Anlisis Lxico
Anlisis Sintctico
Anlisis Semntico
Generacin de Cdigo Mquina Sintctico
Generacin de Cdigo Intermedio
Optimizacin de Cdigo Semntico Optimizacin de Cdigo de Cdigo
Podemos reconocer aqu el principio de
modularidad?
6-8('=&-5*L'8'")7'5*+'*>%5'?-**
Podemos reconocer aqu el principio de
cohesin? Este es el diseo tpico de un compilador.
Flujo de datos
-
F\$!"#$%$"&'()*+,*(&-$.+$/012-&+
cdigo fuente
cdigo mquina
Compilador cdigo mquina
Anlisis Lxico
Anlisis Sintctico
Anlisis Semntico
Generacin de Cdigo Mquina Sintctico
Generacin de Cdigo Intermedio
Optimizacin de Cdigo Semntico de Cdigo Intermedio
Optimizacin de Cdigo de Cdigo
6-8('=&-5*L'8'")7'5*+'*>%5'?-**
Conceptualmente un compilador opera en fases. Cada una de las cuales transforma el programa fuente de una representacin en otra.
Flujo de datos
Podemos reconocer aqu el principio de
acoplamiento ?
Este diseo es simple?
-
J]$!"#$%$"&'()*+,*(&-$.+$/012-&+
6-8&'8%+-*
G! 8&)9,):)0$.+$
-
JG$!"#$%$"&'()*+,*(&-$.+$/012-&+
P'5$D'8**
1! Qu es un Principio de Diseo de Software?
2! KISS 3! Modularidad 4! Acoplamiento 5! Cohesin 6! Encapsulacin
-
J?$!"#$%$"&'()*+,*(&-$.+$/012-&+
8&+D(9*-5Y$30>+9*-&)05Y$
R+W)5-&$4-$N5:+,)B,-,)L9$.+4$N9*&+D-V4+$G$.+4$8&0U+,*0$.+$