21
Namespaces y C# Apoyo POO

Namespaces y C#

  • Upload
    uvm

  • View
    267

  • Download
    0

Embed Size (px)

Citation preview

Namespaces y C#

Apoyo POO

Introducción

• “Namespaces” o “nombres de espacios” son un concepto relativamente nuevo en los lenguajes de cómputo.

• A pesar de esto, son elementos muy útiles y en algunos casos, son esenciales en la programación.

2Mtl. Lourdes Cahuich

Introducción (cont.)

• Uno de los principales problemas en la programación es la sobre-posición de nombres.

• Podemos crear muchas clases para nuestro programa, y después decidir que importaremos la biblioteca de alguien más para ayudarnos con el programa.

3Mtl. Lourdes Cahuich

Introducción (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 Cahuich

• Podemos imaginar que “namespace” es similar a una ciudad.

• Si le comentamos a alguien que vivimos en la calle “principal”, no le estamos dando mucha información, ya que existen muchas calles con el mismo nombre, en diferentes ciudades.

• Para ubicar exactamente la calle, debemos incluir la ciudad en la que vivimos

5Mtl. Lourdes Cahuich

• Podemos hacer una analogía 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 Cahuich

• Se puede poner casi cualquier cosa dentro de un “namespace”, e incluso anidarlos entre sí.

namespace System namespace Chapter04

namespaceSystem.Data

namespaceSystem.Coleccion

claseSystem.Consola

claseChapter04.Spaceship

claseChapter04.Spacesstation

7Mtl. Lourdes Cahuich

• Los “namespace” anidados permiten crear jerarquías, como que México existe dentro del continente Americano, la Ciudad de México existe dentro de México, la colonia del Valle existe dentro de la ciudad de México.

8Mtl. Lourdes Cahuich

Creando “namespaces”

namespace Chapter04{class Spaceship{//código de la clase

}class Spacestation{//código de la clase

}}

9Mtl. Lourdes Cahuich

• Afuera del namespace, accederíamos a la clase, así:

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

• Otra cosa interesante es que podemos tener fragmentado un namespace en diferentes archivos

10Mtl. Lourdes Cahuich

• En un archivo podemos tener:

namespace Chapter04{class Spaceship{//código de la clase

}}• Y en otro archivo tener:

namespace Chapter04{class Spacestation{//código de la clase

}}• El compilador de C# automáticamente une los namespaces, así que no se

tiene que poner todo en un archivo enorme

11Mtl. Lourdes Cahuich

Usando los namespaces

• Cuando 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 después lo que queremos usar de dicho namespace.

12Mtl. Lourdes Cahuich

• Sin embargo, si sólo 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 código

using Chapter04;

//después en el código

Spaceship s = new Spaceship();

13Mtl. Lourdes Cahuich

Alias de namespace

• Los namespace anidados pueden ser un problema, sin embargo se puede poner un alias para acortar el uso de namespacesanidados

using D3D = Microsoft.DirectX.Direct3D;

14Mtl. Lourdes Cahuich

Actividad práctica 10

• Tomaremos el proyecto de herencia múltiple, que programamos en un solo archivo de clase, y lo separaremos en dos archivos diferentes, pero que tengan el mismo namespace

• De manera que, aunque hagamos este cambio en el código de la clase, no tendremos que modificar el código fuente principal del proyecto.

15Mtl. Lourdes Cahuich

El código original …

• Estaba en un solo archivo:

16Mtl. Lourdes Cahuich

namespace Herencia_2p{

public class B{ //propiedades

private int p_b; //miembro privado clase baseprotected int m_b; //miembro protegido clase basepublic int k_b; //miembro público clase base//métodospublic int cuadrado() { return k_b * k_b; } //propiedad públicapublic int producto() { return k_b * m_b; } //propiedad protegidapublic int otroProducto() { return p_b*k_b; } //funcion propiedad privada//setters/getterspublic 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;//métodospublic 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 Cahuich

Agregamos un nuevo archivo de clase

• Y en el nuevo archivo ponemos lo siguiente:

namespace Herencia_2p{

public class D : B //Herencia sencilla{ //propiedades de clase derivada

public int n_d;//métodospublic 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 Cahuich

En el archivo de clase original sólo queda:

namespace Herencia_2p{

public class B{ //propiedades

private int p_b; //miembro privado clase baseprotected int m_b; //miembro protegido clase basepublic int k_b; //miembro público clase base//métodospublic int cuadrado() { return k_b * k_b; } //propiedad públicapublic int producto() { return k_b * m_b; } //propiedad

protegidapublic int otroProducto() { return p_b*k_b; } //funcion

propiedad privada//setters/getterspublic void escribeP(int num){ p_b = num; }public void escribeM(int num) { m_b = num; }

} //Fin clase B (Base)} 19Mtl. Lourdes Cahuich

El código principal queda sin cambios

20Mtl. Lourdes Cahuich

21Mtl. Lourdes Cahuich