Tema 2 Lenguaje de Programación Orientada a Objetos
-
Upload
alvaro-aliaga-szz -
Category
Documents
-
view
6 -
download
0
Transcript of Tema 2 Lenguaje de Programación Orientada a Objetos
Lenguaje de Programación Orientada a objetosProgramación II
Contenido
Abstracción de datos
Identificadores de diseño de una clase
Construcción de clases
Sobrecarga de métodos
Funciones virtuales
Funciones virtuales puras
Funciones amigas
Operadores y Operadores amigos
Espacios de nombres
Abstracción de datos
La abstracción consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan.
En programación, el término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (característica de caja negra)
La abstracción es la propiedad que permite representar las características esenciales de un objeto sin preocuparse de las restantes características ( no esenciales ).
La abstracción se centra en la vista externa de un objeto, de modo que sirva para separar el comportamiento esencial de un objeto de su implementación.
Identificadores de diseño de un clase
Una clase es un tipo de dato que contiene uno o más elementos llamados dato miembro, y cero, una o más funciones que manipulan esos datos (llamados función miembro).
//Definicion de la clase CuentaBancariaclass CuentaBancaria{
//Definicion de miembros}
Construcción de clases
class CtaCte{ int balance; public int Balance { get { return balance; } set { balance = value; } }public void HacerDeposito(int importe) //No devuelve valor{}public int Mostrar(int codCtaCte) //Devuelve un entero{}
}CtaCte cc = new CtaCte();cc.Balance = 100; //AsignaciónBal = Mostrar(cc.Balance); //Obtención
Sobrecarga de métodos
Sobrecarga: varios métodos con el mismo nombre pero diferente “firma”.
public void HacerDeposito(int importe) {}
public void HacerDeposito(int importe, bool acreditar){}
Sobrecarga de operadores
public class ComplexNumber { private int real; private int imaginary;
public ComplexNumber() : this(0, 0) // constructor { } public ComplexNumber(int r, int i) // constructor { real = r; imaginary = i; } public override string ToString() { return(System.String.Format("{0} + {1}i", real, imaginary)); } // Sobrecargando el operador ‘+’: public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b) { return new ComplexNumber(a.real + b.real, a.imaginary + b.imaginary); } // Sobrecargando el operador ‘-’: public static ComplexNumber operator-(ComplexNumber a, ComplexNumber b) { return new ComplexNumber(a.real - b.real, a.imaginary - b.imaginary); } }
Métodos virtuales
Cuando una declaración de método de instancia incluye un modificador virtual, se dice que el método es un método virtual
La implementación de un método no virtual es invariable. La implementación es la misma tanto si se invoca un método en una instancia de la clase en la que se declaró o en una instancia de una clase derivada.
En cambio, la implementación de un método virtual se puede sustituir por clases derivadas.
Ejemplo
En el siguiente ejemplo se ilustran las diferencias entre los métodos virtuales y los métodos no virtuales:
using System; class A { public void F() { Console.WriteLine("A.F"); } public virtual void G() { Console.WriteLine("A.G"); } } class B: A { new public void F() { Console.WriteLine("B.F"); } public override void G() { Console.WriteLine("B.G"); } } class Test { static void Main() { B b = new B(); A a = b; a.F(); b.F(); a.G(); b.G(); } }
Se produce el siguiente resultado:A.FB.FB.GB.G
Métodos virtuales puros
Una función virtual pura o método virtual puro es una función virtual que necesita ser implementada por una clase derivada que no sea abstracta.
Las clases que contienen métodos virtuales puros son denominadas "abstractas".
Éstas no pueden ser instanciadas directamente, y una subclase de una clase abstracta sólo puede ser instanciada directamente si todos los métodos virtuales puros han sido implementados por esa clase o una clase padre.
Los métodos virtuales puros normalmente tienen una declaración (cabecera) pero no tienen definición (implementación).
Funciones amigas
Una función amiga es una función no miembro de una clase que puede tener acceso a las partes privadas de una clase; se debe declarar como amiga de la clase mediante la palabra reservada friend.
Las funciones amigas se declaran situando su prototipo de función en la clase de la que son amiga precediéndola con la palabra reservada friend.
Las razones fundamentales para utilizar funciones amigas es que algunas funciones necesitan acceso privilegiado a más de una clase.
Una segunda razón es que las funciones amigas pasan todos sus argumentos a través de la lista de argumentos y cada valor de argumento se somete a la conversión de asignación.
Operadores amigos
Un operador amigo, al igual que una función amiga, es aquel que aún cuando no es miembro de una clase tiene todos los privilegios de acceso a los miembros de dicha clase.
Espacios de Nombres
Los espacios de nombres son una manera de organizar los distintos tipos que aparecen en un programa en C#.
Conceptualmente es similar a una carpeta en un sistema de archivo del equipo.
Al igual que las carpetas, los espacios de nombres permiten a las clases tener un nombre completo único.
Un programa en C# contiene uno o más espacios de nombres, que quedan definidos por el programador o como parte de una biblioteca de clases previamente escrita.
Por ejemplo, el espacio de nombres System incluye la clase Console, una clase que contiene los métodos para leer y escribir en la ventana de la consola.
Espacios de nombres
El espacio de nombres System también contiene múltiples espacios de nombres diferentes, como System.IO y System.Collections.
Sólo .NET Framework tiene más de ochenta espacios de nombres, cada uno con miles de clases: los espacios de nombres se utilizan para minimizar la confusión que se podría producir entre tipos y métodos con nombres parecidos.
Los espacios de nombres tienen las propiedades siguientes:
Organizan proyectos de código de gran tamaño. El operador . delimita los espacios de nombres. El espacio de nombres global es el espacio de nombres
"raíz": global::System siempre hará referencia al espacio de nombres System de .NET Framework.
Para utilizar un espacio de nombre se hace uso de la palabra using.