Namespaces y C#

  • View
    247

  • Download
    0

Embed Size (px)

Text of Namespaces y C#

Namespaces y C#

Namespaces y C#Apoyo POOIntroduccinNamespaces o nombres de espacios son un concepto relativamente nuevo en los lenguajes de cmputo.A pesar de esto, son elementos muy tiles y en algunos casos, son esenciales en la programacin.

2Mtl. Lourdes CahuichIntroduccin (cont.)Uno de los principales problemas en la programacin es la sobre-posicin de nombres.Podemos crear muchas clases para nuestro programa, y despus decidir que importaremos la biblioteca de alguien ms para ayudarnos con el programa.3Mtl. Lourdes CahuichIntroduccin (cont.)Qu pasa si algunas de las clases de la otra persona se llaman igual a algunas de nuestras clases, pero realizan cosas diferentes? Aunque no lo parezca, esto sucede con mucha frecuencia.4Mtl. Lourdes CahuichPodemos imaginar que namespace es similar a una ciudad. Si le comentamos a alguien que vivimos en la calle principal, no le estamos dando mucha informacin, ya que existen muchas calles con el mismo nombre, en diferentes ciudades.Para ubicar exactamente la calle, debemos incluir la ciudad en la que vivimos5Mtl. Lourdes CahuichPodemos hacer una analoga entre el namespace y el nombre de la ciudad y la calle en la que colocamos cierta clase, para as poder segmentar nuestro programa.

6Mtl. Lourdes CahuichSe puede poner casi cualquier cosa dentro de un namespace, e incluso anidarlos entre s.namespace Systemnamespace Chapter04namespace System.Datanamespace System.ColeccionclaseSystem.ConsolaclaseChapter04.SpaceshipclaseChapter04.Spacesstation7Mtl. Lourdes CahuichLos namespace anidados permiten crear jerarquas, como que Mxico existe dentro del continente Americano, la Ciudad de Mxico existe dentro de Mxico, la colonia del Valle existe dentro de la ciudad de Mxico.8Mtl. Lourdes CahuichCreando namespacesnamespace Chapter04{ class Spaceship{ //cdigo de la clase } class Spacestation{ //cdigo de la clase }}9Mtl. Lourdes CahuichAfuera del namespace, accederamos a la clase, as:

Chapter04.Spaceship s = new Chapter04.Spaceship();

Otra cosa interesante es que podemos tener fragmentado un namespace en diferentes archivos10Mtl. Lourdes CahuichEn un archivo podemos tener:

namespace Chapter04{ class Spaceship{ //cdigo de la clase }}Y en otro archivo tener:

namespace Chapter04{ class Spacestation{ //cdigo de la clase }}El compilador de C# automticamente une los namespaces, as que no se tiene que poner todo en un archivo enorme11Mtl. Lourdes CahuichUsando los namespacesCuando nos encontramos dentro de un namespace, podemos usar cualquier cosa que se encuentre en ellos sin tener que calificarlos.Pero si nos encontramos fuera del namespace, se debe calificar lo que usemos de ste, escribiendo primero el nombre del namespace, seguido de un punto y despus lo que queremos usar de dicho namespace.12Mtl. Lourdes CahuichSin embargo, si slo usaremos elementos de un solo namespace, podemos usar la palabra reservada using para evitar tener que calificar cada elemento que usemos de dicho namespace

//al inicio del archivo de cdigousing Chapter04;

//despus en el cdigoSpaceship s = new Spaceship();13Mtl. Lourdes CahuichAlias de namespaceLos namespace anidados pueden ser un problema, sin embargo se puede poner un alias para acortar el uso de namespaces anidados

using D3D = Microsoft.DirectX.Direct3D;14Mtl. Lourdes CahuichActividad prctica 10Tomaremos el proyecto de herencia mltiple, que programamos en un solo archivo de clase, y lo separaremos en dos archivos diferentes, pero que tengan el mismo namespaceDe manera que, aunque hagamos este cambio en el cdigo de la clase, no tendremos que modificar el cdigo fuente principal del proyecto.15Mtl. Lourdes CahuichEl cdigo original Estaba en un solo archivo:16Mtl. Lourdes Cahuichnamespace Herencia_2p{ public class B { //propiedades private int p_b; //miembro privado clase base protected int m_b; //miembro protegido clase base public int k_b; //miembro pblico clase base //mtodos public int cuadrado() { return k_b * k_b; } //propiedad pblica public int producto() { return k_b * m_b; } //propiedad protegida public int otroProducto() { return p_b*k_b; } //funcion propiedad privada //setters/getters public void escribeP(int num){ p_b = num; } public void escribeM(int num) { m_b = num; }

} //Fin clase B (Base)

public class D : B //Herencia sencilla { //propiedades de clase derivada public int n_d; //mtodos public void setvalueBase(int a) { m_b = a; } public void setvalueN(int a) { n_d = a; } public int prodNporM() { return n_d * m_b; } } //Fin clase D (Derivada)

public class C : D { public int c_c=5; public int productoDeTodos(){ return (k_b * n_d * c_c); //m clase abuelo, n clase padre, cc clase nieta } }}17Mtl. Lourdes CahuichAgregamos un nuevo archivo de claseY en el nuevo archivo ponemos lo siguiente:namespace Herencia_2p{ public class D : B //Herencia sencilla { //propiedades de clase derivada public int n_d; //mtodos public void setvalueBase(int a) { m_b = a; } public void setvalueN(int a) { n_d = a; } public int prodNporM() { return n_d * m_b; } } //Fin clase D (Derivada)

public class C : D { public int c_c = 5; public int productoDeTodos() { return (k_b * n_d * c_c); //m clase abuelo, n clase padre, cc clase nieta } }}18Mtl. Lourdes CahuichEn el archivo de clase original slo queda:namespace Herencia_2p{ public class B { //propiedades private int p_b; //miembro privado clase base protected int m_b; //miembro protegido clase base public int k_b; //miembro pblico clase base //mtodos public int cuadrado() { return k_b * k_b; } //propiedad pblica public int producto() { return k_b * m_b; } //propiedad protegida public int otroProducto() { return p_b*k_b; } //funcion propiedad privada //setters/getters public void escribeP(int num){ p_b = num; } public void escribeM(int num) { m_b = num; }

} //Fin clase B (Base)}19Mtl. Lourdes CahuichEl cdigo principal queda sin cambios

20Mtl. Lourdes Cahuich

21Mtl. Lourdes Cahuich