poo en c#
TRANSCRIPT
Ing. Javier Aranda PantojaMicrosoft Certified Professional 1
Programación Orientada a Objetos con C#
Ing. Javier Aranda PantojaMicrosoft Certified ProfessionalEmail: [email protected]
AgendaHistoriaEstándaresComponentes de C#
Ing. Javier Aranda PantojaMicrosoft Certified Professional 2
Historia de C#Plankalkul – Konrad Zuse1946
FORTRAN – John Backus1954
ALGOL – International Committe1958
C – Dennis Ritchie1972
C++ – Bjarne Stroustrup1983
C# – Anders Hejlsberg2000
Simula – Ole-Johan Dahl1965
Estándares.NET Common LanguageInfraestructure y C# son estándares internacionales:
ECMAISO/IEC
Ing. Javier Aranda PantojaMicrosoft Certified Professional 3
Componentes de C#Símbolos ( # {} <> ? )Tokens ( class return if else )Espacios en blancoPunctuators ( . , : ; )Comentarios ( // /**/ /// )Sentencias Pre-procesador (#define)
Componentes de C#
namespace SoftwareAndina.POO{class Principal{public static void Main(string args[]){
Console.WriteLine("Hola Mundo");}
}}
Ing. Javier Aranda PantojaMicrosoft Certified Professional 4
Namespaces (1)Es una agrupación lógica de clasesPermite organizar jerárquicamente las clasesEvita conflictos de nombre de clasePara crear un namespace:
namespace SoftwareAndina.POO{
...}
Namespaces (2)Para poder usar las clases contenidas en un namespace:
using SoftwareAndina.POO;
Ing. Javier Aranda PantojaMicrosoft Certified Professional 5
Punto de entrada principalUna aplicación en C# necesita un punto dónde comience su ejecuciónEl punto de entrada es la función estática Main
public static void Main(string args[]){
...}
Tipos de datosDos tipos de memorias administradas por el CLR: Stack y Heap
Stack. Es liberada automáticamenteHeap. Es administrada por el GarbageCollector
Tipos de DatosValue Types (int, bool, short, struct) StackReference Types (System.Object , SoftwareAndina.Empleado ) Heap
Ing. Javier Aranda PantojaMicrosoft Certified Professional 6
Garbage Collector
Tipos de datosSTACK
Char: ‘R’
Int32: 456
Int16: 26
HEAP
string:
string:
“Hola Mundo!”
Tipos de datosTipos por Valor. Son tipos ligeros ubicados en la pila. Contienen directamente su valor.
int, double, etc.Estructuras
Tipos por referencia. Se refieren a objetos manejados en un almacén especial (Heap). Son administrados automáticamente por el GC del CLR
Clases definidas en el FCLClases definidas por el usuario
Ing. Javier Aranda PantojaMicrosoft Certified Professional 7
ClasesEs una agrupación de datos (atributos), generalmente contenidos en variables, y de métodos (comportamientos) que operan sobre esos datos. [Atributos]Accesibilidad ModificadoresNombreClase : ListaBase
{MiembrosMetodos
}
ClasesAtributos. Describen a una clase (Adjetivos)Accesibilidad. Visibilidad de la clase
Public, InternalModificadores. Refinan la declaración de una clase.
abstract, sealed, staticLista Base. Clase de la que hereda y/o interfaces de las que heredaMiembrosMétodos
Ing. Javier Aranda PantojaMicrosoft Certified Professional 8
ClasesEjemplo
namespace SoftwareAndina{
public class Empleado{
public string Nombre;public string Edad;public void Saludar() { }
}}
ObjetosEs el resultado de instanciar una clase
using SoftwareAndina;namespace OtroNS{
class Principal{
public static void Main(){
Empleado juan = new Empleado();juan.Nombre = "Juan Perez";
}}
}
Ing. Javier Aranda PantojaMicrosoft Certified Professional 9
Tipos de datos nulosEs una forma para saber si una variable u objeto esta siendo usada o no
int? Nota = null ;Nullable<int> Nota = null ;
Para determinar si tiene valor
if( Nota.HasValue ){
...}
Propiedadespublic class Alumno{
private int _edad;public int Edad{
get { return _edad; }set{
if (value > 0)_edad = value;
else_edad = 0;
}}
}
Ing. Javier Aranda PantojaMicrosoft Certified Professional 10
Herencia
using System;namespace UMSS{
public class Auxiliar : Alumno{
public string Materia;public Auxiliar() { }
}}
Override (1)
public class Alumno{virtual void Saludo(){Console.Write( "Hola" );}}
public class Auxiliar:Alumno{overrides void Saludo(){Console.Write( "Hi !" ) ;
}}
Hi !
Ing. Javier Aranda PantojaMicrosoft Certified Professional 11
Overrides (2)
public class Auxiliar:Alumno{overrides void Saludo(){base.Saludo(); Console.Write( "Hi !" ) ;}}
public class Alumno{virtual void Saludo(){Console.Write( "Hola" );}}
HolaHi !
Interfaces
public class Auxiliar : Alumno, Comensal{
public Date FechaIngreso ( ){return DateTime.Now;
}}
public interface Comensal{
public Date FechaIngreso();}
Ing. Javier Aranda PantojaMicrosoft Certified Professional 12
Polimorfismo (1)Uno de los principales objetivos de la herenciaTipos de datos relacionados pueden ser tratados de forma genérica
interface IControl{
void Dibujar();}
Polimorfismo (2)class Button : IControl{public void Dibujar(){Console.WriteLine("Es un
boton");}
}
class TextBox : IControl{public void Dibujar(){Console.WriteLine("Es un
campo de texto");}
}
static void Main(string[] args){IControl[] controles = { new TextBox(), new Button() };foreach (IControl control in controles){
control.Dibujar();}}
Ing. Javier Aranda PantojaMicrosoft Certified Professional 13
DelegatesEs una clase especial que puede guardar referencias a un métodopublic delegate void MiEvento(string Dato);
public void algunaFuncion( string Dato){
Console.Write( Dato ) ;}
public MiEvento AlEntrar ;
AlEntrar += new MiEvento(algunaFuncion);
AlEntrar( “Entrando …” ) ;
1.
2.
3.
4.
5.
Clases Parciales
partial class Alumno{public void Estudiar(){Estudiando = true;}}
partial class Alumno{bool Estudiando = false; public void Saludo(){Console.Write( "Hola" ) ;}}
Ing. Javier Aranda PantojaMicrosoft Certified Professional 14
EnumeradoresEs un conjunto discreto de valores relacionados
Dias hoy = Dias.Lunes;if (hoy == Dias.Viernes){
...}
public enum Dias { Lunes,Martes,Miercoles,Jueves,Viernes,Sabado,Domingo
}
GenericsPoder mantener algoritmos genéricos aplicables a cualquier tipo de datoPoder evitar el costoso consumo de recursos del Boxing y Unboxing
Ing. Javier Aranda PantojaMicrosoft Certified Professional 15
Genericspublic class List<T> {
private T[] elements;private int count;
public void Add(T element) {if (count == elements.Length) Resize(count * 2);elements[count++] = element;
}
public T this[int index] {get { return elements[index]; }set { elements[index] = value; }
}
public int Count {get { return count; }
}}
List<int> intList = new List<int>();
intList.Add(1); // No boxingintList.Add(2); // No boxingintList.Add(“3"); // Compile-time error
int i = intList[0]; // No cast required
Métodos anónimos
this.button1.Click += delegate{label1.Text="Adios!";};
this.button1.Click += newSystem.EventHandler(this.button1_Click);
private void button1_Click(object sender, EventArgs e){
label1.Text = "Adios!";}
Ing. Javier Aranda PantojaMicrosoft Certified Professional 16
Clases estáticas
public static class Utiles{public static string GetCurrentDirectory(){System.IO.Directory.GetCurrentDirectory();}}