Extendiendo C#, COMPUMAT 2007

Click here to load reader

  • date post

    05-Dec-2014
  • Category

    Software

  • view

    157
  • download

    1

Embed Size (px)

description

A C# library to include AOP features in a .NET application using code generation.

Transcript of Extendiendo C#, COMPUMAT 2007

  • 1. EXTENDIENDO C# MEDIANTEEXTENDIENDO C# MEDIANTE ATRIBUTOS Y GENERACIONATRIBUTOS Y GENERACION DE CODIGODE CODIGO Autor: Lic. JosAutor: Lic. Jos Albert Cruz Albert Cruz AlmaguerAlmaguerGrupo de Investigacin de Programacin Avanzada (GIPA)Grupo de Investigacin de Programacin Avanzada (GIPA) Universidad de las Ciencias InformticasUniversidad de las Ciencias Informticas Noviembre del 2007Noviembre del 2007
  • 2. GIPA, Universidad de las Ciencias Informticas ContenidosContenidos Implementacin Programacin por Contratos Reutilizacin de interfaces Introduccin Conclusiones
  • 3. GIPA, Universidad de las Ciencias Informticas IntroduccinIntroduccin Plataforma .NET/C#:Plataforma .NET/C#: Capacidades reflexivasCapacidades reflexivas Atributos (metadatos)Atributos (metadatos) Compiladores gratis: acceso a ellosCompiladores gratis: acceso a ellos mediante APIs (mediante APIs (System.CodeDomSystem.CodeDom))
  • 4. GIPA, Universidad de las Ciencias Informticas IntroduccinIntroduccin Potencialidades (Metaprogramacin)Potencialidades (Metaprogramacin) Reutilizacin de componentesReutilizacin de componentes Correccin de programasCorreccin de programas
  • 5. GIPA, Universidad de las Ciencias Informticas Reutilizacin de interfacesReutilizacin de interfaces Asignacin esttica de tipos:Asignacin esttica de tipos: IComparableIComparable referencereference;; Fijada en compilacinFijada en compilacin Asignacin dinmica:Asignacin dinmica: objobj = 55= 55 Los tipos estn asociados a los objetos,Los tipos estn asociados a los objetos, no a las variables.no a las variables.
  • 6. GIPA, Universidad de las Ciencias Informticas Reutilizacin de interfacesReutilizacin de interfaces Conformidad estructural (Conformidad estructural (structuralstructural conformanceconformance):): obj.DoAction(parameter)obj.DoAction(parameter) Conformidad por nombre (Conformidad por nombre (conformance byconformance by namename)) :: Type p;Type p; p.Method() // Method existe enp.Method() // Method existe en TypeType
  • 7. GIPA, Universidad de las Ciencias Informticas Reutilizacin de interfacesReutilizacin de interfaces No se puede lograr que el fragmento:No se puede lograr que el fragmento: Image img = new Bitmap("icono.ico");Image img = new Bitmap("icono.ico"); obj.Image = img;obj.Image = img; que manipule medianteque manipule mediante objobj un objeto Label oun objeto Label o ButtonButton objobj tiene que pertenecer a un tipo que posea latiene que pertenecer a un tipo que posea la propiedadpropiedad ImageImage Tanto la clase Label como la clase ButtonTanto la clase Label como la clase Button poseen la propiedadposeen la propiedad ImageImage
  • 8. GIPA, Universidad de las Ciencias Informticas Reutilizacin de interfacesReutilizacin de interfaces Solucin, hSolucin, hacer que los objetosacer que los objetos implementen la interfaz:implementen la interfaz: public interface IImageContainer {public interface IImageContainer { Image Image { set; get;Image Image { set; get; }} }}
  • 9. GIPA, Universidad de las Ciencias Informticas Reutilizacin de interfacesReutilizacin de interfaces IImageContainer obj;IImageContainer obj; obj=obj= Runtime.Create(labeRuntime.Create(labe l);l); obj.Image = img;obj.Image = img; a partir del objeto label obtenemosa partir del objeto label obtenemos mediante reflection su interface ymediante reflection su interface y generamos un objeto proxy del mismogeneramos un objeto proxy del mismo que implemente la interfazque implemente la interfaz IImageContainer.IImageContainer.
  • 10. GIPA, Universidad de las Ciencias Informticas Programacin porProgramacin por ContratosContratos [Invariant("menor: cant > -1")] public class Pila { private int[] values; private int cant; [Require("Prec1: !Llena")] [Ensure("Post1: !Vacia")] public void Poner(int val) { values[cant++] = val; }
  • 11. GIPA, Universidad de las Ciencias Informticas Programacin porProgramacin por ContratosContratos Pila pila = new Pila(); IPila pilaContract; pilaContract = Runtime.Create(pila); Precondiciones: __Invariant(); if (!((!Llena))) throw new Exception("Require "Prec1" don't fulfilled.");
  • 12. GIPA, Universidad de las Ciencias Informticas Programacin porProgramacin por ContratosContratos Postcondiciones: if (!((!Vacia))) throw new Exception("Ensure "Post1" don't fulfilled."); __Invariant(); Invariantes: private void __Invariant() { if (!((cant > -1))) throw new Exception("Invariant "menor" don't fulfilled.");
  • 13. GIPA, Universidad de las Ciencias Informticas ImplementacinImplementacin ReflectionReflection AtributosAtributos Servicios del compilador de C# de MicrosoftServicios del compilador de C# de Microsoft Motor de plantillas StringTemplateMotor de plantillas StringTemplate
  • 14. GIPA, Universidad de las Ciencias Informticas ConclusionesConclusiones Librera que implementa conceptos del DPC.Librera que implementa conceptos del DPC. Permite manejar objetos que posean unaPermite manejar objetos que posean una determinada interfacedeterminada interface