poo en c#

16
Ing. Javier Aranda Pantoja Microsoft Certified Professional 1 Programación Orientada a Objetos con C# Ing. Javier Aranda Pantoja Microsoft Certified Professional Email: [email protected] Agenda Historia Estándares Componentes de C#

Upload: gerardo-vera-pacco

Post on 08-Nov-2014

49 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: POO en C#

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#

Page 2: POO en 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

Page 3: POO en C#

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");}

}}

Page 4: POO en C#

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;

Page 5: POO en C#

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

Page 6: POO en C#

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

Page 7: POO en C#

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

Page 8: POO en C#

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";

}}

}

Page 9: POO en C#

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;

}}

}

Page 10: POO en C#

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 !

Page 11: POO en C#

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();}

Page 12: POO en C#

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();}}

Page 13: POO en C#

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" ) ;}}

Page 14: POO en C#

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

Page 15: POO en C#

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!";}

Page 16: POO en C#

Ing. Javier Aranda PantojaMicrosoft Certified Professional 16

Clases estáticas

public static class Utiles{public static string GetCurrentDirectory(){System.IO.Directory.GetCurrentDirectory();}}