tema 0: introducció - dsic.upv.esjlinares/csharp/curs_c_sharp06.pdf · windows forms vista general...

117
Programaci Programaci ó ó amb C# .NET amb C# .NET Tema Tema 0: 0: Introducci Introducci ó ó Í Í ndex ndex Introducció C#: Orígens i evolució Objectius del mòdul Continguts del curs

Upload: trinhdang

Post on 15-Jun-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ProgramaciProgramacióó amb C# .NETamb C# .NETTema Tema 0:0: IntroducciIntroduccióó

ÍÍndexndex

Introducció

C#: Orígens i evolució

Objectius del mòdul

Continguts del curs

Page 2: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

IntroducciIntroduccióóEl disseny i la programació d’aplicacions ha canviat molt des dels seus començaments.

Microsoft ens ofereix un nou entorn i una nova plataforma de programació:

.NET 2.0 Framework i Visual Studio 2005

Els programadors tenen ara al seu abast unes avançades eines per a construir la nova generació d’aplicacions d’escriptori i d’internet.

En este context, Microsoft presenta un llenguatge de programació nou: C#

C# és una eina més de treball però adaptada a les noves tecnologies i a les necessitats actuals del programadors.

Amb .NET s’obtenen aplicacions de major qualitat d’una forma senzilla i que requereixen menys temps de desenvolupament.

Page 3: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#: OrC#: Oríígens i Evolucigens i EvolucióóFins ara C i C++ han sigut els llenguatges escollits pels programadors per a crear aplicacions que requereixen un nivell alt de control.

Malgrat la seua potència, C i C++ requereixen un gran esforç per part del programador si els comparem amb altres com Visual Basic.

Es necessitava d’un llenguatge senzill que permetera crear aplicacions d’una forma ràpida però que, a la volta, oferira al programador un gran control i s’integrara bé amb les noves tecnologies existents i futures.

Microsoft presenta C# a l’any 2000, fruit de l’esforç i treball de moltes persones, destaquen Anders Hejlsberg* i Scott Wiltamuth.

C# combina la potència i flexibilitat de C++ amb la simplicitat i les capacitats RAD de Visual Basic.

C# hereta el millor de C++, Java i Visual Basic, així és relativament fàcil adaptar-se a ell.

.NET està programat principalment amb C#.

C# es presenta com un llenguatge orientat a objectes i al treball amb components, modern, flexible, segur i productiu.

Page 4: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Objectius del mòdulObjectius del mòdulEste mòdul tractarà la programació d’aplicacions en l’entorn .NET

S’utilitzarà el nou llenguatge C# i Visual Studio 2005.

Al llarg del curs s’aprendàn, entre altres:

Les estructures del llenguatge,

L’entorn de treball Visual Studio i la plataforma .NET,

La programació orientada a objectes amb C#,

El treball amb bases de dades amb ADO.NET,

La creació d’aplicacions de consola i d’aplicacions Windows,

Creació d’aplicacions Web.

Continguts del cursContinguts del cursBloc 1: Introducció

INTRODUCCIÓPRIMER CONTACTE AMB L’ENTORN Visual Studio.NETLA PLATAFORMA MICROSOFT.NET

Bloc 2: El llenguatge C#EL LLENGUATGE DE PROGRAMACIÓ C# CREACIÓ D’APLICACIONS DE CONSOLAPROGRAMACIÓ OO EN C#

Bloc 3: Programaciód’Aplicacions Windows

INTRODUCCIÓ A WINDOWS FORMSCONTROLS D’US HABITUALDISSENY D’INTERFÍCIES D’USUARI

Bloc 4: Manipulació de Bases de Dades

ACCÉS A DADES AMB ADO.NETDISSENY D’INFORMES AMB CRYSTAL REPORTS.NET

Bloc 5: Creaciód’Aplicacions Web

INTRODUCCIÓ A ASP.NETWEB FORMSACCÉS A DADES AMB WEB FORMSCREACIÓ i ÚS D’UN SERVEI WEB

Page 5: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0
Page 6: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ProgramaciProgramacióó amb C# .NETamb C# .NET

Tema Tema 1:1: La plataforma .NET La plataforma .NET (.Net (.Net FrameworkFramework))

ÍÍndicendice

IntroducciónCaracterísticas de .NETComponentes .NETPlataforma .NETNovedades Framework 2.0EjemploEnlaces de interés

Page 7: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

IntroducciIntroduccióónnMicrosoft.NET es el conjunto de nuevas tecnologías en las que Microsoft ha estado trabajando durante los últimos años.NET ofrece una plataforma sencilla y potente para distribuir el software en forma de servicios que puedan ser suministrados remotamente y que puedan comunicarse y combinarse unos con otros de manera totalmente independiente de la plataforma, lenguaje de programación y modelo de componentes con los que hayan sido desarrollados.

www.microsoft.com/net

www.microsoft.com/latam/net/

.NET es una nueva plataforma para el desarrollo y explotación de aplicaciones “gestionadas” (managed) modernas y orientadas a objetos.

Las aplicaciones .NET se pueden desarrollar en cualquier lenguaje de programación que se ajusta a .NET

.NET soporta una extensa colección de librerías de clases independientes del lenguaje de programación.

.NET soporta la creación de componentes.

.NET ofrece integración multi-lenguaje, reutilización de componentes, y herencia entre componentes desarrollados en diferentes lenguajes.

CaracterCaracteríísticas de .NETsticas de .NET

Page 8: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

.NET ofrece un nueva manera de desarrollar aplicaciones de sobremesa usando las clases Windows Forms.NET ofrece una nueva manera de desarrollar aplicaciones basadas en navegador Web a través de ASP.NETLas clases ADO.NET proveen una arquitectura desconectada para acceso a datos a través de Internet.NET soporta la creación de Servicios Web XML independientes de la plataforma, a través de SOAP (Simple Object Access Protocol) y WSDL (Web ServicesDescription Language).NET ofrece una nueva arquitectura para el desarrollo y explotación de objetos remotos.NET convierte a varias tecnologías y técnicas Windows en obsoletas

Componentes de .NETComponentes de .NET

Microsoft.NET está compuesto de:Plataforma .NET.NET Framework SDKVisual Studio .NETServicios Web (Microsoft .NET myServices)Servidores para empresas (SQL Server.NET...)

Page 9: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Plataforma .NETPlataforma .NET

El concepto en el que se basa .NET no es nuevo.Java y su entorno de ejecución (JVM) ya utilizan el concepto de encapsulamiento del sistema operativo para permitir la interoperabilidad entre diferentes sistemas operativos.

Visual Studio.N

ETVisual S

tudio.NET

Base Class LibraryBase Class Library

Common Language Specification Common Language Specification -- CLSCLS

Common Language RuntimeCommon Language Runtime

ADO.NET, XML, Enterprise ServicesADO.NET, XML, Enterprise Services

VBVB C++C++ C#C#

ASP.NET: ASP.NET: ServiciosServicios WebWeby Web Formsy Web Forms

JScriptJScript ……

WindowsWindowsFormsForms

Vista general de la plataforma

Page 10: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Novedades Novedades FrameworkFramework 2.02.0Soporte para plataforma de 64-bitLa I/O ha sido mejorada para leer y escribir datos usando compresión GZIP

Nueva clase GZipStreamLa clase SerialPort permite acceso a puertos y comunicación con dispositivos serie.Soporte SMTP para envío y recepción de mensajes de e-mail

Clase SmtpClient tiene métodos para enviar mensajes (Send, SendAsync)Los Mensajes en sí se manejan como MailAddress, Message, MailAttachment

Soporte FTP añadido: System.Net.FtpMethodsPing está soportado:

System.Net.NetworkInformation.Ping

CommonCommon LanguageLanguage RuntimeRuntime (CLR)(CLR)

Un Runtime es un entorno en el que se ejecutan los programas.

El CLR se encarga de gestionar la ejecución de las aplicaciones .NET.

Al código escrito para ejecutarse en la plataforma .NET se le llama código gestionado.

Al código escrito para ejecutarse directamente se le llama código no gestionado o código nativo.

El CLR realiza la compilación Just in Time (JIT) que traduce el código gestionado en código nativo sobre la arquitectura de hardware que esté corriendo.

Page 11: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Modelo de Modelo de ejecuciejecucióónn

VBC# C++

Compilador Compilador Compilador Código no manejado

Códigomanejado

Códigofuente

Ejecutable (.EXE), Página Web (.ASPX), Servicio Local (.DLL), Servicio Web (.ASMX)

CommonCommon LanguageLanguage RuntimeRuntime

Compilador JITCompilador JIT

CCóódigodigo NativoNativo

ServiciosServicios del Sistema del Sistema OperativoOperativo

Características y servicios que ofrece:Ejecución multiplataformaIntegración de lenguajes Gestión de memoria (Recolector de basura)Tratamiento de excepcionesSoporte multi-hilo (multi-threading)Distribución transparenteInteroperabilidad con código antiguo

Page 12: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Clases de la plataforma .NET (FCL)Clases de la plataforma .NET (FCL)

La librería de clases (Framework ClassLibrary) es una librería formada por cientos de tipos que permiten acceder a los servicios ofrecidos por el CLR y a sus funcionalidades más frecuentemente usadas.

Además el programador puede crear nuevas clases que extiendan su funcionalidad y se integren perfectamente con el resto de las clases de la FCL.

Esta librería de clases está escrita en MSIL

Cualquier lenguaje cuyo compilador genere MSIL podrá usarla.

Con esta librería podemos crear todo tipo de aplicaciones: aplicaciones de consola, de ventanas, servicios Web, ASP.NET...

Page 13: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Dada la amplitud de la FCL, ha sido necesario organizar las clases en ella incluida en espacios de nombres(Namespace) que agrupen clases con funcionalidades similares.

El espacio de nombres System es el espacio raíz del que cuelgan todos los demás.

Espacios de nombres más usados:

System: Contiene tipos de datos muy usados, datos básicos, tablas, excepciones... Es el raíz.

System.Object: Soporta toda la jerarquía de las clases de .NET.

System.Collections:Colecciones de datos de uso común como pilas, colas, listas...

System.Data: Manipulación de bases de datos. Forma la denominada arquitectura ADO.NET.

System.IO: Manipulación de ficheros.

System.Reflection: Acceso a los metadatos que acompañan a los módulos de código.

System.Math: Funciones logarítmicas, trigonométricas...

System.XML: Acceso a datos en formato XML.

Sytem.Web: Aplicaciones Web.

Page 14: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ASP.NETASP.NET

ASP.NET es la versión para la plataforma .NET de la tecnología ASP (Active Server Pages).

Dentro de esta capa podemos distinguir tres partes muy diferenciadas:

Web FormsServer ControlsWeb Services

Windows Windows FormsFormsSon una forma avanzada e integrada de crear aplicaciones de escritorio Win32 estándar.

Descienden de las Windows FoundationClasses (WFC) de Microsoft.

Cualquier lenguaje de la plataforma .Net puede utilizar WinForms.

Forman parte de las clases de la plataforma .NET en el espacio de nombres:

System.Windows.Forms

Page 15: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

.NET Framework SDK.NET Framework SDKMicrosoft distribuye este kit de desarrollo como parte del paquete .NET. Disponible en:

http://msdn.microsoft.com/netframework/technologyinfo/howtoget/default.aspx

Este kit contiene documentación sobre la plataforma, ejemplos y código fuente, y una serie de utilidades que sirven para desarrollo y prueba de aplicaciones .NET.

Visual Visual Studio.NETStudio.NETEs un entorno gráfico que permite a los desarrolladores crear, probar y depurar aplicaciones desarrolladas o no para la plataforma .NET.

Inicialmente se llamó Visual Studio 7.0 ya que es la evolución del Visual Studio 6.0.

La última versión es el Visual Studio 2005.

SharpDevelop es un IDE open source para .NET que representa una buena alternativa a Visual Studio.NET:

http://www.icsharpcode.net/opensource/sd/

Page 16: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Este entorno incorpora los siguientes lenguajes de programación:

Visual Basic.NET: Versión .NET de Visual Basic 6.0.Visual C++.net: Evolución de Visual C++.Visual J#.NET: Adaptación de Visual J++.Visual C#.NET: Un nuevo lenguaje de programación OO.

Empresas ajenas han creado compiladores de sus lenguajes para la plataforma .NET:

Eiffel, Perl, Python, Haskell, Pascal, Oberon...

.NET es independiente del lenguaje de programación, no estamos restringidos a desarrollar en Visual C++ y Basic:

Existen compiladores para C#, Visual Basic.NET, Jscript.NET, COBOL, Python, Perl, etc..NET soporta estos lenguajes no soportando realmente ninguno de ellos:. NET sólo entiende Microsoft Intermediate Language (MSIL)

Desarrollando para la plataforma Desarrollando para la plataforma .NET.NET

Page 17: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

En .NET se traduce código fuente a IL (IntermediateLanguage) + Metadatos

IL es compilado antes de ser ejecutado y no estádiseñado para un lenguaje en particular como en JavaLas sentencias IL manipulan tipos comunes compartidos por todos los lenguajes .NET (Common Type System –CTS)El Common Language Runtime (CLR) es responsable de cargar y ejecutar una aplicación .NET

Usa compilación JIT (Just-In-Time) para traducir IL a código nativoIL es siempre compilado y nunca interpretado Cada método del código IL sólo es compilado una vez cuando es indicado.

Una plataforma independiente Una plataforma independiente del lenguajedel lenguaje

Hola Mundo en Hola Mundo en C#C# .NET.NET

// fichero: hola.cs

using System;

class Hola {

public static void Main() {

Console.WriteLine(“Hola Món”);

}

}

// fichero: hola.cs

using System;

class Hola {

public static void Main() {

Console.WriteLine(“Hola Món”);

}

}

Todo programa en C# contiene al menos una clase

Main es el punto de entrada del programa

Console.WriteLine(“...” ), visualiza un mensaje, invocando método WriteLine de la clase Console

El espacio de nombres Systempertenece a .NET FCL (Framework Class Library)

FCL contiene muchas clases útiles, que pueden usarse desde nuestras aplicaciones .NET

Page 18: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Enlaces de interEnlaces de interééss

GotDotNet: The Microsoft .NET Framework Community:http://www.gotdotnet.com/

.NET home page:http://www.microsoft.com/net/

MSDN .NET Framework site:http://msdn.microsoft.com/netframework/

Website con ejemplos y ayuda en programación C#:http://www.c-sharpcorner.com/http://www.csharphelp.com/http://www.csharp-station.com/http://www.codeproject.com

Implementación Open Source .NET (Proyecto mono):http://www.go-mono.com/

Fundamental: Class Library en la sección Reference de .NET Framework SDK Documentation

Page 19: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ProgramaciProgramacióó amb C# .NETamb C# .NET

Tema 2: El Tema 2: El Entorno de Visual Entorno de Visual Studio 2005Studio 2005

Introducción

El entorno de desarrollo de Visual Studio 2005 (IDE)

Barra de Menú y Barra de Herramientas

Ventanas de trabajo

Explorador de soluciones

El Cuadro de herramientas

Ventana de Propiedades

Ayuda de Visual Studio

Nuevas opciones

Programa simple: Mostrar un texto en un formulario

Recursos en la web

ÍÍndicendice

Page 20: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

IntroducciIntroduccióónn a Visual Studio 2005a Visual Studio 2005

Entorno integrado de desarrollo (IDE)

Permite programar en los diferenteslenguajes .NET

Dispone de herramientas y utilidades paraeditar y manipular distintos tipos de ficheros.

Visual Studio 2005:Visual Studio 2005:““ProductividadProductividad PersonalizadaPersonalizada””

Novatos

Entusiastas

Estudiantes

Hobbyists

Profesionales

Consultores

Desarrolladores

Arquitectos

Testers

VB6 Devs

Page 21: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

La página de Inicio

Barra de

herramientas

Proyectosrecientes

Ayuda

El IDE de Visual Studio 2005El IDE de Visual Studio 2005

Nuevo proyectoProyecto C# .NET

Conjunto de ficheros relacionados, imágenes y documentación, etc.

Solución C# .NET Conjunto de proyectos correspondientes a una o varias aplicaciones.

Aplicación WindowsCualquier aplicación que funciona en un SO Windows

Microsoft WordMicrosoft Internet Explorer…

Page 22: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Carpeta de los proyectos de Visual C#

Descripción del tipo de proyecto

Aplicación Windows seleccionada

El IDE después de un nuevo proyecto

Fichas

Barra de

Menú

Ficha

Activa

Formulario(aplicaciónwindows)

Exploradorde

SolucionesVentana de Propiedades

Page 23: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

La La BarraBarra de de MenMenúú y la y la BarraBarra de de HerramientasHerramientasLa barra de menú

La barra de herramientasAbrir un fichero

Agregar nuevoelemento al proyecto

Guardar fichero

Guardar todo Propiedades

Caja de

Herramientas

Examinadorde Objetos

Explorador de

soluciones

Página de Inicio

Ventana de comandos

VentanasVentanas de de trabajotrabajoExplorador de soluciones

ActualizarMostrar todoslos archivos Ver código

Propiedades

Verdiseñador

Verdiagramade clase

Page 24: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

El cuadro de herramientas

Ventana acoplada:

Ocultaciónautomàtica

La ventana de propiedades

Clasificación por

categorías

Ordenación

alfabética

Eventos

Componente seleccionado

Valor actualNombre de

La propiedad

Descripción de

La propiedad actual

Page 25: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

AyudaAyuda de Visual Studio 2005de Visual Studio 2005

El IDE es más configurable.

Ayuda paraacoplar lasventanas(Docking)

Ayuda paraacoplar lasventanas(Docking)

NuevasNuevas opcionesopciones

Page 26: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

IntelliSense: ayuda inteligente para la edición.

La Lista de Tareas i La Lista de Errores se presentan en dos ventanas diferentes.

Page 27: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Posibilidad de Editar y Continuar como en VB 6.

Publicación del proyecto (ClickOnce).

Y además:Diseñador de ClasesDiseñador de aplicacionesAsistente excepciones,…

Page 28: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

El programa:Formulario que contendrá los controlesEtiqueta para mostrar el texto

Crear un nuevo proyecto:Tipo proyecto: Aplicación WindowsNombre: ProyectoSencillo

Poner un título al fomulario:La Propiedad Text determina el texto en la barra de títuloValor: Un programa sencillo

Guardar el proyectoEjecutar el proyecto:

Generar soluciónIniciar el programa

ProgramaPrograma simple: simple: MostrarMostrar un un textotexto en un en un formularioformulario

Aspecto del formulario resultante durante su ejecución

Page 29: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Recursos en la Recursos en la webweb

Visual Studio 2005 & .NET 2.0:http://lab.msdn.microsoft.com/vs2005/default.aspx

http://lab.msdn.microsoft.com/vs2005/downloads/

http://lab.msdn.microsoft.com/vs2005/resources/articles

ASP.NET 2.0:http://beta.asp.net

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/webdevinwhidbey.asp

WinForms 2.0:http://www.windowsforms.net/articles/windowsformsoverview.aspx?tabindex=5

Page 30: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ProgramaciProgramacióó amb C# .NETamb C# .NET

Tema Tema 3:3: El Lenguaje El Lenguaje C#C#

ÍÍndicendiceIntroducciónEstructura de los programasVariables y Tipos de Datos

Sistema común de tiposIdentificadoresVariables y ConstantesTipos definidos por el usuario: enumeraciones y estructurasArraysManipulación de cadenas

Operadores y expresionesControl del flujo

CondicionalesBuclesSaltos

Funciones y MétodosDepuración y Tratamiento de Errores

Page 31: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

IntroducciIntroduccióónnC# es el último en una línea de evolución de los lenguajes derivados de C, que incluye C++ y Java.

Usado por Microsoft para desarrollar la mayoría del código de .NET.

Es el lenguaje ideal para el desarrollo en .NET

C# es orientado a objetos, moderno, simple y potente.

En C# todo es un objeto.

Características:Mejoras sobre C++ en las áreas de seguridad de datos, versionamiento, eventos y recolección de basura.

Acceso al SO, COM y APIs

Soporta el modo unsafe que permite el uso de punteros como en C.

Generación de documentación XML automàtica.

Creación de páginas ASP.NET y servicios Web.

En resumen: más simple que C++ pero poderoso y flexible como él.

Estructura de los Estructura de los programasprogramasUn programa en C# contiene:

Uno o más ficheros que contienen:Uno o más espacios de nombres (namespace) que contienen:

Tipos de datos: clases, estructuras, interfaces, enumeraciones y delegados

Si no se declara un namespace se asume el global por defecto

Un ejecutable ha de contener obligatoriamente una función Main(punto de entrada al programa)

static void Main()static int Main()static void Main(string[] args)static int Main(string[] args)

Para acceder a un tipo podemos usar un camino absoluto: System.Console.WriteLine(...);

o relativo:using System;...; Console.WriteLine(...);

Page 32: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

EjemploEjemplo::namespace N1 {

class C1 {

// ...

}

struct S1 {

// ...

}

interface I1 {

// ...

}

delegate int D1();

enum E1 {

// ...

}

}

Comentar el código:

Comentarios de una línea:

// este comentari ocupa una línia

///<summary>

/// este és un comentari especial de documentació XML

/// </summary>

Comentarios de varias líneas:

/* este comentari ocupa

dues línies */

Definir bloques de código:#region Definició de Variables

int x, y;

string s = "Hola";

float f;

#endregion

Page 33: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Sistema común de tipos (CTS)Lo comparten todos los lenguajes de .NET

Admite tanto tipos de valor como tipos de referencia:

Todos los tipos de datos derivan de System.Objectsistema de tipos unificado. Cualquier tipo puede ser tratado como un objeto.

Variables y Variables y TiposTipos de de DatosDatos

Tipos de referenciaTipos de referencia

Tipos de datosTipos de datos

Tipos de valorTipos de valor- Intrínsecos,- Enumeraciones,- Estructuras

- Arrays- Clases- Interfaces- Punteros

objectCualquier objetoVariableCualquier objetoObject

stringEl permitido por la memoriaVariableCadenas de caracteresString

char[‘\u0000’, ‘\uFFFF’]16Caracteres UnicodeChar

booltrue, false32Valores lógicosBoolean

decimal[1,0×10-28 - 7,9×1028]128Reales de 28-29 dígitos de precisiónDecimal

double[5,0×10-324 - 1,7×10308]64Reales de 15-16 dígitos de precisiónDouble

float[1,5×10-45 - 3,4×1038]32Reales con 7 dígitos de precisiónSingle

ulong[0-18.446.744.073.709.551.615]64Enteros largos sin signoUInt64

long[-9.223.372.036.854.775.808,

9.223.372.036.854.775.807]64Enteros largos

Int64

uint[0, 4.294.967.295]32Enteros normales sin signoUInt32

int[-2.147.483.648, 2.147.483.647]32Enteros normalesInt32

ushort[0, 65.535]16Enteros cortos sin signoUInt16

short [-32.768, 32.767]16Enteros cortos con signoInt16

byte [ 0 , 255]8Bytes sin signoByte

sbyte[-128, 127]8Bytes con signoSByte

AliasRango de valoresBitsDescripciónTipo

TiposTipos de de datosdatos bbáásicossicos

Page 34: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

IdentificadoresDan nombre a variables, constantes y métodos.Constan de caracteres alfanuméricos y _C# es Sensible a mayúsculas y minúsculas.Han de comenzar con letra o _No pueden ser una palabra reservada…

...si no se usa el carácter ‘@’ como prefijo :

Object @this; //@ previene el conflicto con "this"

Variables

Una variable representa la localización en memoria donde una instancia de un tipo es guardada.

Declaración:

<tipodedato> <identificador>;

Recordar la distinción entre tipos de valor y tipos de referencia

Tipos de valor son tipos simples como ‘int’, ‘long’ y ‘char’Los objetos, strings y arrays son ejemplos de tipos de referencia

Los tipos de valor se derivan de System.ValueType

Page 35: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Comparación entre variables de tipo valor y variables tipo referencia:

Variables de tipo valor:

Contienen sus datosdirectamente

Cada una tiene supropia copia de datos

Las operacionessobre una no afectan a otra

Variables de tipo valor:

Contienen sus datosdirectamente

Cada una tiene supropia copia de datos

Las operacionessobre una no afectan a otra

Variables de tipo referencia:

Almacenan referencias a sus datos (conocidos como objetos)

Dos variables de referencia puedenapuntar al mismo objeto

Las operaciones sobreuna pueden afectar a otra

Variables de tipo referencia:

Almacenan referencias a sus datos (conocidos como objetos)

Dos variables de referencia puedenapuntar al mismo objeto

Las operaciones sobreuna pueden afectar a otra

Inicialización de variables en la declaración:

bool bln = true;

byte byt1 = 22;

char ch1=‘x’, ch2=‘\u0061’; // Unicode para ‘a’

decimal dec1 = 1.23M;

double dbl1=1.23, dbl2=1.23D;

short sh = 22;

int i = 22;

long lng1=22, lng2=22L; // ‘L’ long

sbyte sb=22;

float f=1.23F;

ushort us1=22;

uint ui1=22, ui2=22U; // ‘U’ unsigned

ulong ul1=22, ul2=22U, ul3=22L, ul4=2UL;

Page 36: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Los valores de referencia son creados con la palabra reservada new:object o = new System.Object();

Una variable String se puede inicializar directamente:string s = "Hola"; // usan caracteres Unicode de 2 cars

C# soporta secuencias de escape como en C:string s1 = "Hola\n"; // salto de línea

string s2 = "Hola\tque\ttal"; // tabulador

Como las sentencias de escape comienzan con ‘\’, para escribir este carácter hay que doblarlo, o usar ‘@’:string s3 = "c:\\WINNT";

string s4 = @"C:\WINNT";

using System;namespace ConsoleAppVisibilitat{

class Simple{

public int Var1=10;private int Var2=20; //localpublic int Var3=30;

}class Class1 {

[STAThread]static void Main(string[] args){

Simple s = new Simple();

Console.WriteLine("Simple:");Console.WriteLine("Var1={0},

Var3={1}",s.Var1, s.Var3);

Console.ReadLine();}

}}

Ámbito: lugar dondese declara una variable. Determina su accesibilidad.

La visibilidad de una variable fuera de suámbito se puede modificar anteponiendo public o private en su declaración.

Ámbito: lugar dondese declara una variable. Determina su accesibilidad.

La visibilidad de una variable fuera de suámbito se puede modificar anteponiendo public o private en su declaración.

Àmbito y Visibilidad:

Page 37: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

using System;namespace ConsoleAppVisibilitatSTAT {

class Simple {public static int Var3=30; //pública i

estàticastatic int Var4=40; //privada i estàticapublic void mostraVar4(){

Console.WriteLine("Var4={0}", ++Var4);}

}class Class1 {

[STAThread]static void Main(string[] args) {

Simple s = new Simple();Simple k = new Simple();

Console.WriteLine("Simple:");Console.WriteLine("Var3={0}",Simple.Var3++);Console.WriteLine("Var3={0}",Simple.Var3);s.mostraVar4();k.mostraVar4();Console.ReadLine();

}}

}

static: Variableestática, existe durante toda la ejecución del programa.

Sólo existe una sola copia de la misma sin necesidad de crear objeto alguno.

Hay que referirse a ella usando el nombre completo del tipo al que pertenece.

No afecta a su visibilidad

static: Variableestática, existe durante toda la ejecución del programa.

Sólo existe una sola copia de la misma sin necesidad de crear objeto alguno.

Hay que referirse a ella usando el nombre completo del tipo al que pertenece.

No afecta a su visibilidad

ConstantesEl modificador const permite definir variables constantes:

Class Class1 {private const int min = 1;private const int max = 100;public const int rango = max – min;…

static void Main(){

Console.WriteLine(Class1.max,Class1.min,Class1.rango);

// o también Console.WriteLine(max, min, rango);

}}

Una constante no cambia nunca su valor.

Son implícitamente static.

Page 38: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Conversión entre tipos de datos

int intValor = 123;

long longValor = intValor; // implícita de int a longintvalor = (int) longValor; // explícita de long a int con castint x = 123456;

long y = x; // implícitashort z = (short)x; // explícitadouble d = 1.2345678901234;

float f = (float)d; // explícitalong l = (long)d; // explícita//uso de Convert:int c=154;

MessageBox.Show(Convert.ToString(c));

Conversión implícitaOcurre de forma automática.Siempre tiene éxito.Nunca se pierde información

en la conversión.

Conversión implícitaOcurre de forma automática.Siempre tiene éxito.Nunca se pierde información

en la conversión.

Conversión explícitaRequiere la realización del cast o

el comando Convert.Toxxx(var)Puede no tener éxito.Puede perderse información en la

conversión.

Conversión explícitaRequiere la realización del cast o

el comando Convert.Toxxx(var)Puede no tener éxito.Puede perderse información en la

conversión.

TablaTabla de de conversiconversióónn implimplíícita seguracita segura

ushort, int, uint, long, ulong, float, double, decimal Char

doubleFloat

float, double, decimal Ulong

float, double, decimal Long

long, ulong, float, double, decimal Uint

long, float, double, decimal Int

int, uint, long, ulong, float, double, decimal Ushort

int, long, float, double, decimal Short

short, int, long, float, double, decimal Sbyte

short, ushort, int, uint, long, ulong, float, double, decimal Byte

Se convierte de forma segura a:Tipo

Page 39: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Tipos definidos por el usuario: Enumeraciones

Tienen por tipo base números enteros.Por defecto empieza la numeración por 0Definición de una enumeración:enum Color { Rojo=1, Verde=2, Azul=3 }

Uso de una enumeración:Color colorPaleta = Color.Rojo;

o colorPaleta = (Color)1; // Tipo int a tipo Color

Visualización de una variable de enumeración:Console.WriteLine(“{0}”, colorPaleta.ToString());

// Muestra Rojo

Usando enumeraciones el código queda más claro i fácil de mantener.

Tipos definidos por el usuario: Estructuras

Definición:struct Empleado {

public string nombre;public int edad;public int Sueldo = 1200;// error!, no permitido

}

Uso:Empleado empresaEmpleado, otroEmpleado; empresaEmpleado.Nombre = "Juan";empresaEmpleado.edad = 23;otroEmpleado = empresaEmpleado; //asignación directa

El operador new crea una variable tipo Empleado con los valoresasociados:

Empleado jefeDep = new Empleado(“Pepe”, 45);

Todos los miembros se inician por defecto a null

El método booleano Equals() permite comparar dos structs.otroEmpleado.Equals(empresaEmpleado)

Una estructura puede contar también con métodos.

Page 40: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Arrays

Los arrays son tipos referencia derivados de System.Array

Sus índices comienzan en 0

Ejemplo: string[] a; // array de cadenas

El tipo de datos array viene dado por string[]

el nombre del array es una referencia al array

Para crear espacio para los elementos usar:string[] a = new string[100];

Los arrays se pueden inicializar directamente:string[] animales = {"gato", "perro", "caballo"};

int[] a2 = {1, 2, 3};

Arrays multidimensionales:string[,] ar = {{"perro","conejo"}, {"gato","caballo"}};double[,] tempAnual = new double[12,31];

El rango de los elementos del array es dinámico:Si se crea un nuevo array sobre el mismo se libera la memoriaque ocupaba y se pierde toda la información que contenia.

Información sobre un array:

Dimensiones: Rank

Número de elementos: GetLength()

Índice superior e inferior: GetLowerBound(d); GetUpperBound(d)

(d=dimensión, desde 0 hasta Rank-1)

Saber si es un array: if (a is Array) ....

Recorrido de los elementos de un array sin conocer susíndices

foreach (string a in animales) Console.WriteLine(a);

Otras operaciones: Copy(); Sort(); ...

Page 41: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Manipulación de cadenasLos tipos char y string permiten manipular caracteres.

Una variable char puede contener cualquier carácter Unicode

Manipulacion de caracteres: IsDigit(); IsLetter(); IsPunctuation(); ToUpper(); ToLower(), ToString();...

Una variable tipo string es una referencia al lugar donde se guarda la cadena.

Cada vez que se modifica el valor de la cadena se asigna un nuevo bloque de memoria y se libera el anterior.

Concatenación: Nuevo operador + (no existe en C ,C++) o se puede usar también: Concat()string a, b;

a="Programación ";

b="con C#";

Console.WriteLine(“Usando +: {0}", a+b);

Console.WriteLine(" Usando concat: {0}", string.Concat(a, b));

Operadores y Operadores y expresionesexpresiones

Operadores aritméticos:+ Suma unaria: +a- Resta unaria: -a++ Incremento ++a o a++

-- Decremento: --a o a--+ Suma a+b- Resta: a-b* Multiplicación: a*b/ División: a/b% Resto: a%b

Operadores relacionales:== Igualdad: a==b!= Desigualdad: a!=b< Menor que: a<b<= Menor o igual: a<=b> Mayor que: a>b>= Mayor que o Igual a: a>=b! Negación: !a& And binario: a&b| Or binario: a|b^ Or exclusivo: a^b~ Negación binaria: ~a&& And lógico: a&&b|| Or lógico: a||b

Operadores de manipulación de bits:

int i1=32;

int i2=i1<<2; // i2==128

int i3=i1>>3; // i3==4

Page 42: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Otros operadoresmin=a<b ? a:b; // equivale a: if a<b min=a else min=b;

. accede a miembros, e.j. args.Length

() cast (conversión de tipos)

[] índice de arrays, punteros, propiedades y atributos

new crea nuevos objetos

typeof obtiene el tipo de un objeto

is compara el tipo de un objeto en runtime

sizeof obtiene el tamaño de un tipo en bytes

* obtiene la variable a la que apunta un puntero

-> p->m es lo mismo que (*).m

& devuelve dirección de un operando

Las expresiones en C# son similares a C y C++

Precedencia:

Asociatividad:Todos los operadores binarios, salvo los de asignación, son asociativos por la izquierda.

Los operadores de asignación y el operador condicional(?) son asociativos por la derecha.

+ Operadores Asociatividad Tipo () Izquierda a derecha Paréntesis * / % Izquierda a derecha Multiplicativos + - Izquierda a derecha Adición < <= > >= Izquierda a derecha Relacionales

== != Izquierda a derecha Igualdad

- = Derecha a izquierda Asignación

Page 43: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Control del Control del flujoflujo

Un bloque y su bloque padre o pueden tener una variable con el mismo nombre

{int i;...{

int i;...

}}

Bloques hermanos pueden tenervariables con el mismo nombre

{int i;...

}...

{int i;...

}

InstruccionesPueden ocupar más de una línea y deben terminarse con un ;int i, j;i=1;

Grupos de instrucciones se pueden agrupar en bloques con { y }

{j=2;i=i+j;

}

Condicionales

if (<condición>) <sentenciasCondTrue>

if (<condición>){

<sentenciasCondTrue>[else{

<sentenciasCondFalse>} ]

Ejemplo:

if (a>b) Mayor=a;

if (a>b){

Mayor=a;Menor=b;

}else{

Mayor=b;Menor=a;

}

Page 44: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Ejemplo: if en cascada

enum Palo { Treboles, Corazones, Diamantes, Picas}Palo cartas = Palo.Corazones; string color;

if (cartas == Palo.Treboles)color = “Negro”;

else if (cartas == Palo.Corazones)color = “Rojo";

else if (palo == Palo.Diamantes)color = "Rojo";

elsecolor = “Negro";

enum Palo { Treboles, Corazones, Diamantes, Picas}Palo cartas = Palo.Corazones; string color;

if (cartas == Palo.Treboles)color = “Negro”;

else if (cartas == Palo.Corazones)color = “Rojo";

else if (palo == Palo.Diamantes)color = "Rojo";

elsecolor = “Negro";

Condicionales múltiples

switch (<expressión>){

case Opc1 :[<sentencias-1>]break;

[case Opc2 :[<sentencias-2>]break;…

default:<sentencias-def>break;]

}

Ejemplo:

switch(B){

case 5:Console.WriteLine(“B es óptimo);A=10;break;

case 1:case 2:case 3: //1,2,3 sin break pq están vacíoscase 4:

Console.WriteLine(“B está pordebajo del valor óptimo);A=3;break;

default:Console.WriteLine(“B no es válido);break;

}

Ejemplo:

switch(B){

case 5:Console.WriteLine(“B es óptimo);A=10;break;

case 1:case 2:case 3: //1,2,3 sin break pq están vacíoscase 4:

Console.WriteLine(“B está pordebajo del valor óptimo);A=3;break;

default:Console.WriteLine(“B no es válido);break;

}

Page 45: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Bucles

for

for (int i=0; i < 5; i++) { // i declarada dentro del bucleConsole.WriteLine(i);

}

for (;;) {... // bucle infinito

}

for (int i=1, j=2; i<=5; i++, j+=2) { //múltiples expresionesSystem.Console.WriteLine("i=" + i + ", j=" + j);

}

whileEjecuta instrucciones en función de un valor booleano.Evalúa la expresión booleana al principio del bucle.

while (true) {...

}

while (true) {...

}

int i = 0;while (i < 10) {

Console.WriteLine(i);i++;

}

int i = 0;while (i < 10) {

Console.WriteLine(i);i++;

} 0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9

int i = 10;while (i > 5) {

...i--;

}

int i = 10;while (i > 5) {

...i--;

}

Page 46: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

do ... whileEjecuta instrucciones en función de un valorbooleano.Evalúa la expresión booleana al final del bucle.

int i = 0;

do {

Console.WriteLine(i);

i++;

} while (i <= 10);

int i = 0;

do {

Console.WriteLine(i);

i++;

} while (i <= 10);0 1 2 3 4 5 6 7 8 9 100 1 2 3 4 5 6 7 8 9 10

int i = 10;do {

...i--;

}while (i > 5);

int i = 10;do {

...i--;

}while (i > 5);

do {...

} while (true);

do {...

} while (true);

foreachEste bucle es nuevo en C#.Itera sobre una colección de elementosNo permite cambiar el valor de los ítems

public static void Main(string[] args) {

foreach (string s in args) Console.WriteLine(s);

}

public static void Main(string[] args) {

foreach (string s in args) Console.WriteLine(s);

}

Page 47: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Instrucciones de salto

continue: Salta el resto de la iteración y comienza la siguiente:

for (int i=1; i<=5; i++) {if (i==3)

continue;Console.WriteLine(i);

}

break : Sale directamente de un bucle sin acabarlo:for (int i=1; i<=5; i++) {

if (i==3)break;

Console.WriteLine(i);}

return [<expresión>]: Sale del método actual

En C# todo son funciones, no existen procedimientos.

Todas las funciones siempre pertenecen a una clase, luego son todas las funciones son métodos.

Los métodos, por defecto, son privados (private)

Main es un método y para definir métodos propios se usa la misma sintaxis:

using System;class EjemploClase{

static void EjemploMetodo( ) {

Console.WriteLine("Este es un ejemplo de método");}static void Main( ) {

// ...}

}

Funciones y MFunciones y Méétodostodos

Page 48: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Una vez definido un método, se puede:

Llamar a un método desde dentro de la misma clase

Se usa el nombre del método seguido de una lista de parámetros entre paréntesis

Llamar a un método que está en una clase diferente

Hay que indicar al compilador cuál es la clase que contiene el método que se desea llamar

El método llamado se debe declarar como public

Usar llamadas anidadas

Unos métodos pueden hacer llamadas a otros, que a su vez pueden llamar a otros métodos, y así sucesivamente.

Variables localesSe definen dentro del método

Son privadas para el método

Se destruyen a la salida del método

Variables compartidasSe definen en la clase

Permiten compartir datos entre métodos

Conflictos de ámbitoEl compilador no avisa si hay conflictos entre nombres de las variables locales y las de clase.

Page 49: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Devolución de valoresEl método se debe declarar con un tipo que no sea void

Se añade una instrucción return con una expresiónFija el valor de retornoSe devuelve al llamador

Los métodos que no son void deben devolver siempre un valor

static int DosMasDos( ) {int a,b;a = 2;b = 2;return a + b;

}

static int DosMasDos( ) {int a,b;a = 2;b = 2;return a + b;

} int x;x = DosMasDos( );Console.WriteLine(x);

int x;x = DosMasDos( );Console.WriteLine(x);

ParámetrosEn C# todos los parámetros se pasan por valor si no se indica lo contrario.Declaración de parámetros

Se ponen entre paréntesis después del nombre del métodoSe define el tipo y el nombre de cada parámetro

Llamadas a métodos con parámetrosUn valor para cada parámetro

Paso de parámetros: por valor, por referencia, de salida y lista de parámetros de longitud variable.

static void MetodoConParametros(int n, string y) { ... }

MetodoConParametros(2, "Hola, mundo");

static void MetodoConParametros(int n, string y) { ... }

MetodoConParametros(2, "Hola, mundo");

Page 50: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Paso por valorSe copia el valor del parámetroSe puede cambiar el nombre de la variable dentro del métodoNo afecta al valor fuera del métodoEl parámetro debe ser de un tipo igual o compatible

static void SumaUno(int x) {

x++; // Incrementar x}static void Main( ) {

int k = 6;SumaUno(k);Console.WriteLine(k); // Muestra el valor 6, no 7

}

static void SumaUno(int x) {

x++; // Incrementar x}static void Main( ) {

int k = 6;SumaUno(k);Console.WriteLine(k); // Muestra el valor 6, no 7

}

Paso por referenciaSe pasa una referencia a una posición de memoria.Se usa la palabra clave ref en la declaración y las llamadas al método.Los tipos y valores de variables deben coincidir.Los cambios hechos en el método afectan al llamador.Hay que asignar un valor al parámetro antes de la llamada al método.

static int RaizCuarta(ref int x) {

x = (int)Math.Sqrt(x); return (int)Math.Sqrt(x);

}static void Main( ) {

int num = 625; //siempre inicializar antes de utilizarla!!Console.WriteLine(“Raiz cuarta: {0}, el númerooriginal es: {1}”, RaizCuarta(ref num), num);

}

static int RaizCuarta(ref int x) {

x = (int)Math.Sqrt(x); return (int)Math.Sqrt(x);

}static void Main( ) {

int num = 625; //siempre inicializar antes de utilizarla!!Console.WriteLine(“Raiz cuarta: {0}, el númerooriginal es: {1}”, RaizCuarta(ref num), num);

}

Page 51: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Parámetros de salidaNo sirven para pasar valores al método.Sólo devuelven resultados desde el método.Se usa la palabra clave out en la declaración y las llamadas al método.La variable no necesita estar inicializada.Al parámetro de salida hay que asignarle siempre un valor.

static void OutDemo(out int p) {

p = 255;// ...

}static void Main( ) {

int n; // sin inicializarOutDemo(out n);

}

static void OutDemo(out int p) {

p = 255;// ...

}static void Main( ) {

int n; // sin inicializarOutDemo(out n);

}

Lista de parámetros de longitud variableSe usa la palabra reservada params.Se declara como un array al final de la lista de parámetros.Siempre se pasan por valor.

Guía para el paso de parámetros:El paso por valor es el más habitual y suele ser el más eficaz.El valor de retorno del método es útil para un solo valor.ref y/o out son útiles para más de un valor de retorno.ref sólo se usa si los datos se pasan en ambos sentidos.

static long SumaLista(params long[ ] v) {long total, i;for (i = 0, total = 0; i < v.Length; i++)

total += v[i];return total;

}static void Main( ) {

long x = SumaLista(63,21,84);}

static long SumaLista(params long[ ] v) {long total, i;for (i = 0, total = 0; i < v.Length; i++)

total += v[i];return total;

}static void Main( ) {

long x = SumaLista(63,21,84);}

Page 52: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Devolución de arrays desde métodos:

class EjemploArr1 {

static void Main( ) {int[ ] array = CreateArray(42);...

}static int[ ] CreateArray(int tamano) {

int[ ] creada = new int[tamano];return creada;

}}

class EjemploArr1 {

static void Main( ) {int[ ] array = CreateArray(42);...

}static int[ ] CreateArray(int tamano) {

int[ ] creada = new int[tamano];return creada;

}}

Paso de arrays como parámetrosUn parámetro de array es una copia de la variable array.No es una copia de los elementos del array.Se modifican los valores originales del array.

class EjemploArr2 {static void Main( ) {

int[ ] arg = {10, 9, 8, 7};Method(arg);System.Console.WriteLine(arg[0]);

}

static void Metodo(int[ ] parametro) {parametro[0]++;

}}

class EjemploArr2 {static void Main( ) {

int[ ] arg = {10, 9, 8, 7};Method(arg);System.Console.WriteLine(arg[0]);

}

static void Metodo(int[ ] parametro) {parametro[0]++;

}} Este método modificará

el array originalcreado en Main

Este método modificaráel array originalcreado en Main

Page 53: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Métodos recursivosHacen llamadas a sí mismosÚtil para resolver ciertos problemas

static ulong Fibonacci(ulong n){

if (n <= 2)return 1;

elsereturn Fibonacci(n-1) + Fibonacci(n-2);

}

static ulong Fibonacci(ulong n){

if (n <= 2)return 1;

elsereturn Fibonacci(n-1) + Fibonacci(n-2);

}

Métodos sobrecargados (overloading)Comparten un nombre dentro de la clase.Se distinguen por el número y tipo de parámetros.Usarlos cuando:

hay métodos similares que requieren parámetros diferentessi se quiere añadir funcionalidad al código existente.

No abusar de ellos pues son difíciles de mantener y de depurar.

class OverloadingExample{

static int Suma(int a, int b) {

return a + b;}static int Suma(int a, int b, int c) {

return a + b + c;}static void Main( ) {

Console.WriteLine(Suma(1,2) + Suma(1,2,3));}

}

class OverloadingExample{

static int Suma(int a, int b) {

return a + b;}static int Suma(int a, int b, int c) {

return a + b + c;}static void Main( ) {

Console.WriteLine(Suma(1,2) + Suma(1,2,3));}

}

Page 54: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Los errores (sintàcticos y semánticos) pueden aparecer en el código de forma inesperada.

Visual Studio ofrece potentes y eficaces herramientas para la depuración de los errores.

El depurador de Visual Studio proporciona un menúDepurar que ofrece acceso a las herramientas del depurador.

Además, el lenguaje C# incorpora técnicas para controlar las posibles situaciones de error en tiempo de ejecución.

DepuraciDepuracióón y Tratamiento de Erroresn y Tratamiento de Errores

Cuando una aplicación se ejecuta en modo de depuración VS es capaz de conocer qué ocurre exactamente en cada línea de código.

Esa información de depuración está contenida en los ficheros .pdb

En modo depuración podremos:Consultar y modificar el valor de las variables,Detener un momento la ejecución Editar el código y continuar la ejecución,Parar la ejecución en un lugar concreto,Ejecutar el programa línea a línea,Realizar llamadas de prueba a métodos en la ventana Inmediato sin ejecutar la aplicación,Etc.

Page 55: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ExcepcionesLas excepciones son el mecanismo OO de C#para controlar las situaciones de error.

¿por qué usar excepciones?

El tratamiento tradicional de errores resulta muy complicado de gestionar:

int errorCodigo = 0;FileInfo source = new FileInfo("code.cs");if (errorCodigo == -1) goto Fallo;int longitud = (int)source.Length;if (errorCodigo == -2) goto Fallo;char[] contenido = new char[longitud];if (errorCodigo == -3) goto Fallo;// No hay problemas ...Fallo: ...

int errorCodigo = 0;FileInfo source = new FileInfo("code.cs");if (errorCodigo == -1) goto Fallo;int longitud = (int)source.Length;if (errorCodigo == -2) goto Fallo;char[] contenido = new char[longitud];if (errorCodigo == -3) goto Fallo;// No hay problemas ...Fallo: ...

Lógica del programaLógica del programa

Trat. De erroresTrat. De errores

Todas las excepciones derivan de System.Exception

Excepciones de .NET Base Class Library

Page 56: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Tratamiento de excepciones orientado a objetos :try

{... // bloque normal de código

} catch {

... // bloque que controla la excepción}[ finally {

... // bloque de finalización que siempre se ejecuta}]

Ejemplo:

try {Console.WriteLine("Escriba un número");int i = int.Parse(Console.ReadLine());

}catch (OverflowException capturada){Console.WriteLine(capturada);

}

Cuando ocurre un error se crea una excepción que contiene información para solucionar el problema.

Cada bloque catch captura una clase de excepción.

Un bloque try puede tener un bloque catch general que capture excepciones no tratadas (uno solo y el último de los bloques catch)

Un bloque try no puede capturar una excepción derivada de una clase capturada en un bloque catch anterior.

…try {Console.WriteLine(“Escriba el primer número");int i = int.Parse(Console.ReadLine());Console.WriteLine("Escriba el segundo número");int j = int.Parse(Console.ReadLine());int k = i / j;

}catch (OverflowException capturada) { Console.WriteLine(capturada); }

catch (DivideByZeroException capturada) {Console.WriteLine(capturada); }

catch {…} // también: catch (Exception x) { … }...

Page 57: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ProgramaciProgramacióónn con C# con C# NETNET

Tema 4: Introducción a la POO

Introducción

Programación Procedural vs Programación Orientada a Objetos

¿Qué es un objeto?

¿Qué es una clase?

Modelado de clases con UML

Encapsulación

Herencia

Polimorfismo

Referencias entre clases

Reutilización de clases

Resumen

ContenidosContenidos

Page 58: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

¿Por qué la Programación Orientación a Objetos (POO)?¿Por qué la Programación Orientación a Objetos (POO)?

• Existe la esperanza de que esta técnica sea la clave para incrementar la productividad y mejorar la fiabilidad de los sistemas software ( solución a la crisis del software )

• Existe la esperanza de que la transición de los lenguajes existentes a los orientados a objetos sea fácil

• La forma de percibir y pensar sobre los problemas se acerca a los mecanismos cognitivos humanos y es muyparecida a la forma en que se abordan en otros dominios

IntroducciIntroduccióónn

Un poco de historia …Un poco de historia …

• La POO apareció por primera vez en 1960• SIMULA I (1962-65), SIMULA 67 (1967)• ADA, PROLOG (1980)

• Se ha hecho muy popular en los últimos 10 años

• En ocasiones, la tecnología avanza lentamente• Sistemas legados que funcionan bien (o no)• Intereses comerciales• Necesidades reales

IntroducciIntroduccióónn

Java y C# han ayudado mucho

Page 59: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Evolución de los lenguajes de programaciónEvolución de los lenguajes de programación

• Lenguajes máquinaLenguaje nativo de la máquina: muy eficiente

x Codificación de programas complejax Gran cantidad de errores en la codificaciónx Depuración muy complejax Productividad mínima

• Lenguajes de bajo nivel (ensambladores)Etiquetas inteligibles (nemónicos) por el ser humano

x Estrechamente ligados a la arquitectura de la máquinax Depuración complejax Productividad muy baja? Necesidad de un traductor (ensamblador): menos eficiente

IntroducciIntroduccióónn

Evolución de los lenguajes de programaciónEvolución de los lenguajes de programación

• Lenguajes de alto nivel (BASIC, etc)Una instrucción equivale a varias instrucciones en ensambladorLenguaje más afín al programadorDepuración más sencillaProductividad aceptablePORTABILIDAD

? Necesidad de un traductor: intérprete o compiladorx Saltos en el código (GOTO) dificultan la legibilidad y depuraciónx Las estructuras de datos tienen visibilidad globalx En proyectos complejos el mantenimiento es complejo

IntroducciIntroduccióónn

Page 60: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Evolución de los lenguajes de programaciónEvolución de los lenguajes de programación

• Lenguajes estructurados (C, PASCAL, etc)Lenguajes procedurales: funciones como cajas negrasEstructuras de datos locales/globalesProhibidos los saltos entre instrucciones (bucles, funciones)Productividad aceptableDiseño modular: mantenimiento más sencillo

x Estructuras de datos y procedimientos que las tratan se diseñan por separadox “Gap” semántico entre el espacio del problema y el espaciode la solución

IntroducciIntroduccióónn

Evolución de los lenguajes de programaciónEvolución de los lenguajes de programación

• Lenguajes Orientados a Objetos (Java, C++, etc)Extensión de los lenguajes estructuradosEstructuras de datos y funciones son una unidad: objetoSe adapta mejor a la estructura del mundo realDiseño orientado a componentesREUTILIZACIÓN

IntroducciIntroduccióónn

Page 61: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ProgramaciProgramacióón n ProceduralProcedural vsvs POOPOO

Programación ProceduralProgramación Procedural

• Unidad básica: el procedimiento

entradas salidas

• Programa con procedimientos

datodato

datodato

función función

funciónfunción

ProgramaciProgramacióón n ProceduralProcedural vsvs POOPOO

Programación Orientada a ObjetosProgramación Orientada a Objetos

• Unidad básica: el objeto

• Programa con objetos

datodato

dato

función

función

función

¿TAD?

datodato

dato

función

función

función

datodato

dato

función

función

función

datodato

dato

función

función

función

Page 62: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ProgramaciProgramacióón n ProceduralProcedural vsvs POOPOO

Ejemplo. Programación ProceduralEjemplo. Programación Procedural

#define MAX_ITEM 100

typedef struct {int list[MAX_ITEM];int size;

} t_list;

t_list *create();void destroy(t_list *lst);int addItem(t_list *lst, int item);void removeItem(t_list *lst, int item);int *getLast(t_list *lst);int *getFirst(t_list *lst);int getSize(t_list *lst);

t_list.h

#include “t_list.h”

t_list *create() {………………

}void destroy(t_list *lst) {

…………}int addItem(t_list *lst, int item) {

…………} …………

t_list.c

#include “t_list.h”

void main() {

t_list *list = create();addItem(list, 0);……………destroy(list);

}

main.c

ProgramaciProgramacióón n ProceduralProcedural vsvs POOPOO

Ejemplo. Programación Orientada a ObjetosEjemplo. Programación Orientada a Objetos

public class List {

private int[] list;private int size;

List() {……}int addItem(int item) {………}int removeItem(int item) {……}int getFirst() {……}int getLast() {……}int getSize() {………}

}

List.cs

Datos

Funciones

public class Main {

public static void Main( …… ) {

List list = new List();list.addItem(0);……………

}}

Main.cs

Page 63: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Principios del Paradigma Orientado a ObjetosPrincipios del Paradigma Orientado a Objetos

• Todo son objetos

• Un programa es una colección de objetos.

• Los objetos interactúan realizando peticiones de servicios a otros objetos mediante mensajes.

• El cómputo avanza mediante la interacción de los objetos

• Todo objeto es un ejemplar de un clase. Una clase agrupa

objetos “similares”.

ProgramaciProgramacióón n ProceduralProcedural vsvs POOPOO

• En el mundo real, todo son objetos: un perro, una casa,

un coche, etc.

• Un objeto del mundo real tiene dos características:

• Estado (nombre, color, tamaño, etc)

• Comportamiento (ladrar, correr, dormir, etc)

¿¿QuQuéé es un objeto?es un objeto?

Page 64: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

En el modelo Orientado a Objetos todo objeto tiene:Identidad: Los objetos pueden distinguirse unos de otros.

Comportamiento: Los objetos pueden realizar ciertastareas. El comportamiento se modela por medio de métodos.

Estado: Los objetos almacenan información. El estado se modela por medio de atributos.

¿¿QuQuéé es un objeto?es un objeto?

atributo

atributo

atributo

método

método

método

El cliente “ve” sólo la interfaz

Cta_banco:extraerdepositar:

Array:agregarbuscar:

Coche:repostaralquilar:

Los objetos ocultan detalles de Los objetos ocultan detalles de implementaciimplementacióón...n...

Page 65: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

• Una aplicación en ejecución es una comunidad de objetos que se comunican

entre sí.

• Los objetos interaccionan con otros objetos enviando mensajes

Comunicación entre objetosComunicación entre objetos

¿¿QuQuéé es un objeto?es un objeto?

mensaje

• Mensaje = destinatario + acción + argumentos

cambiarColor(rojo)

• El algoritmo o conjunto de operaciones que ejecuta un objeto como

respuesta a un mensaje se llama método

Mensaje versus Llamada a ProcedimientoMensaje versus Llamada a Procedimiento

Los mensajes se diferencian de las llamadas a procedimientoen varios aspectos:

• El mensaje posee un receptor designado; el receptor es algúnobjeto al cual se envía un mensaje

• La interpretación del mensaje (el método usado para responder al mensaje) depende del receptor y puede variar con diferentes receptores (concepto de polimorfismo)

• El modelo de paso de mensajes incluye tato comunicación síncrona como asíncrona

• El receptor no tiene por qué estar en el mismo proceso o incluso la misma máquina del emisor

¿¿QuQuéé es un objeto?es un objeto?

Page 66: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Todos los objetos de un mismo tipo comparten la misma clase

Todo objeto es instancia de alguna clase

La clase describe las características de los objetos de la mismaclase

Qué atributos tienen

Qué métodos tienen

La clase constituye la plantilla de un mismo tipo de objetosConstituye la base para poder crear un objeto

Cuando se crea un objeto de una clase se dice que se instancia un objeto de dicha clase

La clase es un concepto estático (en tiempo de diseño) mientrasque el objeto es un concepto dinámico (en tiempo de ejecución)

¿¿QuQuéé es una clase?es una clase?

CLASE: PERSONA-------------------------Nombre,Direccion, Edad-------------------------ObtenerEdad

Ejemplo de Ejemplo de instanciaciinstanciacióónn::

PersonaJosé Perez

c/ Reus 35, 27

ObtenerEdad()

...PersonaJuan Díaz

c/ Colón 7, 35

ObtenerEdad()...

Page 67: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

¿¿QuQuéé es una clase?es una clase?

public class List {

private int[] list;private int size;

List() {……}int addItem(int item) {………}int removeItem(int item) {……}int getFirst() {……}int getLast() {……}int getSize() {………}

}

List.cspublic class Main {

public static void Main( …… ) {

List list = new List();

list.addItem(0);……………

}}

Main.cs

CLASE OBJETO

INSTANCIACIÓN

Ocultación de la informaciónOcultación de la información

• Capacidad de ocultar ciertos atributos o comportamientos y mostrar otros

• Los objetos de un sistema de información vistos como clientesde los servicios que les proveen ciertos objetos, sólo necesitan conocer el conjunto de mensajes que dichos objetos aceptan (la interfaz).

• El cliente que envía la petición no necesita conocer cómose atiende dicha petición (las acciones que se llevan a cabo)

EncapsulaciEncapsulacióónn

Page 68: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

• En Programación Orientada a Objetos se considera buena práctica:

• Ocultar todos los atributos• Publicar métodos de acceso a los atributos (get/set)• Publicar únicamente los métodos necesarios

EncapsulaciEncapsulacióónn

atributo

atributo

atributo

método

método

método

CLIENTE

interfaz

¿Cómo controlar la visibilidad de atributos y métodos?Los lenguages de programación suelen proporcionar ciertas palabrasclave:

public: acceso público sin restricciones

private: acceso restringido únicamente desde el interior del objeto

protected: acceso restringido desde el interior del objeto o cualquiera de lassubclases en una jerarquía de herencia

Control de la Visibilidad de AccesoControl de la Visibilidad de Acceso

EncapsulaciEncapsulacióónn

Page 69: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

public class Mesa {

private int x = 0;private int y = 0;protected int width = 100;protected int height = 100;private int color = 100;

public int Height { get{...} set{..}}public int Width() {get{...} set{..}}public int Color() {get{...} set{..}}

public void move(int x, int y) { ………. }

}

Control de la Visibilidad de AccesoControl de la Visibilidad de Acceso

EncapsulaciEncapsulacióónn

Un banco dispone de un conjunto de cuentas bancarias. Cada cuenta bancaria tiene un titular, que indica quién es el propietario de la misma, y un saldo que indica el importe disponible en pesetas. Sobre cada cuenta bancaria se pueden realizar dos operaciones básicas: ingresar o sacar de la cuenta una cierta cantidad de dinero (abonos y cargos).

EncapsulaciEncapsulacióónn

• Siguiendo el paradigma OO:-- Clases:

- Banco- Cuenta Bancaria

-- Objetos: - Un objeto que representa al banco- Un objeto por cada cuenta bancaria que exista

EjemploEjemplo

Page 70: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Un objeto encapsula los atributos (estructura) y los métodos(comportamiento). Esta encapsulación hace que el objeto tenga unos límites

claramente definidos (sólo es visible su INTERFAZ, el interior del objeto no lo es).

Abono( )

Cargo ( )

saldo

Abono( )

Cargo( )

saldo

CuentaBancaria CuentaBancaria

EncapsulaciEncapsulacióónn

Combinando Datos y Métodos

Los métodos son públicos por lo general. Constituyen la interfazdel objeto y son accesibles a otros objetos que pueden invocarlos.

Los datos son privados por lo general. Sólo son accesibles desde

el interior del propio objeto.

Abono( )

Cargo( )

saldo

CuentaBancaria

Abono( )

Cargo( )

saldo

Objeto CuentaBancaria

EncapsulaciEncapsulacióónn

Control de la visibilidad

Page 71: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Proporciona CONTROLLa utilización del objeto es solamente

a través de sus métodos públicos

Permite CAMBIOSLa utilización del objeto no se ve

afectada si se producen cambios

en el tipo de datos de la parte

privada.

Abono ( )

Cargo ( )

euros 1202

centimos 16

Abono ( )

Cargo ( )

saldo 200.000

¿ Por qué la Encapsulación?¿ Por qué la Encapsulación?Objeto CuentaBancaria

Objeto CuentaBancaria

EncapsulaciEncapsulacióónn

¿Qué es?¿Qué es?

• Poderoso mecanismo de reutilización de código (mucho más potente que los procedimientos) por el cual una clase puede heredar los atributos y métodos de otra clase. Mecanismo por el que es posible definir clases a partir de otras clases

• Conceptualmente, se dice que el conocimiento de una clase más general es aplicable también a la clase más específica. Se habla por tanto también de generalización/especialización

• La técnica reside en factorizar los aspectos comunes en una clase base y heredar de dicha clase

HerenciaHerencia

Page 72: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Jerarquías de HerenciaJerarquías de Herencia

• Las clases se pueden organizar en una estructura de árbol, llamada jerarquía de herencia

• La información (datos y comportamiento) asociados con un nivel de una jerarquía de clases es aplicable automáticamente a los niveles inferiores de la jerarquía• La clase base se denomina superclase o clase padre• La clase que hereda se denomina subclase, clase hija

HerenciaHerencia

Superclase

Subclase

UML

La comunidad universitaria de la UPV puede organizarse en dos grandes bloques: personal de la UPV y alumnado de la UPV.

El personal puede dividirse en Profesores (Personal Docente e Investigador PDI) o Personal de Administración y Servicios (PAS).

El PDI puede ser Profesor Asociado, Profesor Colaborador, Titular de Escuela Universitaria (TEU), Titular de Universidad (TU), Catedrático de Escuela Universitaria (CEU) o Catedrático de Universidad (CU)

El alumnado puede ser alumnado universitario o alumnado de doctorado.

EjemploEjemplo

HerenciaHerencia

Page 73: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

EjemploEjemplo

Miembro UPV

Alumno UPV Personal UPV

Alumno universitario

Doctorando PDI PAS

Asociado Colaborador TEU TU CU

HerenciaHerencia

CEU

EjemploEjemplo

HerenciaHerenciapublic class MiembroUPV {private String nif;private String nombre;private String apellidos;

public String getNif() { ….. }public void setNif(String nif) { …. }……………..

}

public class AlumnoUPV : MiembroUPV {private String expediente;……………..

}

public class PersonalUPV : MiembroUPV {private int nómina;……………..

}

public class UniversitarioUPV: AlumnoUPV {

private String titulación;……………..

}

public class DoctorandoUPV: AlumnoUPV {

private String programa;……………..

}

public class PDI : PersonalUPV {

private String[] asignaturas;……………..

}

public class PAS : PersonalUPV {

private String[] tareas;……………..

}

public class Asociado : PDI {

private String empresa;……………..

}

public class Colaborador : PDI {……………..

}

public class TEU : PDI {……………..

}

public class TU : PDI {……………..

}

public class CEU : PDI {……………..

}

public class CU : PDI {……………..

}

Page 74: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

¿Qué es?¿Qué es?

• Polimorfismo: muchas formas.

• Fuertemente ligado con el concepto de herencia.

• Todo objeto que pertenece a una subclase pertenece también a la superclase (ej: un profesor de la UPV es también personal de la UPV y miembro de la UPV)

• Una subclase puede sobreescribir el comportamiento de alguna clase padre en su jerarquía de herencia

• Para un mismo mensaje cada clase se comporta de una manera diferente (la implementación del método es diferente)

PolimorfismoPolimorfismo

EjemploEjemplo

PolimorfismoPolimorfismo

Circulo- radio : double = 0

+ getArea() : double+ getRadio() : double+ setRadio(in radio : double)+ dibujar()

Forma# area : double = 0

+ getArea() : double+ dibujar()

Rectangulo- longitud : double = 0- anchura : double = 0

+ getArea() : double+ getLongitud() : double+ setLongitud(in longitud : double)+ getAnchura() : double+ setAnchura(in anchura : double)+ dibujar()

Circulo circ = new Circulo();circ.setRadio(100);circ.getArea();circ.dibujar();

Rectangulo rect = new Rectangulo();rect.setLongitud(100);rect.setAnchura(50);rect.getArea();dibujar();

Forma forma = new Circulo();forma.getArea();forma.dibujar();

forma = new Rectangulo();forma.getArea();forma.dibujar();

Page 75: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

El énfasis de la OO en la construcción de componentes independientespermite un proceso de desarrollo incremental, en el cual unidades de software individuales (clases) se diseñan, programan y prueban antes decombinarse en un sistema grande

Al reducir la interdependencia entre los componentessoftware, la orientación a objetos permite el

desarrollo de sistemas de software reutilizable

ReutilizaciReutilizacióón de clasesn de clases

Ventajas de la Reutilización

• Un componente que se reutiliza no tiene que ser reescrito

• El coste incremental de reutilizar un componente esmenor que el coste de volver a desarrollarlo

• Un conjunto estándar de componentes es más fácil demantener

• Un componente reutilizado habrá sido probado y utilizadominuciosamente, y seguramente estará libre de errores otendrá muchos menos que uno desarrollado por nosotros

ReutilizaciReutilizacióón de clasesn de clases

Page 76: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Mecanismos para Reutilizar

Existen dos mecanismos esenciales para la reutilización:

• Composición - La relación tiene-un o parte-de

• Herencia - La relación es-un

ReutilizaciReutilizacióón de clasesn de clases

Composición Herencia

Usando la relación tiene-un, uncomponente es simplemente partedel estado de otro componente ode otra manera, un componenteestá compuesto-de.

• Un coche tiene-un motor• Una casa tiene-una puerta• Una receta tiene-una lista deingredientes

En la herencia un componentees-una variación de otro, y heredatodas las características delprimero sin necesidad de volvera codificarlo.

Objeto Material

Animal

Ornitorrinco

Planta

Flor

Perro Humano

Mamífero

Comerciante Artista Dentista

Florista Ceramista

Relámpago Flora Sandra PepeAntonio flores de la abuela

ReutilizaciReutilizacióón de clasesn de clases

Page 77: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Además de un acercamiento al lenguaje natural, la POO aporta dos grandes ventajas en el ámbito de la programación:

- Facilita la reutilización de código

- Mejora la modularidad y el control de errores, lo que se nota, sobre todo, en aplicaciones grandes.

ResumenResumen

La POO se basa en tres conceptos:

• Encapsulamiento. Unir bajo una misma entidad lógica datos y código que lo manipula, aislándolos del resto. En POO esto se consigue con las clases.• Polimorfismo. La POO aporta la posibilidad de polimorfismo cuando un método produce efectos diferentes en función de la clase a la que se aplique. Es importante no confundir el polimorfismo con la sobrecarga de funciones o la sobrecarga de operadores.

ResumenResumen

Page 78: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

• Herencia. La herencia aprovecha las clases ya definidas para definir otras más específicas, que heredan los miembros de las clases más generales.

A la clase más general se la denomina clase base o superclase, y a la más específica clase hija o subclase.

La jerarquía resultante de relaciones de herencia suele tener forma de árbol, si bien no siempre es así

ResumenResumen

Page 79: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

ProgramaciProgramacióónn con C#con C#

Tema 5: Tema 5: OO con OO con C#C#

C#C#

•• El lenguaje C# y la orientaciEl lenguaje C# y la orientacióón a n a objetosobjetos

“Hola, mundo” de nuevoDefinición de clases simplesInstancias de nuevos objetosUso del operador this

Page 80: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

““Hola, mundoHola, mundo”” de nuevode nuevo

using System;

class Hello{

public static int Main( ){

Console.WriteLine(“Hello, World”);return 0;

}}

using System;

class Hello{

public static int Main( ){

Console.WriteLine(“Hello, World”);return 0;

}}

C#C#

DefiniciDefinicióón de clases simplesn de clases simplesDatos y métodos juntos dentro de una claseLos métodos son públicos, los datos son privados

class CuentaBancaria{

public void Retirar(decimal cantidad){ ... }public void Ingresar(decimal cantidad){ ... }private decimal balance;private string name;

}

class CuentaBancaria{

public void Retirar(decimal cantidad){ ... }public void Ingresar(decimal cantidad){ ... }private decimal balance;private string name;

}

Métodos públicosdescriben un

comportamientoaccesible

Métodos públicosdescriben un

comportamientoaccesible

Campos privadosdescriben un

estadoinaccesible

Campos privadosdescriben un

estadoinaccesible

Page 81: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Instancias de nuevos objetosInstancias de nuevos objetosAl declarar una variable de clase no se crea un objeto

Para crear un objeto se usa el operador new

class Program{

static void Main( ){

Reloj ahora;ahora.hora = 11; Cuenta Bancaria suya = new CuentaBancaria( );suya.Ingresar(999999M);

}}

class Program{

static void Main( ){

Reloj ahora;ahora.hora = 11; Cuenta Bancaria suya = new CuentaBancaria( );suya.Ingresar(999999M);

}}

horaminuto

ahora

suya ......

nuevoobjetoCuentaBancaria

C#C#

Uso de la palabra reservada Uso de la palabra reservada thisthisLa palabra reservada this apunta al objeto usado para la llamada al método

Es útil en caso de conflicto entre identificadores de distintos ámbitos

class CuentaBancaria{

...public void PoneNombre(string nombre){

this.nombre = nombre;}private string nombre;

}

class CuentaBancaria{

...public void PoneNombre(string nombre){

this.nombre = nombre;}private string nombre;

}

Si esta instrucción fueranombre = nombre;¿qué ocurriría?

Page 82: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

•• DefiniciDefinicióón de sistemas orientados n de sistemas orientados a objetosa objetos

HerenciaJerarquías de clasesHerencia sencilla y múltiplePolimorfismoClases base abstractasInterfaces

C#C#

HerenciaHerencia

La herencia indica una relación “es un tipo de"La herencia es una relación entre clasesLas nuevas clases añaden especialización a las existentes

MúsicoMúsico

ViolinistaViolinista

Clase base

Clase derivada

Generalización

Especialización ¿Es éste un buenejemplo de herencia ?

Page 83: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

JerarquJerarquíías de clasesas de clases

Las clases con relaciones de herencia forman jerarquías de clases

MúsicoMúsico

??????

Músico decuerda

Músico decuerda

ViolínViolín??????

Instrumentomusical

Instrumentomusical

toca

toca

tocaViolinistaViolinista

Instrumento decuerda

Instrumento decuerda

C#C#

Herencia sencilla y mHerencia sencilla y múúltipleltipleHerencia sencilla: derivadas de una clase baseHerencia múltiple: derivadas de dos o más clases base

Instrumento decuerda

Instrumento decuerda

ViolínViolín

Instrumentomusical

Instrumentomusical

Instrumento decuerda

Instrumento decuerda

Con teclasCon teclas

Violín tiene una sola clase base directa

Instrumento de cuerda tiene dos clases base directas

Page 84: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

PolimorfismoPolimorfismoEl nombre del método reside en la clase baseLos distintos cuerpos del método residen en las clases derivadas

Músico de cuerdaMúsico de cuerda

AfinaTuInstrumento( )AfinaTuInstrumento( )

GuitarristaGuitarrista

AfinaTuInstrumento( )AfinaTuInstrumento( )

ViolinistaViolinista

AfinaTuInstrumento( )AfinaTuInstrumento( )

Un método sincuerpo se llama

operación

Un método sincuerpo se llama

operación

C#C#

Clases base abstractasClases base abstractasAlgunas clases existen sólo para ser clases base

No tiene sentido crear instancias de estas clases

Estas clases son abstractas

Músico de cuerda{ abstract }

Músico de cuerda{ abstract }

Guitarrista« concrete »Guitarrista

« concrete »Violinista

« concrete »Violinista

« concrete »

Se pueden crear instanciasde clases concretas

Se pueden crear instanciasde clases concretas

No se pueden crear instanciasde clases abstractas

No se pueden crear instanciasde clases abstractas

Page 85: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

InterfacesInterfacesLas interfaces contienen sólo operaciones, no implementación

Músico de cuerda{ abstract }

Músico de cuerda{ abstract }

Violinista« concrete »Violinista

« concrete »

Músico« interface »

Músico« interface »

Nada más que operaciones.No se pueden crear instancias

de una interfaz.

Nada más que operaciones.No se pueden crear instancias

de una interfaz.

Puede contener implementación.No se pueden crear instancias de

una interfaz.

Puede contener implementación.No se pueden crear instancias de

una interfaz.

Implementa las operaciones heredadas.Se pueden crear instancias de una clase

concreta.

Implementa las operaciones heredadas.Se pueden crear instancias de una clase

concreta.

C#C#

Uso deUso de variables de variables de tipo referenciatipo referencia

Page 86: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

••Notas generalesNotas generales

Uso de variables de tipo referenciaUso de tipos referencia comunesLa jerarquía de objetosEspacios de nombres en .NET Framework

C#C#

•• Uso de variables de tipo Uso de variables de tipo referenciareferencia

Comparación de tipos valor y tipos referenciaDeclaración y liberación de variables referenciaReferencias no válidasComparación de valores y comparación de referenciasReferencias múltiples a un mismo objetoUso de referencias como parámetros de métodos

Page 87: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

ComparaciComparacióón de tipos valor y tipos referencian de tipos valor y tipos referencia

Tipos valorLa variable contiene el valor directamenteEjemplos: char, int

4242

int mol;mol = 42;

int mol;mol = 42; ••

string mol;mol = “Hola";

string mol;mol = “Hola";

HolaHola

Tipos referencia

La variable contiene una referencia al dato

El dato se almacena en unárea de memoria aparte

C#C#

DeclaraciDeclaracióón y liberacin y liberacióón de variables referencian de variables referencia

Declaración de variables referencia

coordenada c1; c1 = new coordinate(); c1.x = 6.12; c1.y = 4.2;

coordenada c1; c1 = new coordinate(); c1.x = 6.12; c1.y = 4.2;

•• 6.126.12 4.24.2

c1 = null;c1 = null;

•• 6.126.12 4.24.2

Liberación de variables referencia

Page 88: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Referencias no vReferencias no váálidaslidas

Si hay referencias no válidasNo es posible acceder a miembros o variables

Referencias no válidas en tiempo de compilaciónEl compilador detecta el uso de referencias no inicializadas

Referencias no válidas en tiempo de ejecuciónEl sistema generará un error de excepción

C#C#

ComparaciComparacióón de valores y comparacin de valores y comparacióón de n de referenciasreferencias

Comparación de tipos valor== and != comparan valores

Comparación de tipos referencia== and != comparan las referencias, no los valores

•• 1.01.0 2.02.0

•• 1.01.0 2.02.0

Diferente

Page 89: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Referencias mReferencias múúltiples a un mismo objetoltiples a un mismo objeto

Dos referencias pueden apuntar a un mismo objetoDos formas de acceder a un mismo objeto para lectura/escritura

coordinate c1= new coordinate ( );coordinate c2;c1.x = 2.3; c1.y = 7.6;c2 = c1;Console.WriteLine(c1.x + " , " + c1.y);Console.WriteLine(c2.x + " , " + c2.y);

coordinate c1= new coordinate ( );coordinate c2;c1.x = 2.3; c1.y = 7.6;c2 = c1;Console.WriteLine(c1.x + " , " + c1.y);Console.WriteLine(c2.x + " , " + c2.y);

••2.32.3 7.67.6

••

c1

c2

C#C#

Uso de referencias como parUso de referencias como paráámetros de mmetros de méétodostodos

Las referencias se pueden usar como parámetrosSi se pasan por valor, es posible cambiar el dato referenciado

static void PassCoordinateByValue(coordinate c){c.x++; c.y++;

}

static void PassCoordinateByValue(coordinate c){c.x++; c.y++;

}

loc.x = 2; loc.y = 3;PassCoordinateByValue(loc);Console.WriteLine(loc.x + " , " + loc.y);

loc.x = 2; loc.y = 3;PassCoordinateByValue(loc);Console.WriteLine(loc.x + " , " + loc.y);

2 32 3 3 43 4

••

••

Page 90: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

•• Uso de tipos referencia comunesUso de tipos referencia comunesClase ExceptionClase StringMétodos, operadores y propiedades comunes de StringComparaciones de cadenas de caracteresOperadores de comparación en String

C#C#

Clase Clase ExceptionException

Exception es una claseLos objetos Exception se usan para lanzar excepciones

Para crear un objeto Exception se usa newPara lanzar el objeto se usa throw

Los tipos Exception son subclases de Exception

Page 91: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Clase Clase StringString

Cadenas de caracteres UnicodeAbreviatura de System.StringInmutable

string s = "Hola";

s[0] = 'c'; // Error al compilar

string s = "Hola";

s[0] = 'c'; // Error al compilar

C#C#

MMéétodos, operadores y propiedades comunes todos, operadores y propiedades comunes de de StringString

CorchetesMétodo InsertPropiedad LengthMétodo CopyMétodo ConcatMétodo TrimMétodos ToUpper y ToLower

Page 92: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Comparaciones de cadenas de Comparaciones de cadenas de caracterescaracteres

Método EqualsComparación de valores

Método CompareMás comparacionesOpción para no distinguir mayúsculas y minúsculasOrdenación alfabética

Opciones locales de Compare

C#C#

Operadores de comparaciOperadores de comparacióón en n en StringString

Los operadores == y != están sobrecargados para cadenasSon equivalentes a String.Equals y !String.Equals

string a = "Test";string b = "Test";if (a == b) ... // Devuelve true

string a = "Test";string b = "Test";if (a == b) ... // Devuelve true

Page 93: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

•• La jerarquLa jerarquíía de objetosa de objetos

El tipo objectMétodos comunesReflexión

C#C#

El tipo El tipo objectobject

Sinónimo de System.ObjectClase base para todas las demás clases

ExceptionException

SystemExceptionSystemException

MyClassMyClass

ObjectObject

StringString

Page 94: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

MMéétodos comunestodos comunes

Métodos comunes para todos los tipos referencia

Método ToStringMétodo EqualsMétodo GetTypeMétodo Finalize

C#C#

ReflexiReflexióónn

Es posible obtener información sobre el tipo de un objetoEspacio de nombres System.ReflectionEl operador typeof devuelve el tipo de un objeto

Sólo para clases en tiempo de compilaciónMétodo GetType en System.Object

Información sobre clases en tiempo de ejecución

Page 95: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

•• Conversiones de datosConversiones de datosConversión de tipos valorConversiones padre/hijaEl operador isEl operador asConversiones y el tipo objectConversiones e interfacesBoxing y unboxing

C#C#

ConversiConversióón de tipos valorn de tipos valor

Conversiones implícitasConversiones explícitas

Operador de cast

ExcepcionesClase System.Convert

Control interno de conversiones

Page 96: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Conversiones padre/hijaConversiones padre/hija

Conversión a referencia de clase padreImplícita o explícitaSiempre tiene éxitoSiempre se puede asignar a un objeto

Conversión a referencia de clase hijaEs necesario cast explícitoComprueba que la referencia es del tipo correctoSi no lo es, causa una excepciónInvalidCastException

C#C#

El operador El operador isis

Devuelve true si es posible realizar una conversión

Pajaro b;if (a is Pajaro)

b = (Pajaro) a; // No hay problemaelse

Console.WriteLine("No es Pájaro");

Pajaro b;if (a is Pajaro)

b = (Pajaro) a; // No hay problemaelse

Console.WriteLine("No es Pájaro");

Page 97: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

El operador asEl operador asHace conversiones entre tipos referencia, como castEn caso de error

Devuelve nullNo causa una excepción

Pajaro b = a as Pajaro; // Convertir

if (b == null)Console.WriteLine("No es Pájaro”);

Pajaro b = a as Pajaro; // Convertir

if (b == null)Console.WriteLine("No es Pájaro”);

C#C#

Conversiones y el tipo Conversiones y el tipo objectobjectEl tipo object es la base para todas las clasesSe puede asignar a object cualquier referenciaSe puede asignar cualquier variable object a cualquier referencia

Con conversión de tipo y comprobacionesEl tipo object y el operador is

object buey;buey = a; buey = (object) a;buey = a as object;

object buey;buey = a; buey = (object) a;buey = a as object;

b = (Pajaro) buey;b = buey as Pajaro;

b = (Pajaro) buey;b = buey as Pajaro;

Page 98: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Conversiones e interfacesConversiones e interfaces

Una interfaz sólo se puede usar para acceder a sus propios miembrosNo es posible acceder a otros miembros y variables de la clase a través de la interfaz

C#C#

BoxingBoxing y y unboxingunboxingSistema de tipos unificadoBoxingUnboxingLlamadas a métodos de object en tipos valor

int p = 123;object box;box = p;

int p = 123;object box;box = p;

•• 123123

123123 p = (int)box;p = (int)box;

Page 99: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

CreaciCreacióón yn ydestruccidestruccióón de n de

objetosobjetos

C#C#

DescripciDescripcióón generaln general

Uso de constructoresObjetos y memoria

Page 100: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

•• Uso de constructoresUso de constructores

Creación de objetosUso del constructor por defectoSustitución del constructor por defectoSobrecarga de constructores

C#C#

CreaciCreacióón de objetosn de objetosPaso 1: Asignación de memoria

Se usa new para asignar memoria desde el montón Paso 2: Inicialización del objeto usando un constructor

Se usa el nombre de la clase seguido por paréntesis

Fecha cuando = new Date( );Fecha cuando = new Date( );

Page 101: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Uso del constructor por defectoUso del constructor por defectoCaracterísticas de un constructor por defecto

Acceso públicoMismo nombre que la claseNo tiene tipo de retorno (ni siquiera void)No recibe ningún argumentoInicializa todos los campos a cero, false o null

Sintaxis del constructor

class Date { public Date( ) { ... } }class Date { public Date( ) { ... } }

C#C#

SustituciSustitucióón del constructor por n del constructor por defectodefecto

El constructor por defecto puede no ser adecuado

En ese caso no hay que usarlo, sino escribir otro

Class Date{

public Date( ){

ssaa = 1970;mm = 1;dd = 1;

}private int ccyy, mm, dd;

}

Class Date{

public Date( ){

ssaa = 1970;mm = 1;dd = 1;

}private int ccyy, mm, dd;

}

Page 102: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Sobrecarga de constructoresSobrecarga de constructoresLos constructores son métodos y pueden estar sobrecargados

Mismo ámbito, mismo nombre, distintos parámetrosPermite inicializar objetos de distintas maneras

AVISOSi se escribe un constructor para una clase, el compilador no creará un constructor por defecto

Class Date{

public Date( ) { ... }public Date(int anno, int mes, int dia) { ... }...

}

Class Date{

public Date( ) { ... }public Date(int anno, int mes, int dia) { ... }...

}

C#C#

•• Objetos y memoriaObjetos y memoria

Tiempo de vida de un objetoObjetos y ámbitoRecolección de basura

Page 103: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Tiempo de vida de un objetoTiempo de vida de un objetoCreación de objetos

Se usa new para asignar memoriaSe usa un constructor para inicializar un objeto en esa memoria

Uso de objetosLlamadas a métodos

Destrucción de objetosSe vuelve a convertir el objeto en memoriaSe libera la memoria

C#C#

Objetos y Objetos y áámbitombitoEl tiempo de vida de un valor a local está vinculado al ámbito en el que está declarado

Tiempo de vida corto (en general)Creación y destrucción deterministas

El tiempo de vida de un objeto dinámico no estávinculado a su ámbito

Tiempo de vida más largoDestrucción no determinista

Page 104: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

RecolecciRecoleccióón de basuran de basuraNo es posible destruir objetos de forma explícita

C# no incluye un inverso de new (como delete)Ello se debe a que una función de eliminación explícita es una importante fuente de errores en otros lenguajes

Los objetos se destruyen por recolección de basura

Busca objetos inalcanzables y los destruyeLos convierte de nuevo en memoria binaria no utilizadaNormalmente lo hace cuando empieza a faltar memoria

C#C#

Herencia enHerencia en C#C#

Page 105: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Notas generalesNotas generales

Derivación de clasesImplementación de métodosUso de clases selladasUso de interfacesUso de clases abstractas

C#C#

•• DerivaciDerivacióón de clasesn de clases

Extensión de clases baseAcceso a miembros de la clase baseLlamadas a constructores de la clase base

Page 106: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

ExtensiExtensióón de clases basen de clases baseSintaxis para derivar una clase desde una clase base

Una clase derivada hereda la mayor parte de los elementos de su clase base Una clase derivada no puede ser más accesible que su clase base

class Token{

...}class ComentToken: Token{

...}

class Token{

...}class ComentToken: Token{

...}

ComentToken« concrete »

ComentToken« concrete »

Token« concrete »

Token« concrete »Clase derivadaClase derivadaClase derivada Clase baseClase baseClase base

2 puntos2 puntos2 puntos

C#C#

Acceso a miembros de la clase Acceso a miembros de la clase basebase

Los miembros heredados con protección están implícitamente protegidos en la clase derivadaLos miembros de una clase derivada sólo pueden acceder a sus miembros heredados con protecciónEn una struct no se usa el modificador de acceso protected

class Token{ ... class Outside

protected string name; {} void Fails(Token t)class ComentToken: Token {{ ... ...

public string Name( ) t.name{ ...

return name; } } }

}

class Token{ ... class Outside

protected string name; {} void Fails(Token t)class ComentToken: Token {{ ... ...

public string Name( ) t.name{ ...

return name; } } }

}

Page 107: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Llamadas a constructores de la clase baseLlamadas a constructores de la clase baseLas declaraciones de constructores deben usar la palabra base

Una clase derivada no puede acceder a un constructor privado de la clase baseSe usa la palabra base para habilitar el ámbito del identificador

class Token{

protected Token(string name) { ... }...

}class ComentToken: Token{

public ComentToken(string name) : base(name) { } ...

}

class Token{

protected Token(string name) { ... }...

}class ComentToken: Token{

public ComentToken(string name) : base(name) { } ...

}

C#C#

•• ImplementaciImplementacióón de mn de méétodostodos

Definición de métodos virtualesUso de métodos virtualesSustitución de métodos (override)Uso de métodos overrideUso de new para ocultar métodosUso de la palabra reservada new

Page 108: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

DefiniciDefinicióón de mn de méétodos virtualestodos virtualesSintaxis: Se declara como virtual

Los métodos virtuales son polimórficos

class Token{

...public int LineNumber( ) { ... }public virtual string Name( ) { ... }

}

class Token{

...public int LineNumber( ) { ... }public virtual string Name( ) { ... }

}

C#C#

Uso de mUso de méétodos virtualestodos virtuales

Para usar métodos virtuales:No se puede declarar métodos virtuales como estáticosNo se puede declarar métodos virtuales como privados

Page 109: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

SustituciSustitucióón de mn de méétodos (todos (overrideoverride))Sintaxis: Se usa la palabra reservada override

class Token{ ...

public virtual string Name( ) { ... } }class ComentToken: Token{ ...

public override string Name( ) { ... }}

class Token{ ...

public virtual string Name( ) { ... } }class ComentToken: Token{ ...

public override string Name( ) { ... }}

C#C#

Uso de mUso de méétodos todos overrideoverrideSólo se sustituyen métodos virtuales heredados idénticos

Un método override debe coincidir con su método virtual asociado

Se puede sustituir un método override

No se puede declarar explícitamente un override como virtual

No se puede declarar un método override como static o private

class Token{ ...

public int LineNumber( ) { ... }public virtual string Name( ) { ... }

}class ComentToken: Token{ ...

public override int LineNumber( ) { ... }public override string Name( ) { ... }

}

class Token{ ...

public int LineNumber( ) { ... }public virtual string Name( ) { ... }

}class ComentToken: Token{ ...

public override int LineNumber( ) { ... }public override string Name( ) { ... }

}

Page 110: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Uso de Uso de newnew para ocultar mpara ocultar méétodostodosSintaxis: Para ocultar un método se usa la palabra reservada new

class Token{ ...

public int LineNumber( ) { ... }}class ComentToken: Token{ ...

new public int LineNumber( ) { ... }

}

class Token{ ...

public int LineNumber( ) { ... }}class ComentToken: Token{ ...

new public int LineNumber( ) { ... }

}

C#C#

Uso de la palabra reservada Uso de la palabra reservada newnewOcultar tanto métodos virtuales como no virtuales

Resolver conflictos de nombre en el códigoOcultar métodos que tengan signaturas idénticas

class Token{ ...

public int LineNumber( ) { ... }public virtual string Name( ) { ... }

}class ComentToken: Token{ ...

new public int LineNumber( ) { ... }public override string Name( ) { ... }

}

class Token{ ...

public int LineNumber( ) { ... }public virtual string Name( ) { ... }

}class ComentToken: Token{ ...

new public int LineNumber( ) { ... }public override string Name( ) { ... }

}

Page 111: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Uso de clases selladasUso de clases selladasNinguna clase puede derivar de una clase selladaLas clases selladas sirven para optimizar operaciones en tiempo de ejecuciónMuchas clases de .NET Framework son selladas: String, StringBuilder, etc.Sintaxis: Se usa la palabra reservada sealed

namespace System{

public sealed class String{

...}

}namespace Mine{

class FancyString: String { ... }}

namespace System{

public sealed class String{

...}

}namespace Mine{

class FancyString: String { ... }}

C#C#

•• Uso de interfacesUso de interfaces

Declaración de interfacesImplementación de varias interfacesImplementación de métodos de interfaz

Page 112: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

DeclaraciDeclaracióón de interfacesn de interfaces

Sintaxis: Para declarar métodos se usa la palabra reservada interface

interface IToken{

int LineNumber( );string Name( );

}

interface IToken{

int LineNumber( );string Name( );

}

IToken« interface »

IToken« interface »

LineNumber( )Name( )LineNumber( )Name( )

Métodos sin cuerpoMMéétodos sin cuerpotodos sin cuerpo

Los nombres de interfacesempiezan con “I”mayúsculaLos nombres de interfacesLos nombres de interfaces

empiezan con empiezan con ““II””maymayúúsculascula

Sin espec. de accesoSin Sin especespec. de acceso. de acceso

C#C#

ImplementaciImplementacióón de varias interfacesn de varias interfacesUna clase puede implementar cero o más interfaces

Una interfaz puede extender cero o más interfacesUna clase puede ser más accesible que sus interfaces baseUna interfaz no puede ser más accesible que su interfaz baseUna clase implementa todos los métodos de interfaz heredados

interface IToken{

string Name( );}interface IVisitable{

void Accept(IVisitante v);}class Token: IToken, IVisitable{ ...}

interface IToken{

string Name( );}interface IVisitable{

void Accept(IVisitante v);}class Token: IToken, IVisitable{ ...}

IToken« interface »

IToken« interface »

IVisitable« interface »IVisitable

« interface »

Token« concrete »

Token« concrete »

CVC1

Page 113: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

Diapositiva 68

CVC1 Todas las declaraciones de métodos deben nombrar los parámetrosCurro Vázquez; 20/04/2003

C#C#

ImplementaciImplementacióón de mn de méétodos de todos de interfazinterfaz

El método que implementa debe ser igual que el método de interfazEl método que implementa puede ser virtual o no virtual

class Token: IToken, IVisitable{

public virtual string Name( ) { ... } public void Accept(IVisitante v) { ... }

}

class Token: IToken, IVisitable{

public virtual string Name( ) { ... } public void Accept(IVisitante v) { ... }

}

Mismo accesoMismo retornoMismo nombreMismos parámetros

Mismo accesoMismo accesoMismo retornoMismo retornoMismo nombreMismo nombreMismos parMismos paráámetrosmetros

Page 114: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

•• Uso de clases abstractasUso de clases abstractasDeclaración de clases abstractasUso de clases abstractas en una jerarquía de clasesComparación de clases abstractas e interfacesImplementación de métodos abstractosUso de métodos abstractos

C#C#

DeclaraciDeclaracióón de clases abstractasn de clases abstractasSe usa la palabra reservada abstract

abstract class Token{

...}class Test{

static void Main( ){

new Token( );}

}

abstract class Token{

...}class Test{

static void Main( ){

new Token( );}

}

Token{ abstract }

Token{ abstract }

No se pueden crear instanciasde una clase abstracta

No se pueden crear instanciasNo se pueden crear instanciasde una clase abstractade una clase abstracta

Page 115: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Uso de clases abstractas en una jerarquUso de clases abstractas en una jerarquíía de a de clasesclases

interface IToken{

string Name( );}

abstract class Token: IToken{

string IToken.Name( ) { ...}...

}

class ComentToken: Token{ ...}class KeywordToken: Token{ ...}

interface IToken{

string Name( );}

abstract class Token: IToken{

string IToken.Name( ) { ...}...

}

class ComentToken: Token{ ...}class KeywordToken: Token{ ...}

Ejemplo 1

Token{ abstract }

Token{ abstract }

IToken« interface »

IToken« interface »

ComentToken

« concrete »

ComentToken

« concrete »

KeywordToken

« concrete »

KeywordToken

« concrete »

C#C#

Uso de clases abstractas en una jerarquUso de clases abstractas en una jerarquíía de a de clases clases ((cont.cont.))

interface IToken{

string Name( );}

abstract class Token{

public virtual string Name( ) { ...}...

}

class ComentToken: Token, IToken{ ...}class KeywordToken: Token, IToken{ ...}

interface IToken{

string Name( );}

abstract class Token{

public virtual string Name( ) { ...}...

}

class ComentToken: Token, IToken{ ...}class KeywordToken: Token, IToken{ ...}

Ejemplo 2

Token{ abstract }

Token{ abstract }

IToken« interface »

IToken« interface »

ComentToken

« concrete »

ComentToken

« concrete »

KeywordToken

« concrete »

KeywordToken

« concrete »

Page 116: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

ComparaciComparacióón de clases abstractas e n de clases abstractas e interfacesinterfaces

ParecidosNo se pueden crear instancias de ninguna de ellasNo se puede sellar ninguna de ellas

DiferenciasLas interfaces no pueden contener implementacionesLas interfaces no pueden declarar miembros no públicosLas interfaces no pueden extender nada que no sea una interfaz

C#C#

ImplementaciImplementacióón de mn de méétodos todos abstractosabstractos

Sintaxis: Se usa la palabra reservada abstract

Sólo clases abstractas pueden declarar métodos abstractosLos métodos abstractos no pueden tener cuerpo

abstract class Token{

public virtual string Name( ) { ... }public abstract int Longitud( );

}class ComentToken: Token{

public override string Name( ) { ... }public override int Longitud( ) { ... }

}

abstract class Token{

public virtual string Name( ) { ... }public abstract int Longitud( );

}class ComentToken: Token{

public override string Name( ) { ... }public override int Longitud( ) { ... }

}

Page 117: Tema 0: Introducció - dsic.upv.esjlinares/csharp/Curs_C_SHARP06.pdf · Windows Forms Vista general de la plataforma. Novedades Framework 2.0

C#C#

Uso de mUso de méétodos abstractostodos abstractosLos métodos abstractos son virtualesLos métodos override pueden sustituir a métodos abstractos en otras clases derivadasLos métodos abstractos pueden sustituir a métodos de la clase base declarados como virtualesLos métodos abstractos pueden sustituir a métodos de la clase base declarados como override