031 Conceptos-de-Orientaci-n-a-Objetos
031 Conceptos-de-Orientaci-n-a-Objetos
031 Conceptos-de-Orientaci-n-a-Objetos
Clase
Objeto
Un objeto puede considerarse una "cosa" que puede realizar un conjunto de actividades
relacionadas. El conjunto de actividades que realiza el objeto define el comportamiento
del objeto. Por ejemplo, una persona (objeto) puede correr o saltar. En términos POO
puros, un objeto es una instancia de una clase.
Persona
- nombre: string;
- edad: int;
+ Persona (string n, int e);
+ Correr();
+ Saltar ();
En el mundo real, a menudo encontrarás muchos objetos individuales del mismo tipo.
Por ejemplo, puede haber miles de motos en existencia, todas de la misma marca y
modelo. Cada moto se ha construido a partir del mismo plano de diseño. En términos
orientados a objetos, decimos que la moto es una instancia de la clase de objetos
conocidos como motos.
Conceptos de Orientación de Objetos – Curso Completo de Desarrollo C Sharp – Ángel Arias
La encapsulación
public Apertura()
{
}
double altura;
double ancho;
double grosor;
En este ejemplo, resumimos algunos datos como altura, ancho, grosor y el método
obtener_volumen(). Otros métodos u objetos podrán interactuar con este objeto a
través de métodos que tengan un modificador de acceso público
Conceptos de Orientación de Objetos – Curso Completo de Desarrollo C Sharp – Ángel Arias
Abstracción
Por Ejemplo: una computadora portátil consta de muchas cosas, como procesador, placa
base, RAM, teclado, pantalla, antena inalámbrica, cámara web, puertos USB, batería,
altavoces, etc. Para usarlo, no necesitas saber cómo funcionan las pantallas LCD
internas, teclado, cámara web, batería, antena inalámbrica, trabajos de altavoz. Solo
necesita saber cómo operar la computadora portátil. Imagínate si los usuarios tuviesen
que conocer todos los detalles internos de la computadora portátil antes de poder
trabajar con ella. Esto tendría un costo muy elevado y no sería fácil que los usuarios
pudiesen usarlas.
Así que aquí el portátil es un objeto que está diseñado para ocultar su complejidad.
using System;
using System.Runtime.InteropServices;
// Publico
public int j;
//Protected
protected int k;
// Acceso desde ensamblaje interno así como desde clases derivadas fuera
de ensamblaje
protected internal int n;
// También private
static int x;
Ahora si accedemos a los mismos miembros desde dentro del Main e intentamos
compilar:
using System;
using System.Runtime.InteropServices;
// Publico
public int j;
//Protected
protected int k;
// Acceso desde ensamblaje interno así como desde clases derivadas fuera
de ensamblaje
protected internal int n;
Conceptos de Orientación de Objetos – Curso Completo de Desarrollo C Sharp – Ángel Arias
// También private
static int x;
Console.WriteLine(objeto.j);
Console.WriteLine(objeto.m);
Console.WriteLine(objeto.n);
Console.ReadKey();
}
Conceptos de Orientación de Objetos – Curso Completo de Desarrollo C Sharp – Ángel Arias
using System;
using System.Runtime.InteropServices;
// Publico
public int j;
//Protected
protected int k;
// Acceso desde ensamblaje interno así como desde clases derivadas fuera
de ensamblaje
protected internal int n;
// También private
static int x;
Console.WriteLine(objeto.j);
Console.WriteLine(Clase1.y);
Console.ReadKey();
Herencia
using System;
public ClaseHija()
{
Console.WriteLine("Constructor de la Clase Hija ejecutado ");
}
Resultado:
Esta salida prueba que cuando creamos una instancia de una clase secundaria, se llamará
automáticamente al constructor de la clase base antes que al constructor de la clase
secundaria. Por lo tanto, en general, las clases base se instancian automáticamente antes
que las clases derivadas.
Sintaxis:
}
Conceptos de Orientación de Objetos – Curso Completo de Desarrollo C Sharp – Ángel Arias
C # solo admite la herencia de una sola clase. Lo que esto significa es que su clase
puede heredar de una sola clase base a la vez. En el siguiente ejemplo, la clase C está
intentando heredar de la clase A y B al mismo tiempo. Esto no está permitido en C # y
nos provocará un error de tiempo de compilación.
public class A
{
}
public class B
{
}
public class C : A
{
Nota: Las clases pueden heredar de múltiples interfaces al mismo tiempo. Pregunta de la
entrevista: ¿Cómo se puede implementar la herencia múltiple en C #? Respuesta:
Usando Interfaces. Hablaremos de interfaces en nuestro último artículo.
using System;
Console.ReadKey();
}
}
Resultado:
Cuando deriva una clase de una clase base, la clase derivada heredará todos los
miembros de la clase base excepto los constructores. En el siguiente ejemplo la clase B,
heredará METODO1 y METODO2 de la clase A, pero no puede acceder a METODO2
debido al modificador de acceso privado. Se puede acceder a los miembros de la clase
declarados con un modificador de acceso privado solo en la clase. Pero, ¿Se heredan los
miembros de la clase privada a la clase derivada? Sí, los miembros privados también se
heredan en la clase derivada pero no podremos acceder a ellos. Al intentar acceder a un
miembro privado de la clase base en la clase derivada se reportará un error de tiempo de
compilación.
using System;
public class B : A
{
public static void Main()
{
B B1 = new B();
B1.METODO1();
using System;
Resultado:
Polimorfismo
using System;
{
Console.WriteLine("Tu edad es: " + edad);
Console.WriteLine("Tu nota es:" + notas);
}
}
Nota: En el código se observa que el método de mostrar se llama dos veces. El método
de mostrar funcionará de acuerdo con el número de parámetros y el tipo de parámetros.
Podemos usar la sobrecarga de métodos en una situación en la que necesitemos que una
clase pueda hacer algo, pero existe más de una posibilidad de que la información que se
proporciona al método que lleva a cabo la tarea sea diferente, es decir, si, por alguna
razón, necesitamos un par de métodos que tomen diferentes parámetros, pero que
conceptualmente hagan lo mismo.
using System;
}
}
El método de clase base tiene que estar marcado con una palabra clave virtual y
podemos anularlo en una clase derivada usando una palabra clave override.
Ejemplo:
using System;
// Clase Derivada
public class ClaseDerivada : ClaseBase
{
public override void Metodo1()
{
Console.Write("Método Clase Derivada");
}
}
// Usando clase base y clase derivada
public class Prueba
{
public void PruebaMetodo()
{
// llamando al método anulado
ClaseDerivada objetoDerivada = new ClaseDerivada();
objetoDerivada.Metodo1();
// llamando al método de la clase base
ClaseBase objetoBase = new ClaseBase();
objetoBase.Metodo1();
}
}
Resultado:
FIN