05 as PrincipiosGeneralesDeDiseno

42
!"# % "&'()*+,*(&- .+ /012-&+ !"#$%&'(&$") +' ,-./)"' 34-5+ 67 8&)9,):)05 ;+9+&-4+5 .+4 <)5+=0 .+ /)5*+>-5

description

Diseño arquitectonico para la materia de Arquitectura de Computadoras.

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