Vous êtes sur la page 1sur 42

!"#$%&'(&$")*+'*,-.

/)"'*
*

34-5+$67$

8&)9,):)05$;+9+&-4+5$.+4$$
<)5+=0$.+$/)5*+>-5$$
$
!"#$%$"&'()*+,*(&-$.+$/012-&+
$.+$/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$$
!"#$%$"&'()*+,*(&-$.+$/012-&+

?$

6-8&'8%+-*
G!
?!
F!
J!
6!
M!
O!
Q!

8&)9,):)0$.+$<)5+=0$
H@//$
I0.(4-&).-.$
",0:4->)+9*0$
30K+5)L9$
N9,-:5(4-,)L9$
NP+>:40$$
R+5(>+9$

!"#$%$"&'()*+,*(&-$.+$/012-&+

F$

6-8&'8%+-*
G!
?!
F!
J!
6!
M!
O!
Q!

8&)9,):)0$.+$<)5+=0$
H@//$
I0.(4-&).-.$
",0:4->)+9*0$
30K+5)L9$
N9,-:5(4-,)L9$
NP+>:40$$
R+5(>+9$

!"#$%$"&'()*+,*(&-$.+$/012-&+

J$

9:$;*'5*$8*
<"%8(%=%-*+'*>%5'?-@*
N9$*S&>)905$D+9+&-4+5T$(9$:&)9,):)0$+5$(9-$4+U$0$&+D4-$
'(+$A+9+$'(+$5+&T$0$:0&$40$D+9+&-4$5+$.+V+$5+D()&T$0$5+$
:(+.+$5+D()&$,09W+9)+9*+>+9*+E$$

!9$="%8(%=%-*+'*+%5'?-*+'*5-./)"'*:(+.+$
+9*+9.+&5+$,0>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$
!"#$%$"&'()*+,*(&-$.+$/012-&+

6$

<"%8(%=%-5*+'*>%5'?-*
-! /)$+Z->)9->05$405$+4+>+9*05$+9$+4$.)5+=0$.+$
(9$5)5*+>-$.+$5012-&+T$905$.-&+>05$,(+9*-$
'(+$+5*-5$,0>:-&*+9$(9$,09P(9*0$.+$
.+,)5)09+5$.+$.)5+=0E$
-! 309$+4$A+>:0T$U$-4$5+&$*-9$&+,(&&+9*+5T$+5*-5$
.+,)5)09+5$.+$.)5+=0$5+$,09W)&A+&09$+9$
:&)9,):)05$.+$.)5+=0$+9$+4$C&+-$.+$4-$@9D+9)+&[-$
.+$/012-&+E$
!"#$%$"&'()*+,*(&-$.+$/012-&+

M$

<"%8(%=%-*+'*>%5'?-*
"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$
!"#$%$"&'()*+,*(&-$.+$/012-&+

O$

6-8&'8%+-*
G!
?!
F!
J!
6!
M!
O!
Q!

8&)9,):)0$.+$<)5+=0$
H@//$
I0.(4-&).-.$
",0:4->)+9*0$
30K+5)L9$
N9,-:5(4-,)L9$
NP+>:40$$
R+5(>+9$

!"#$%$"&'()*+,*(&-$.+$/012-&+

Q$

AB,,*
Keep it simple, stupid!
Keep it simple and short
Keep it simple, sir
Keep it simple and straightforward
!

Alguna
idea?

-! 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
!"#$%$"&'()*+,*(&-$.+$/012-&+

\$

6-8&'8%+-*
G!
?!
F!
J!
6!
M!
O!
Q!

8&)9,):)0$.+$<)5+=0$
H@//$
I0.(4-&).-.$
",0:4->)+9*0$
30K+5)L9$
N9,-:5(4-,)L9$
NP+>:40$$
R+5(>+9$

!"#$%$"&'()*+,*(&-$.+$/012-&+

G]$

Recuerdan que
son las interfaces?

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.
!"#$%$"&'()*+,*(&-$.+$/012-&+

GG$

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$
!"#$%$"&'()*+,*(&-$.+$/012-&+

G?$

C-+$7)"%+)+*
-! 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).
!"#$%$"&'()*+,*(&-$.+$/012-&+

GF$

6-8&'8%+-*
G!
?!
F!
J!
6!
M!
O!
Q!

8&)9,):)0$.+$<)5+=0$
H@//$
I0.(4-&).-.$
",0:4->)+9*0$
30K+5)L9$
N9,-:5(4-,)L9$
NP+>:40$$
R+5(>+9$

!"#$%$"&'()*+,*(&-$.+$/012-&+

GJ$

!(-=7)D%'8&-*
E%4'7*+'*>'='8+'8(%)*

_-P0$",0:4->)+9*0$
!"#$%$"&'()*+,*(&-$.+$/012-&+

"4*0$",0:4->)+9*0$
G6$

!(-=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.
!"#$%$"&'()*+,*(&-$.+$/012-&+

GM$

!(-=7)D%'8&-*
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.
!"#$%$"&'()*+,*(&-$.+$/012-&+

GO$

F2'D=7-*+'*!(-=7)D%'8&-*
E-"D)7*+'*6-8&"-7*

   
 


!"#$%$"&'()*+,*(&-$.+$/012-&+

GQ$

!(-=7)D%'8&-*
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.

!"#$%$"&'()*+,*(&-$.+$/012-&+

G\$

!(-=7)D%'8&-*

-! ",0:4->)+9*0$`0&>-4$
-! ",0:4->)+9*0$$30>X9$
-! ",0:4->)+9*0$.+$309*+9).0$

!"#$%$"&'()*+,*(&-$.+$/012-&+

?]$

!(-=7)D%'8&-*
-! 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).
!"#$%$"&'()*+,*(&-$.+$/012-&+

?G$

6-8&'8%+-*
G!
?!
F!
J!
6!
M!
O!
Q!

8&)9,):)0$.+$<)5+=0$
H@//$
I0.(4-&).-.$
",0:4->)+9*0$
30K+5)L9$
N9,-:5(4-,)L9$
NP+>:40$$
R+5(>+9$

!"#$%$"&'()*+,*(&-$.+$/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.

!"#$%$"&'()*+,*(&-$.+$/012-&+

?F$

6-G'5%H8*
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.
!"#$%$"&'()*+,*(&-$.+$/012-&+

?J$

6-G'5%H8*
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.
!"#$%$"&'()*+,*(&-$.+$/012-&+

?6$

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*+$

!"#$%$"&'()*+,*(&-$.+$/012-&+

?M$

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.

!"#$%$"&'()*+,*(&-$.+$/012-&+

?O$

6-8&'8%+-*
G!
?!
F!
J!
6!
M!
O!
Q!

8&)9,):)0$.+$<)5+=0$
H@//$
I0.(4-&).-.$
",0:4->)+9*0$
30K+5)L9$
N9,-:5(4-,)L9$
NP+>:40$$
R+5(>+9$

!"#$%$"&'()*+,*(&-$.+$/012-&+

?Q$

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
!"#$%$"&'()*+,*(&-$.+$/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.

!"#$%$"&'()*+,*(&-$.+$/012-&+

F]$

<"%8(%=%-5*+'*>%5'?-*
"4D(905$.+$405$:&)9,):)05$D+9+&-4+5$'(+$
+Z:4),-&+>05$K0U$)9,4(U+97$
Para nunca olvidar:
$
-! Alta Cohesin
-! Bajo Acoplamiento
-! H@//$
-! I0.(4-&).-.$
La modularidad implica
-! ",0:4->)+9*0$$
cohesin?
-! 30K+5)L9$$
La encapsulacin
-! N9,-:5(4-,)L9$
promueve el bajo
acoplamiento?
!"#$%$"&'()*+,*(&-$.+$/012-&+

FG$

6-8&'8%+-*
G!
?!
F!
J!
6!
M!
O!
Q!

8&)9,):)0$.+$<)5+=0$
H@//$
I0.(4-&).-.$
",0:4->)+9*0$
30K+5)L9$
N9,-:5(4-,)L9$
NP+>:40$$
R+5(>+9$

!"#$%$"&'()*+,*(&-$.+$/012-&+

F?$

F2'D=7-*

Qu es un
compilador?

Revisemos este subconjunto de Conceptos Generales de


Diseo en un ejemplo. Usemos el caso de un compilador.
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

Compilador

cdigo
mquina
Qu tipo de tareas se requieren para
llevar a cabo la generacin de cdigo
mquina?

!"#$%$"&'()*+,*(&-$.+$/012-&+

FF$

F2'D=7-*
Este es el diseo tpico de un compilador.
cdigo
fuente

Anlisis
Lxico

Compilador

Anlisis
Sintctico

cdigo
mquina

Anlisis
Semntico

Generacin
de Cdigo
Intermedio

Flujo de datos

Optimizaci
n de Cdigo

Generacin
de Cdigo
Mquina

Conceptualmente un compilador opera en fases. Cada una de las


cuales transforma el programa fuente de una representacin en otra.

!"#$%$"&'()*+,*(&-$.+$/012-&+

FJ$

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$
!"#$%$"&'()*+,*(&-$.+$/012-&+

F6$

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$<+5:(S5$.+$
405$-9C4)5)5$5)9*C,A,0$U$5+>C9A,0T$-4D(905$
,0>:)4-.0&+5$D+9+&-9$(9-$&+:&+5+9*-,)L9$
)9*+&>+.)-$+Z:4[,)*-$.+4$:&0D&->-$a(+9*+E$$
!"#$%$"&'()*+,*(&-$.+$/012-&+

FM$

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$
!"#$%$"&'()*+,*(&-$.+$/012-&+

FO$

6-8('=&-5*L'8'")7'5*+'*>%5'?-*
Podemos reconocer
*
Podemos reconocer
aqu el principio de
modularidad?

Este es el diseo tpico de un compilador.


cdigo
fuente

Anlisis
Lxico

Compilador

Anlisis
Sintctico

aqu el principio de
cohesin?

cdigo
mquina

Anlisis
Semntico

Generacin
de Cdigo
Intermedio

Flujo de datos

Optimizaci
n de Cdigo

Generacin
de Cdigo
Mquina

Conceptualmente un compilador opera en fases. Cada una de las


cuales transforma el programa fuente de una representacin en otra.
!"#$%$"&'()*+,*(&-$.+$/012-&+

FQ$

6-8('=&-5*L'8'")7'5*+'*>%5'?-*
*
Podemos reconocer
Este diseo es
aqu el principio de
acoplamiento ?

simple?

cdigo
fuente

Anlisis
Lxico

Compilador

Anlisis
Sintctico

cdigo
mquina

Anlisis
Semntico

Generacin

de Cdigo
Intermedio

Flujo de datos

Optimizaci
n de Cdigo

Generacin
de Cdigo
Mquina

Conceptualmente un compilador opera en fases. Cada una de las


cuales transforma el programa fuente de una representacin en otra.

!"#$%$"&'()*+,*(&-$.+$/012-&+

F\$

6-8&'8%+-*
G!
?!
F!
J!
6!
M!
O!
Q!

8&)9,):)0$.+$<)5+=0$
H@//$
I0.(4-&).-.$
",0:4->)+9*0$
30K+5)L9$
N9,-:5(4-,)L9$
NP+>:40$$
R+5(>+9$

!"#$%$"&'()*+,*(&-$.+$/012-&+

J]$

P'5$D'8**
1! Qu es un Principio de Diseo de
Software?
2! KISS
3! Modularidad
4! Acoplamiento
5! Cohesin
6! Encapsulacin
!"#$%$"&'()*+,*(&-$.+$/012-&+

JG$

8&+D(9*-5Y$
30>+9*-&)05Y$
R+W)5-&$4-$N5:+,)B,-,)L9$
.+4$N9*&+D-V4+$G$.+4$
8&0U+,*0$.+$<)5+=0$
!"#$%$"&'()*+,*(&-$.+$/012-&+

J?$

Vous aimerez peut-être aussi