SlideShare une entreprise Scribd logo
1  sur  397
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 1
29/04/2022
Diseño y construcción de
programas visuales y
orientados a eventos
Unidad 2
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo
para uso de los cursos de Programación Orientada a Eventos
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 2
29/04/2022
Objetivo general de la Unidad 2
Construir programas con interfaces visuales y orientados a
eventos, basados en el uso de clases provistas por un
framework y creadas por el desarrollador para la
interacción con el usuario final.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 3
29/04/2022
Contenido
• Introducción al IDE de desarrollo.
• Sintaxis, tipos de datos y conversiones,
estructuras de control, métodos y manejo de
excepciones.
• Programación en capas (MVC) y aplicaciones con
conceptos de orientación a objetos (Herencia,
Polimorfismo y Lista de Objetos)
• Formularios, Controles Comunes y sus eventos.
(TextBox, Label, Button, ComboBox,
DateTimePicker, DatagridView, ListBox,
CheckBox, RadioButton, PictureBox)
• Manejo de eventos del mouse, teclado, ítems, etc.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 4
29/04/2022
IDE: Visual Studio
La palabra Visual hace referencia al método para
crear la interfaz gráfica del usuario (GUI), en
donde se colocan objetos prefabricados dentro de
la pantalla.
Para crear una aplicación con Visual Basic, se
emplean proyectos; los cuales son una colección
de archivos que generan a su vez nuevos
formularios.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 5
29/04/2022
Entorno
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 6
29/04/2022
Formulario
El formulario es el objeto principal
ubicado en la ventana del
programa. Se pueden emplear
tantas ventanas como sean
necesarias en una aplicación,
siempre y cuando no existan dos
formularios con el mismo
nombre. Visual Studio por
defecto coloca a cada formulario
el nombre de Form1, Form2 y así
sucesivamente cada vez que se
agreguen nuevos formularios.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 7
29/04/2022
Permite visualizar los
proyectos, aplicaciones y
formularios en forma
jerárquica, de la solución
que se está creando.
Para acceder al explorador
se da clic en el menú
ver/explorador de
soluciones o el ícono
Desde el teclado Ctrl Alt L
Explorador de soluciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 8
29/04/2022
Permite visualizar
los errores
generado en el
código. También
advertencias.
Para acceder a la
ventana se da clic
en el menú ver
/resultados
Desde el teclado
Ctrl Alt O
Ventana de resultados
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 9
29/04/2022
Cuadro de herramientas
• Contiene las herramientas agrupadas
por categorías como: Todos los
formularios de Windows Forms,
controles comunes, contenedores,
puntero, menús y barras de
herramientas entre otros.
• El cuadro de herramientas se visualiza
a través del menú Ver/Cuadro de
herramientas o el ícono de
herramientas.
• Desde el teclado Ctrl Alt X
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 10
29/04/2022
Un programa en visual está formado
por objetos
Es cualquier control
que forma parte de la
aplicación y estos a su
vez tienen asociado
un conjunto de
propiedades,
métodos y eventos.
Ejemplo: una caja de
texto (textbox), una
etiqueta (label) o un
botón (button).
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 11
29/04/2022
Son las características
específicas que posee un
objeto o formulario.
Ejemplo color de fondo
(backcolor), fuente (font) y
color de letra (forecolor),
imagen de fondo
(backgroundimage) entre
otros.
Propiedades
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 12
29/04/2022
Creando un proyecto de C# en Visual
Studio
• Creamos un proyecto de C# de tipo Windows Project
Application
• Le asignamos un nombre como solíamos hacer en
proyectos de Algoritmos y Lógica de Programación
• Por primera vez vamos a tener una interfaz gráfica!!
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 13
29/04/2022
Vista principal de un proyecto de
Escritorio
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 14
29/04/2022
Contenido
• Introducción al IDE de desarrollo.
• Sintaxis, tipos de datos y conversiones,
estructuras de control, métodos y manejo de
excepciones.
• Programación en capas (MVC) y aplicaciones con
conceptos de orientación a objetos (Herencia,
Polimorfismo y Lista de Objetos)
• Formularios, Controles Comunes y sus eventos.
(TextBox, Label, Button, ComboBox,
DateTimePicker, DatagridView, ListBox,
CheckBox, RadioButton, PictureBox)
• Manejo de eventos del mouse, teclado, ítems, etc.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 15
29/04/2022
Contenido
• Sintaxis
• Tipos de datos y conversiones
• Variables de tipo valor
• Variables de tipo referencia
• Estructuras de control
• Métodos y parámetros
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 16
29/04/2022
C#
• Lenguaje Creado específicamente para la
plataforma .NET
• Estándar ECMA (Ecma-334).
• Orientado a Objetos y Componentes.
• Soporta todas las características de la POO:
- Abstracción
- Encapsulación.
- Herencia.
- Polimorfismo.
• Sintaxis derivada de C, C++, Delphi y Java.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 17
29/04/2022
Arquitectura de .Net Framework
.
N
E
T
F
r
a
m
e
w
o
r
k
Múltiples
Lenguajes
VB C# C++ JScript ...
Especificación de Lenguaje común (CLS)
Librerías
de clases
extendidas
ASP.NET
ADO.NET
Windows Forms
XML
Librerías de clases base
Tiempo de ejecución en Lenguaje Común
(CLR)
Visual
Studio
.Net
Servicios
Operativos
MSMQ COM+ IIS Windows
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 18
29/04/2022
CLS - Elección del lenguaje
• .NET posee un único runtime (el CLR) y un
único conjunto de bibliotecas para todos los
lenguajes
• No hay diferencias notorias de performance
entre los lenguajes provistos por Microsoft
• El lenguaje a utilizar, en gral., dependerá de
su experiencia previa con otros lenguajes o de
gustos personales
– Si conoce Java, Delphi, C++, etc. → C#
– Si conoce Visual Basic o VBScript → VB.NET
• Los tipos de aplicaciones .NET son
INDEPENDIENTES del lenguaje que elija
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 19
29/04/2022
Sintaxis C#
• Terminación de Línea, es con un “;”
int a = 1 + b;
int a = 1
+ b;
int a =
1 + b;
int a =
1 +
b;
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 20
29/04/2022
Sintaxis C#
• Declaración en Bloques en llaves “{}”:
class Programa{
public static void Main(string[] args) {
Console.WriteLine(“Hola Mundo!");
}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 21
29/04/2022
Sintaxis C#
• Comentarios en el código:
string nombre = “Juan”; // Comentario de una sola línea
/* Comentario con mas
de una línea*/
/// <summary>
/// Documentación XML que puede ser consumida por otras
/// herramientas para mostrar ayuda dinámica o generar
/// documentación en varios formatos
/// </summary>
public class Matematica {
/// <summary>
/// Calcula la suma de dos números enteros
/// </summary>
/// <param name="x">El primer operando de la suma</param>
/// <param name="y">El segundo operando de la suma</param>
/// <returns> La suma entera de ambos operandos</returns>
public int Sumar (int x, int y) {return x + y;}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 22
29/04/2022
Sintaxis C#
• C# es un lenguaje “case-sensitive”
system.console.writeline(“HOLA”); //INCORRECTO
System.Console.WriteLine(“HOLA”); //CORRECTO
int a; //INCORRECTO
A = 1; //INCORRECTO
int a; //CORRECTO
A = 1; //CORRECTO
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 23
29/04/2022
Sintaxis C#
• Declaración de variables
int i;
decimal d;
rectangle r;
Persona per;
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 24
29/04/2022
Sintaxis C#
• Inicialización de variables
int i; //INCORRECTO
System.Console.WriteLine(i); //INCORRECTO
int i=0; //CORRECTO
System.Console.WriteLine(i); //CORRECTO
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 25
29/04/2022
Sintaxis C#
• Conversión de Tipos
Cuenta cta = new CtaCte();
CtaCte cc = cta; //Error: puede que cta no sea una CtaCte
CtaCte cc = (CtaCte)cta; //Conversion explicita “CASTING”
CtaCte cc = cta as CtaCte; //Usando el operador “as”
if (cta is CtaCte) ... //Comparación con el operador “is”
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 26
29/04/2022
Operadores
Descripción C#
Asignación =
Adición +
Sustracción -
Multiplicación *
División /
Negación !
Módulo (Parte entera de la división) %
Mayor >
Menor <
Mayor o Igual >=
Menor o Igual <=
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 27
29/04/2022
Operadores Lógicos
Distinto
!=
Igual
==
Negacion logica
!
Operador logico O
ll
Operador logico Y
&&
Operador
C#
En C# todas las evaluaciones se hacen por “cortocircuito”
//Si Hacer1() es True, entonces //Si Hacer1() es False, entonces
//NO se evalua Hacer2() //NO se evalua Hacer2()
if (Hacer1() || Hacer2()) if (Hacer1() && Hacer2())
{ {
} }
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 28
29/04/2022
Namespaces
C#
namespace BancoARG
{
namespace Gestion
{
public class CtaCte
{
}
public class CajaAhorro
{
}
}
}
//Referencia “full”
BancoARG.Gestion.CtaCte;
BancoARG.Gestion.CajaAhorro;
//Referencia “corta”
using BancoARG.Gestion;
CtaCte cc = new CtaCte();
CajaAhorro ca = new CajaAhorro();
Los namespaces (espacios de nombre)
funcionan como un método de
organización de clases (tanto las que
escribimos nosotros como las incluidas
en .NET), agrupando en un conjunto a
aquellas clases que están relacionadas
lógicamente.
Un namespace puede contener tanto
tipos (clases) como otros namespaces, y
dentro de un namespace no puede haber
dos clases con el mismo nombre.
El nombre completo de una clase se
construye a partir de todos los
namespaces que la contienen (la
jerarquía se arma separándolos con “.”)
+ el nombre mismo de la clase.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 29
29/04/2022
Herencia
En C# la herencia se define:
class Cuenta //Clase Base
{
}
class CtaCte : Cuenta //Clase Derivada
{
}
En .NET solo
se permite
Herencia
Simple
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 30
29/04/2022
Contenido
• Sintaxis
• Tipos de datos y conversiones
• Variables de tipo valor
• Variables de tipo referencia
• Estructuras de control
• Métodos y parámetros
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 31
29/04/2022
CTS (Common Type System)
• Define un conjunto común de “tipos” de datos
orientados a objetos
• Todo lenguaje de programación .NET debe
implementar los tipos definidos por el CTS
• Todo tipo hereda
directa o
indirectamente del
tipo System.Object
• Define Tipos de
VALOR y de
REFERENCIA
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 32
29/04/2022
CTS: Características
• Cada tipo puede tener cero o mas miembros
(campo, método, propiedad, evento).
• No puede existir la herencia Múltiple.
• Todo Tipo hereda directa o indirectamente
del tipo System.Object
• Los objetos que lanzan un tipo de excepción
deben heredar (directa o indirectamente) de
System.Exception
• Los tipos declarados en 2 ensamblados
distintos, son distintos, aunque tengan el
mismo nombre.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 33
29/04/2022
Tipos
Overview
• Un programa en C# es una colección de
tipos
– Classes, structs, enums, interfaces, delegates
• C# proporciona un conjunto de tipos
predefinidos
– E.g. int, byte, char, string, object, …
• Puedes crear tus propios tipos.
• Todos los datos y el código se definen dentro
de un tipo.
– No hay variables globales, ni funciones globales
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 34
29/04/2022
Tipos
Overview
• Tipos contienen:
– Data members
• Fields, constants, arrays
• Events
– Function members
• Methods, operators, constructors, destructors
• Properties, indexers
– Otros tipos
• Classes, structs, enums, interfaces, delegates
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 35
29/04/2022
Tipos
Overview
• Tipos pueden ser instanciados…
– …y luego usados: call methods,
get y set properties, etc.
• Puede convertirse de un tipo a otro
– Implicitamente y explicitamente
• Tipos están organizados
– Namespaces, files, assemblies
• Hay dos categorías de tipos: valor y
referencia.
• Los tipos se organizan en una jerarquía.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 36
29/04/2022
Tipos
Unified Type System
• Value types
– Directly contain data
– Cannot be null
• Reference types
– Contain references to objects
– May be null
int i = 123;
string s = "Hello world";
123
i
s "Hello world"
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 37
29/04/2022
Los Tipos de Datos
• El CLR administra dos segmentos de memoria:
Stack (Pila) y Heap (Montón)
• El Stack es liberado automáticamente y el Heap
es administrado por el GC (Garbage Collector)
• Los tipos VALOR se
almacenan en el
Stack
• Los tipos
REFERENCIA se
almacenan en el
Heap
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 38
29/04/2022
Tipos de Datos por Valor
Categoría Clase Descripción C# Alias
Enteros Byte Un entero sin signo (8-bit) byte
SByte Un entero con signo (8-bit) sbyte
Int16 Un entero con signo (16-bit) short
Int32 Un entero con signo (32-bit) int
Int64 Un entero con signo (64-bit) long
Punto
Flotante Single
Un número de punto flotante de simple precisión (32-
bit) float
Double
Un número de punto flotante de doble precisión (64-
bit) double
Decimal Un número decimal de 96-bit decimal
Lógicos Boolean Un valor booleano (true o false) bool
Otros Char Un caracter Unicode (16-bit) char
Object La raíz de la jerarquía de objetos object
String
Una cadena de caracteres unicode inmutable y de
tamaño fijo string
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 39
29/04/2022
Tipos
Unified Type System
• Value types
– Primitivos int i; float x;
– Enums enum State { Off, On }
– Structs struct Point {int x,y;}
• Reference types
– Root object
– String string
– Classes class Foo: Bar, IFoo {...}
– Interfaces interface IFoo: IBar {...}
– Arrays string[] a = new
string[10];
– Delegates delegate void Empty();
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 40
29/04/2022
Tipos
Unified Type System
Value (Struct) Reference (Class)
Variable holds Actual value Memory location
Allocated on Stack, member Heap
Nullability Always has value May be null
Default value 0 null
Aliasing (in a scope) No Yes
Assignment means Copy data Copy reference
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 41
29/04/2022
Tipos
Unified Type System
• Beneficios de value types
– No heap allocation, less GC pressure
– Más eficiente uso de memoria
– Less reference indirection
– Unified type system
• No primitive/object dichotomy
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 42
29/04/2022
Tipos
Conversiones
• Conversiones implícitas
– Occur automatically
– Guaranteed to succeed
– No information (precision) loss
• Explicit conversions
– Require a cast
– May not succeed
– Information (precision) might be lost
• Tanto las conversiones implícitas como las
explícitas pueden ser definidas por el usuario
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 43
29/04/2022
Tipos
Conversiones
int x = 123456;
long y = x; // implicit
short z = (short)x; // explicit
double d = 1.2345678901234;
float f = (float)d; // explicit
long l = (long)d; // explicit
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 44
29/04/2022
Tipos
Unified Type System
• Todo es un objeto
– Todos los tipos finalmente heredan de object
– Cualquier dato puede almacenarse,
transportarse y manipularse sin trabajo
adicional
M
em
oryStream FileStream
Stream Hashtable int double
object
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 45
29/04/2022
Tipos
Unified Type System
• Polimorfismo
– La capacidad de realizar una operación en un
objeto sin conocer el tipo preciso del objeto.
void Poly(object o) {
Console.WriteLine(o.ToString());
}
Poly(42);
Poly(“abcd”);
Poly(12.345678901234m);
Poly(new Point(23,45));
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 46
29/04/2022
Tipos
Unified Type System
• Pregunta: ¿Cómo podemos tratar
polimórficamente los tipos de valor y
referencia?
– ¿Cómo se convierte un int (tipo de valor) en
un objeto (tipo de referencia)?
• Respuesta: Boxing!
– Only value types get boxed
– Reference types do not get boxed
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 47
29/04/2022
Conversión de tipos por Valor y Referencia
• Para poder convertir tipos por valor a referencia y
viceversa se utiliza una técnica conocida como:
• BOXING:
Convierte un tipo por valor a uno por referencia.
• UNBOXING:
Convierte un tipo por referencia a un tipo por valor.
Tipo por Valor
Tipo por
Referencia
Boxing
Unboxing
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 48
29/04/2022
Types
Unified Type System
• Boxing
– Copies a value type into a reference type
(object)
– Each value type has corresponding “hidden”
reference type
– Note that a reference-type copy is made of the
value type
• Value types are never aliased
– Value type is converted implicitly to object, a
reference type
• Essentially an “up cast”
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 49
29/04/2022
Types
Unified Type System
• Unboxing
– Inverse operation of boxing
– Copies the value out of the box
• Copies from reference type to value type
– Requires an explicit conversion
• May not succeed (like all explicit conversions)
• Essentially a “down cast”
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 50
29/04/2022
Types
Unified Type System
• Boxing and unboxing
int i = 123;
object o = i;
int j = (int)o;
123
i
o
123
j
123
System.Int32
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 51
29/04/2022
Types
Unified Type System
• Benefits of boxing
– Enables polymorphism across all types
– Collection classes work with all types
– Eliminates need for wrapper classes
– Replaces OLE Automation's Variant
• Lots of examples in .NET Framework
Hashtable t = new Hashtable();
t.Add(0, "zero");
t.Add(1, "one");
t.Add(2, "two");
string s = string.Format(
"Your total was {0} on {1}",
total, date);
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 52
29/04/2022
Types
Unified Type System
• Disadvantages of boxing
– Performance cost
• The need for boxing will decrease when
the CLR supports generics (similar to C++
templates)
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 53
29/04/2022
Types
Predefined Types
• Value
– Integral types
– Floating point types
– decimal
– bool
– char
• Reference
– object
– string
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 54
29/04/2022
Predefined Types
Value Types
• All are predefined structs
Signed sbyte, short, int, long
Unsigned byte, ushort, uint, ulong
Character char
Floating point float, double, decimal
Logical bool
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 55
29/04/2022
Predefined Types
Integral Types
C# Type System Type Size (bytes) Signed?
sbyte System.Sbyte 1 Yes
short System.Int16 2 Yes
int System.Int32 4 Yes
long System.Int64 8 Yes
byte System.Byte 1 No
ushort System.UInt16 2 No
uint System.UInt32 4 No
ulong System.UInt64 8 No
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 56
29/04/2022
Predefined Types
Floating Point Types
• Follows IEEE 754 specification
• Supports ± 0, ± Infinity, NaN
C# Type System Type Size (bytes)
float System.Single 4
double System.Double 8
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 57
29/04/2022
Predefined Types
decimal
• 128 bits
• Essentially a 96 bit value scaled by a
power of 10
• Decimal values represented precisely
• Doesn’t support signed zeros, infinities
or NaN
C# Type System Type Size (bytes)
decimal System.Decimal 16
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 58
29/04/2022
Predefined Types
decimal
• All integer types can be implicitly
converted to a decimal type
• Conversions between decimal and floating
types require explicit conversion due to
possible loss of precision
• s * m * 10e
– s = 1 or –1
– 0  m  296
– -28  e  0
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 59
29/04/2022
Predefined Types
Integral Literals
• Integer literals can be expressed as decimal
or hexadecimal
• U or u: uint or ulong
• L or l: long or ulong
• UL or ul: ulong
123 // Decimal
0x7B // Hexadecimal
123U // Unsigned
123ul // Unsigned long
123L // Long
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 60
29/04/2022
Predefined Types
Real Literals
• F or f: float
• D or d: double
• M or m: decimal
123f // Float
123D // Double
123.456m // Decimal
1.23e2f // Float
12.3E1M // Decimal
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 61
29/04/2022
Predefined Types
bool
• Represents logical values
• Literal values are true and false
• Cannot use 1 and 0 as boolean values
– No standard conversion between other types
and bool
C# Type System Type Size (bytes)
bool System.Boolean 1 (2 for arrays)
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 62
29/04/2022
Predefined Types
char
• Represents a Unicode character
• Literals
– ‘A’ // Simple character
– ‘u0041’ // Unicode
– ‘x0041’ // Unsigned short hexadecimal
– ‘n’ // Escape sequence character
C# Type System Type Size (bytes)
Char System.Char 2
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 63
29/04/2022
Predefined Types
char
• Escape sequence characters (partial list)
Char Meaning Value
’ Single quote 0x0027
” Double quote 0x0022
 Backslash 0x005C
0 Null 0x0000
n New line 0x000A
r Carriage return 0x000D
t Tab 0x0009
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 64
29/04/2022
Predefined Types
Reference Types
Root type object
Character string string
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 65
29/04/2022
Predefined Types
object
• Root of object hierarchy
• Storage (book keeping) overhead
– 0 bytes for value types
– 8 bytes for reference types
• An actual reference (not the object)
uses 4 bytes
C# Type System Type Size (bytes)
object System.Object 0/8 overhead
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 66
29/04/2022
Predefined Types
object Public Methods
• public bool Equals(object)
• protected void Finalize()
• public int GetHashCode()
• public System.Type GetType()
• protected object MemberwiseClone()
• public void Object()
• public string ToString()
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 67
29/04/2022
Predefined Types
string
• An immutable sequence of Unicode
characters
• Reference type
• Special syntax for literals
– string s = “I am a string”;
C# Type System Type Size (bytes)
String System.String 20 minimum
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 68
29/04/2022
Predefined Types
string
• Normally have to use escape characters
• Verbatim string literals
– Most escape sequences ignored
• Except for “”
– Verbatim literals can be multi-line
string s1= “serverfilesharefilename.cs”;
string s2 = @“serverfilesharefilename.cs”;
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 69
29/04/2022
Types
User-defined Types
• User-defined types
Enumerations enum
Arrays int[], string[]
Interface interface
Reference type class
Value type struct
Function pointer delegate
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 70
29/04/2022
Types
Enums
• An enum defines a type name for a related
group of symbolic constants
• Choices must be known at compile-time
• Strongly typed
– No implicit conversions to/from int
– Can be explicitly converted
– Operators: +, -, ++, --, &, |, ^, ~, …
• Can specify underlying type
– byte, sbyte, short, ushort, int, uint, long, ulong
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 71
29/04/2022
Types
Enums
enum Color: byte {
Red = 1,
Green = 2,
Blue = 4,
Black = 0,
White = Red | Green | Blue
}
Color c = Color.Black;
Console.WriteLine(c); // 0
Console.WriteLine(c.Format()); // Black
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 72
29/04/2022
Types
Enums
• All enums derive from System.Enum
– Provides methods to
• determine underlying type
• test if a value is supported
• initialize from string constant
• retrieve all values in enum
• …
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 73
29/04/2022
Types
Arrays
• Arrays allow a group of elements of a specific
type to be stored in a contiguous block of
memory
• Arrays are reference types
• Derived from System.Array
• Zero-based
• Can be multidimensional
– Arrays know their length(s) and rank
• Bounds checking
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 74
29/04/2022
Types
Arrays
• Declare
• Allocate
• Initialize
• Access and assign
• Enumerate
int[] primes;
int[] primes = new int[9];
int[] prime = new int[] {1,2,3,5,7,11,13,17,19};
int[] prime = {1,2,3,5,7,11,13,17,19};
prime2[i] = prime[i];
foreach (int i in prime) Console.WriteLine(i);
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 75
29/04/2022
Types
Arrays
• Multidimensional arrays
– Rectangular
•int[,] matR = new int[2,3];
• Can initialize declaratively
•int[,] matR =
new int[2,3] { {1,2,3}, {4,5,6} };
– Jagged
• An array of arrays
•int[][] matJ = new int[2][];
• Must initialize procedurally
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 76
29/04/2022
Types
Interfaces
• An interface defines a contract
– Includes methods, properties, indexers, events
– Any class or struct implementing an interface
must support all parts of the contract
• Interfaces provide polymorphism
– Many classes and structs may implement
a particular interface
• Contain no implementation
– Must be implemented by a class or struct
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 77
29/04/2022
Types
Classes
• User-defined reference type
– Similar to C++, Java classes
• Single class inheritance
• Multiple interface inheritance
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 78
29/04/2022
Types
Classes
• Members
– Constants, fields, methods, operators,
constructors, destructors
– Properties, indexers, events
– Static and instance members
• Member access
– public, protected, private, internal,
protected internal
• Default is private
• Instantiated with new operator
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 79
29/04/2022
public class Car : Vehicle {
public enum Make { GM, Honda, BMW }
Make make;
string vid;
Point location;
Car(Make m, string vid; Point loc) {
this.make = m;
this.vid = vid;
this.location = loc;
}
public void Drive() {
Console.WriteLine(“vroom”); }
}
Car c =
new Car(Car.Make.BMW,
“JF3559QT98”,
new Point(3,7));
c.Drive();
Types
Classes
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 80
29/04/2022
Types
Structs
• Similar to classes, but
– User-defined value type
– Always inherits from object
• Ideal for lightweight objects
– int, float, double, etc., are all structs
– User-defined “primitive” types
• Complex, point, rectangle, color, rational
• Multiple interface inheritance
• Same members as class
• Member access
– public, internal, private
• Instantiated with new operator
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 81
29/04/2022
public struct Point {
int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int X { get { return x; }
set { x = value; } }
public int Y { get { return y; }
set { y = value; } }
}
Point p = new Point(2,5);
p.X += 100;
int px = p.X; // px = 102
Types
Structs
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 82
29/04/2022
Types
Classes and Structs
struct SPoint { int x, y; ... }
class CPoint { int x, y; ... }
SPoint sp = new SPoint(10, 20);
CPoint cp = new CPoint(10, 20);
10
20
sp
cp
10
20
CPoint
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 83
29/04/2022
Class Struct
Reference type Value type
Can inherit from any
non-sealed reference type
No inheritance
(inherits only from System.ValueType)
Can have a destructor No destructor
Can have user-defined
parameterless constructor
No user-defined parameterless
constructor
Types
Classes and Structs: Differences
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 84
29/04/2022
Comparación entre clases y
estructuras
Clases Estructuras
Pueden definir miembros de datos,
propiedades y métodos
Pueden definir miembros de datos,
propiedades y métodos
Soportan constructores e
inicialización de miembros
Sin constructor predeterminado ni
inicialización de miembros
Soportan el método Finalize No soportan el método Finalize
Extensibles por herencia No soportan herencia
Tipo Referencia Tipo Valor
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 85
29/04/2022
Types
Classes and Structs: Static vs. Instance Members
• By default, members are per instance
– Each instance gets its own fields
– Methods apply to a specific instance
• Static members are per type
– Static methods can’t access instance data
– No this variable in static methods
• Don’t abuse static members
– They are essentially object-oriented
global data and global functions
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 86
29/04/2022
public class MyClass {
public const string version = “1.0.0”;
public const string s1 = “abc” + “def”;
public const int i3 = 1 + 2;
public const double PI_I3 = i3 * Math.PI;
public const double s = Math.Sin(Math.PI); //ERROR
...
}
Types
Classes and Structs: Constants
• A constant is a data member that is
evaluated at compile-time and is implicitly
static (per type)
– e.g. Math.PI
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 87
29/04/2022
Types
Classes and Structs: Fields
• A field is a member variable
• Holds data for a class or struct
• Can hold:
– a class instance (a reference),
– a struct instance (actual data), or
– an array of class or struct instances
(an array is actually a reference)
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 88
29/04/2022
Types
Classes and Structs: Readonly Fields
• Similar to a const, but is initialized at
run-time in its declaration or in a constructor
– Once initialized, it cannot be modified
• Differs from a constant
– Initialized at run-time (vs. compile-time)
• Don’t have to re-compile clients
– Can be static or per-instance
public class MyClass {
public static readonly double d1 = Math.Sin(Math.PI);
public readonly string s1;
public MyClass(string s) { s1 = s; } }
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 89
29/04/2022
public class Button: Control {
private string caption;
public string Caption {
get { return caption; }
set { caption = value;
Repaint(); }
}
}
Button b = new Button();
b.Caption = "OK";
String s = b.Caption;
Types
Classes and Structs: Properties
 A property is a virtual field
 Looks like a field, but is implemented with code
 Can be
read-only,
write-only,
or read/write
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 90
29/04/2022
public class ListBox: Control {
private string[] items;
public string this[int index] {
get { return items[index]; }
set { items[index] = value;
Repaint(); }
}
}
ListBox listBox = new ListBox();
listBox[0] = "hello";
Console.WriteLine(listBox[0]);
Types
Classes and Structs: Indexers
 An indexer lets an instance behave as a
virtual array
 Can be overloaded (e.g. index by int and by string)
 Can be
read-only,
write-only,
or read/write
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 91
29/04/2022
Types
Delegates
• Delegates are essentially function pointers. This is
the mechanism used to implement event in the
frameworks.
• A delegate is a reference type that defines a
method signature
• A delegate instance holds one or more methods
– Essentially an “object-oriented function pointer”
– Methods can be static or non-static
– Methods can return a value
• Provides polymorphism for individual functions
• Foundation for event handling
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 92
29/04/2022
Types
Delegates
delegate double Del(double x); // Declare
static void DemoDelegates() {
Del delInst = new Del(Math.Sin); // Instantiate
double x = delInst(1.0); // Invoke
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 93
29/04/2022
Types
Multicast Delegates
• A delegate can hold and invoke multiple
methods
– Multicast delegates must contain only methods
that return void, else there is a run-time
exception
• Each delegate has an invocation list
– Methods are invoked sequentially, in the order
added
• The += and -= operators are used to add
and remove delegates, respectively
• += and -= operators are thread-safe
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 94
29/04/2022
Types
Multicast Delegates
delegate void SomeEvent(int x, int y);
static void Foo1(int x, int y) {
Console.WriteLine("Foo1");
}
static void Foo2(int x, int y) {
Console.WriteLine("Foo2");
}
public static void Main() {
SomeEvent func = new SomeEvent(Foo1);
func += new SomeEvent(Foo2);
func(1,2); // Foo1 and Foo2 are called
func -= new SomeEvent(Foo1);
func(2,3); // Only Foo2 is called
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 95
29/04/2022
Delegates
and Interfaces
• Could always use interfaces instead of
delegates
• Interfaces are more powerful
– Multiple methods
– Inheritance
• Delegates are more elegant for event handlers
– Less code
– Can easily implement multiple event handlers on
one class/struct
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 96
29/04/2022
Contenido
• Sintaxis
• Tipos de datos y conversiones
• Variables de tipo valor
• Variables de tipo referencia
• Estructuras de control
• Métodos y parámetros
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 97
29/04/2022
Aspectos generales del CTS
• El CTS admite tanto tipos de valor como
de referencia
Tipo de referencia
Tipo
Tipo de valor
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 98
29/04/2022
Comparación de tipos de valor y de
referencia
◼ Tipos de valor:
◼ Contienen sus datos
directamente
◼ Cada una tiene su
propia copia de datos
◼ Las operaciones
sobre una no afectan
a otra
◼ Tipos de referencia:
◼ Almacenan referencias a
sus datos (conocidos como
objetos)
◼ Dos variables de referencia
pueden apuntar al mismo
objeto
◼ Las operaciones sobre una
pueden afectar a otra
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 99
29/04/2022
Comparación de tipos de valor
predefinidos y definidos por el usuario
◼ Ejemplos de tipos de
valor predefinidos:
◼ int
◼ float
◼ Ejemplos de tipos de valor
definidos por el usuario:
◼ enum
◼ struct
Del usuario
Tipos de valor
Predefinido
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 100
29/04/2022
Tipos simples
• Se identifican mediante palabras
reservadas
– int // Palabra reservada
- o -
– System.Int32
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 101
29/04/2022
Reglas y recomendaciones para
nombrar variables
• Reglas
– Use letras, el signo de
subrayado y dígitos
• Recomendaciones
– Evite poner todas las letras
en mayúsculas
– Evite empezar con un
signo de subrayado
– Evite el uso de
abreviaturas
– Use PascalCasing para
nombres con varias
palabras
diferente
Diferente
Respuesta42
42Respuesta
✓
✓

✓
Mal
_regular
Bien

✓

Msj
Mensaje
✓

Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 102
29/04/2022
Palabras clave de C#
• Las palabras clave son identificadores
reservados
• No utilice palabras clave como nombres de
variables
– Produce errores en tiempo de compilación
• Procure no usar palabras clave cambiando
mayúsculas y minúsculas
abstract, base, bool, default, if, finally
int INT; // Mal estilo
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 103
29/04/2022
Declaración de variables locales
• Se suelen declarar por tipo de dato y nombre de
variable:
• Es posible declarar múltiples variables en una
declaración:
--o--
int objetoCuenta;
int objetoCuenta, empleadoNúmero;
int objetoCuenta,
empleadoNúmero;
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 104
29/04/2022
Asignación de valores a variables
• Asignar valores a variables ya declaradas:
• Inicializar una variable cuando se declara:
• También es posible inicializar valores de
caracteres:
int empleadoNumero;
empleadoNumero = 23;
int empleadoNumero = 23;
char inicialNombre = 'J';
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 105
29/04/2022
Asignación compuesta
• Es muy habitual sumar un valor a una
variable
• Se puede usar una expresión más práctica
• Esta abreviatura es válida para todos los
operadores aritméticos:
itemCount = itemCount + 40;
itemCount += 40;
itemCount -= 24;
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 106
29/04/2022
Operadores comunes
Operadores comunes
• Operadores de igualdad
• Operadores relacionales
• Operadores condicionales
• Operador de incremento
• Operador de decremento
• Operadores aritméticos
• Operadores de asignación
Ejemplo
== !=
< > <= >= is
&& || ?:
++
- -
+ - * / %
= *= /= %= += -= <<=
>>= &= ^= |=
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 107
29/04/2022
Incremento y decremento
• Es muy habitual cambiar un valor en una unidad
• Se puede usar una expresión más práctica
• Existen dos formas de esta abreviatura
objetoCuenta += 1;
objetoCuenta -= 1;
objetoCuenta++;
objetoCuenta--;
++objetoCuenta;
--objetoCuenta;
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 108
29/04/2022
Precedencia de operadores
• Precedencia y asociatividad de
operadores
– 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
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 109
29/04/2022
Enumeraciones
• Definición de una enumeración
• Uso de una enumeración
• Visualización de una variable de enumeración
enum Color { Rojo, Verde, Azul }
Color colorPaleta = Color.Rojo;
Console.WriteLine(“{0}”, colorPaletta); // Muestra Rojo
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 110
29/04/2022
Estructuras
• Definición de una estructura
• Uso de una estructura
Employee empresaEmpleado;
empresaEmpleado.pilaNombre = "Juan";
empresaEmpleado.age = 23;
public struct Empleado
{
public string pilaNombre;
public int age;
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 111
29/04/2022
Conversión implícita de tipos de datos
• Conversión de int a long
• Las conversiones implícitas no pueden fallar
– Se puede perder precisión, pero no magnitud
using System;
class Test
{
static void Main( )
{
int intValor = 123;
long longValor = intValor;
Console.WriteLine("(long) {0} = {1}", intValor,
longValor);
}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 112
29/04/2022
Conversión explícita de tipos de datos
• Para hacer conversiones explícitas se
usa una expresión de cast (molde):
using System;
class Test
{
static void Main( )
{
long longValor = Int64.MaxValor;
int intValor = (int) longValor;
Console.WriteLine("(int) {0} = {1}", longValor,
intValor);
}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 113
29/04/2022
Contenido
• Sintaxis
• Tipos de datos y conversiones
• Variables de tipo valor
• Variables de tipo referencia
• Estructuras de control
• Métodos y parámetros
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 114
29/04/2022
Comparación de tipos valor y tipos
referencia
◼ Tipos valor
⚫ La variable
contiene el valor
directamente
⚫ Ejemplos:
char, int
42
int mol;
mol = 42;
•
string mol;
mol = “Hola";
Hola
◼ Tipos referencia
⚫ La variable contiene una
referencia al dato
⚫ El dato se almacena en un
área de memoria aparte
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 115
29/04/2022
Declaración y liberación de variables
referencia
◼ Declaración de variables referencia
coordenada c1;
c1 = new coordinate();
c1.x = 6.12;
c1.y = 4.2;
• 6.12 4.2
c1 = null;
• 6.12 4.2
◼ Liberación de variables referencia
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 116
29/04/2022
Referencias no válidas
• Si hay referencias no válidas
– No es posible acceder a miembros o
variables
• Referencias no válidas en tiempo de
compilación
– El compilador detecta el uso de referencias
no inicializadas
• Referencias no válidas en tiempo de
ejecución
– El sistema generará un error de excepción
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 117
29/04/2022
Comparación de valores y comparación
de referencias
• Comparación de tipos valor
– == and != comparan valores
• Comparación de tipos referencia
– == and != comparan las referencias, no los
valores
• 1.0 2.0
• 1.0 2.0
Diferente
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 118
29/04/2022
Referencias múltiples a un mismo objeto
• Dos referencias pueden apuntar a un mismo
objeto
– Dos 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);
•
2.3 7.6
•
c1
c2
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 119
29/04/2022
Uso de referencias como parámetros de
métodos
• Las referencias se pueden usar como
parámetros
– Si se pasan por valor, es posible cambiar el dato
referenciado
static void PassCoordinateByValue(coordinate c)
{
c.x++; c.y++;
}
loc.x = 2; loc.y = 3;
PassCoordinateByValue(loc);
Console.WriteLine(loc.x + " , " + loc.y);
2 3 3 4
•
•
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 120
29/04/2022
◆Uso de tipos referencia comunes
• Clase Exception
• Clase String
• Métodos, operadores y propiedades
comunes de String
• Comparaciones de cadenas de caracteres
• Operadores de comparación en String
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 121
29/04/2022
Clase Exception
• Exception es una clase
• Los objetos Exception se usan para lanzar
excepciones
– Para crear un objeto Exception se usa new
– Para lanzar el objeto se usa throw
• Los tipos Exception son subclases de
Exception
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 122
29/04/2022
Clase String
• Cadenas de caracteres Unicode
• Abreviatura de System.String
• Inmutable
string s = "Hola";
s[0] = 'c'; // Error al compilar
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 123
29/04/2022
Métodos, operadores y propiedades
comunes de String
• Corchetes
• Método Insert
• Propiedad Length
• Método Copy
• Método Concat
• Método Trim
• Métodos ToUpper y ToLower
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 124
29/04/2022
Comparaciones de cadenas de
caracteres
• Método Equals
– Comparación de valores
• Método Compare
– Más comparaciones
– Opción para no distinguir mayúsculas y
minúsculas
– Ordenación alfabética
• Opciones locales de Compare
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 125
29/04/2022
Operadores de comparación en String
• Los operadores == y != están
sobrecargados para cadenas
• Son equivalentes a String.Equals y
!String.Equals
string a = "Test";
string b = "Test";
if (a == b) ... // Devuelve true
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 126
29/04/2022
◆ La jerarquía de objetos
• El tipo object
• Métodos comunes
• Reflexión
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 127
29/04/2022
El tipo object
• Sinónimo de System.Object
• Clase base para todas las demás clases
Exception
SystemException
MyClass
Object
String
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 128
29/04/2022
Métodos comunes
• Métodos comunes para todos los tipos
referencia
– Método ToString
– Método Equals
– Método GetType
– Método Finalize
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 129
29/04/2022
Reflexión
• Es posible obtener información sobre el
tipo de un objeto
• Espacio de nombres System.Reflection
• El operador typeof devuelve el tipo de
un objeto
– Sólo para clases en tiempo de compilación
• Método GetType en System.Object
– Información sobre clases en tiempo de
ejecución
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 130
29/04/2022
◆ Espacios de nombres en .NET
Framework
• Espacio de nombres System.IO
• Espacio de nombres System.Xml
• Espacio de nombres System.Data
• Otros espacios de nombres útiles
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 131
29/04/2022
Espacio de nombres System.IO
• Acceso a entrada/salida del sistema de
archivos
– File, Directory
– StreamReader, StreamWriter
– FileStream
– BinaryReader, BinaryWriter
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 132
29/04/2022
Espacio de nombres System.Xml
• Compatibilidad con XML
• Estándares de XML
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 133
29/04/2022
Espacio de nombres System.Data
• System.Data.SqlClient
– SQL Server .NET Data Provider
• System.Data
– Consta básicamente de las clases que
constituyen la arquitectura ADO.NET
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 134
29/04/2022
Otros espacios de nombres útiles
• Espacio de nombres System
• Espacio de nombres System.Net
• Espacio de nombres System.Net.Sockets
• Espacio de nombres
System.Windows.Forms
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 135
29/04/2022
◆ Conversiones de datos
• Conversión de tipos valor
• Conversiones padre/hija
• El operador is
• El operador as
• Conversiones y el tipo object
• Conversiones e interfaces
• Boxing y unboxing
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 136
29/04/2022
Conversión de tipos valor
• Conversiones implícitas
• Conversiones explícitas
– Operador de cast
• Excepciones
• Clase System.Convert
– Control interno de conversiones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 137
29/04/2022
Conversiones padre/hija
• Conversión a referencia de clase padre
– Implícita o explícita
– Siempre tiene éxito
– Siempre se puede asignar a un objeto
• Conversión a referencia de clase hija
– Es necesario cast explícito
– Comprueba que la referencia es del tipo correcto
– Si no lo es, causa una excepción
InvalidCastException
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 138
29/04/2022
El operador is
• Devuelve true si es posible realizar una
conversión
Pajaro b;
if (a is Pajaro)
b = (Pajaro) a; // No hay problema
else
Console.WriteLine("No es Pájaro");
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 139
29/04/2022
El operador as
• Hace conversiones entre tipos referencia,
como cast
• En caso de error
– Devuelve null
– No causa una excepción
Pajaro b = a as Pajaro; // Convertir
if (b == null)
Console.WriteLine("No es Pájaro”);
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 140
29/04/2022
Conversiones y el tipo object
• El tipo object es la base para todas las clases
• Se puede asignar a object cualquier referencia
• Se puede asignar cualquier variable object a
cualquier referencia
– Con conversión de tipo y comprobaciones
• El tipo object y el operador is
object buey;
buey = a;
buey = (object) a;
buey = a as object;
b = (Pajaro) buey;
b = buey as Pajaro;
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 141
29/04/2022
Conversiones e interfaces
• Una interfaz sólo se puede usar para
acceder a sus propios miembros
• No es posible acceder a otros miembros y
variables de la clase a través de la interfaz
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 142
29/04/2022
Boxing y unboxing
• Sistema de tipos unificado
• Boxing
• Unboxing
• Llamadas a métodos de object en tipos
valor
int p = 123;
object box;
box = p;
• 123
123 p = (int)box;
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 143
29/04/2022
Contenido
• Sintaxis
• Tipos de datos y conversiones
• Variables de tipo valor
• Variables de tipo referencia
• Estructuras de control
• Métodos y parámetros
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 144
29/04/2022
Bloques de instrucciones
◼ Se usan llaves
para delimitar
bloques
{
// code
} {
int i;
...
{
int i;
...
}
}
{
int i;
...
}
...
{
int i;
...
}
◼ Un bloque y su
bloque padre o
pueden tener una
variable con el
mismo nombre
◼ Bloques
hermanos pueden
tener variables
con el mismo
nombre
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 145
29/04/2022
Tipos de instrucciones
Instrucciones Condicionales
Las instrucciones if y switch
Instrucciones de iteración
Las instrucciones while, do, for, y foreach
Instrucciones de salto
Las instrucciones goto, break, y continue
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 146
29/04/2022
La instrucción if
• Sintaxis:
• No hay conversión implicita de int a bool
int x;
...
if (x) ... // Debe ser if (x != 0) en C#
if (x = 0) ... // Debe ser if (x == 0) en C#
if ( expresión-booleana )
primera-instrucción-incrustada
else
segunda-instrucción-incrustada
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 147
29/04/2022
Instrucciones if en cascada
enum Palo { Treboles, Corazones, Diamantes, Picas}
Palo cartas = Palo.Corazones;
if (cartas == Palo.Treboles)
color = “Negro”;
else if (cartas == Palo.Corazones)
color = “Rojo";
else if (palo == Palo.Diamantes)
color = "Rojo";
else
color = “Negro";
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 148
29/04/2022
La instrucción switch
• Las instrucciones switch se usan en bloques de
varios casos
• Se usan instrucciones break para evitar caídas
en cascada (fall through)
switch (palo) {
case Palo.Treboles :
case Palo.Picas :
color = "Negro"; break;
case Palo.Corazones :
case Palo.Diamantes :
color = "Rojo"; break;
default:
color = "ERROR"; break;
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 149
29/04/2022
La instrucción while
• Ejecuta instrucciones en función de un valor
booleano
• Evalúa la expresión booleana al principio del
bucle
• Ejecuta las instrucciones mientras el valor
booleano sea True
int i = 0;
while (i < 10) {
Console.WriteLine(i);
i++;
}
0 1 2 3 4 5 6 7 8 9
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 150
29/04/2022
La instrucción do
• Ejecuta instrucciones en función de un valor
booleano
• Evalúa la expresión booleana al final del bucle
• Ejecuta las instrucciones mientras el valor
booleano sea True
int i = 0;
do {
Console.WriteLine(i);
i++;
} while (i < 10);
0 1 2 3 4 5 6 7 8 9
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 151
29/04/2022
La instrucción for
• La información de actualización está al principio del bucle
• Las variables de un bloque for sólo son válidas en el bloque
• Un bucle for puede iterar varios valores
for (int i = 0; i < 10; i++) {
Console.WriteLine(i);
}
0 1 2 3 4 5 6 7 8 9
for (int i = 0; i < 10; i++)
Console.WriteLine(i);
Console.WriteLine(i); // Error: i está fuera de ámbito
for (int i = 0, j = 0; ... ; i++, j++)
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 152
29/04/2022
La instrucción foreach
• Elige el tipo y el nombre de la variable de iteración
• Ejecuta instrucciones incrustadas para cada
elemento de la clase collection
ArrayList numeros = new ArrayList( );
for (int i = 0; i < 10; i++ ) {
numeros.Add(i);
}
foreach (int number in numeros) {
Console.WriteLine(numero);
}
0 1 2 3 4 5 6 7 8 9
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 153
29/04/2022
La instrucción goto
• Transfiere el flujo de control a una instrucción con
etiqueta
• Pueden dar lugar fácilmente a código “spaghetti”
de difícil interpretación
if (numero % 2 == 0) goto Par;
Console.WriteLine(“impar");
goto Fin;
Par:
Console.WriteLine(“par");
Fin:;
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 154
29/04/2022
Las instrucciones break and continue
• La instrucción break salta fuera de una iteración
• La instrucción continue salta a la siguiente
iteración
int i = 0;
while (true) {
Console.WriteLine(i);
i++;
if (i < 10)
continue;
else
break;
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 155
29/04/2022
Contenido
• Sintaxis
• Tipos de datos y conversiones
• Variables de tipo valor
• Variables de tipo referencia
• Estructuras de control
• Métodos y parámetros
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 156
29/04/2022
Métodos
• Todo código se ejecuta en un método
– Los constructores, destructores y operadores
son tipos especiales de métodos.
– Las propiedades y los indexadores se
implementan con métodos get/set
• Los métodos tienen listas de argumentos
• Los métodos contienen declaraciones
• Los métodos pueden devolver un valor.
– Solo si el return no es void
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 157
29/04/2022
Definición de métodos
• Main es un método
– Para definir métodos propios se usa la misma
sintaxis
using System;
class ExampleClass
{
static void ExampleMethod( )
{
Console.WriteLine("ExampleMethod");
}
static void Main( )
{
// ...
}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 158
29/04/2022
Llamadas a métodos
• 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 con la palabra
clave 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
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 159
29/04/2022
Uso de la instrucción return
• Return inmediato
• Return con una instrucción condicional
static void ExampleMethod( )
{
int numBeans;
//...
Console.WriteLine("Hello");
if (numBeans < 10)
return;
Console.WriteLine("World");
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 160
29/04/2022
Uso de variables locales
• Variables locales
– Se crean cuando comienza el método
– Son privadas para el método
– Se destruyen a la salida
• Variables compartidas
– Para compartir se utilizan variables de clase
• Conflictos de ámbito
– El compilador no avisa si hay conflictos entre
nombres locales y de clase
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 161
29/04/2022
Devolución de valores
• El método se debe declarar con un tipo que no sea
void
• Se añade una instrucción return con una expresión
– Fija el valor de retorno
– Se devuelve al llamador
• Los métodos que no son void deben devolver un
valor
static int DosMasDos( ) {
int a,b;
a = 2;
b = 2;
return a + b;
}
int x;
x = DosMasDos( );
Console.WriteLine(x);
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 162
29/04/2022
Declaración y llamadas a parámetros
• Declaración de parámetros
– Se ponen entre paréntesis después del nombre del
método
– Se definen el tipo y el nombre de cada parámetro
• Llamadas a métodos con parámetros
– Un valor para cada parámetro
static void MethodWithParameters(int n, string y)
{ ... }
MethodWithParameters(2, "Hola, mundo");
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 163
29/04/2022
Mecanismos de paso de parámetros
• Tres maneras de pasar parámetros
entrada Paso por valor
entrada
salida
Paso por referencia
salida Parámetros de salida
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 164
29/04/2022
Paso por valor
• Mecanismo predeterminado para el paso de
parámetros:
– Se copia el valor del parámetro
– Se puede cambiar la variable dentro del método
– No afecta al valor fuera del método
– El 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
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 165
29/04/2022
Paso por referencia
• ¿Qué son los parámetros referencia?
– Una referencia a una posición de memoria
• Uso de parámetros referencia
– 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
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 166
29/04/2022
Parámetros de salida
• ¿Qué son los parámetros de salida?
– Pasan valores hacia fuera, pero no hacia
dentro
• Uso de parámetros de salida
– Como ref, pero no se pasan valores al método
– Se usa la palabra clave out en la declaración
y las llamadas al método
static void OutDemo(out int p)
{
// ...
}
int n;
OutDemo(out n);
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 167
29/04/2022
Uso de listas de parámetros de
longitud variable
• Se usa la palabra clave params
• Se declara como tabla al final de la lista de
parámetros
• Siempre paso por valor
static long AddList(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 = AddList(63,21,84);
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 168
29/04/2022
Normas para el paso de parámetros
• Mecanismos
– El paso por valor es el más habitual
– 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
• Eficiencia
– El paso por valor suele ser el más eficaz
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 169
29/04/2022
Uso de métodos recursivos
• Un método puede hacer una llamada a sí
mismo
– Directamente
– Indirectamente
• Útil para resolver ciertos problemas
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 170
29/04/2022
Declaración de métodos sobrecargados
• Métodos que comparten un nombre en una
clase
– Se distinguen examinando la lista de parámetros
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));
}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 171
29/04/2022
Signaturas de métodos
• Las signaturas de métodos deben ser
únicas dentro de una clase
• Definición de signatura
◼ Nombre del método
◼ Tipo de parámetro
◼ Modificador
Forman la definición
de la signatura
◼ Nombre de parámetro
◼ Tipo de retorno de
método
No afectan a la
signatura
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 172
29/04/2022
Uso de métodos sobrecargados
• Conviene usar métodos sobrecargados si:
– Hay métodos similares que requieren
parámetros diferentes
– Se quiere añadir funcionalidad al código
existente
• No hay que abusar, ya que:
– Son difíciles de depurar
– Son difíciles de mantener
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 173
29/04/2022
Contenido
• Sintaxis
• Tipos de datos y conversiones
• Variables de tipo valor
• Variables de tipo referencia
• Estructuras de control
• Métodos y parámetros
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 174
29/04/2022
¿Por qué se emplean excepciones?
• El tradicional tratamiento procedural de
errores es demasiado complicado
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: ... Trat. De errores
Lógica del programa
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 175
29/04/2022
La clase Exception
◼ Las clases Exception permiten recuperar información sobre cualquier
excepción que encontremos
◼ Las propiedades de la clase base Exception permiten analizar
excepciones
– Principales propiedades: StackTrace, Message, HelpLink,
Source
IOException
Exception
OutOfMemoryException
ApplicationException
SystemException
FileNotFoundException
◼ El .NET Framework proporciona el siguiente modelo de objeto de
excepciones:
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 176
29/04/2022
Obejetos Excepción
Exception
SystemException
OutOfMemoryException
IOException
NullReferenceException
ApplicationException
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 177
29/04/2022
¿Qué es la gestión estructurada de
excepciones?
• Detecta y responde a errores mientras se ejecuta una
aplicación
• Utiliza Try…Catch…Finally para encapsular y
proteger bloques de código que podrían provocar
errores
– Cada bloque tiene uno o más controladores asociados
– Cada controlador especifica alguna forma de condición de
filtro en el tipo de excepción que controla
• Ventajas:
– Permite la separación entre la lógica y el código de
gestión de errores
– Facilita la lectura, depuración y mantenimiento del código
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 178
29/04/2022
Uso de bloques try-catch
• Solución orientada a objetos para el tratamiento
de errores
– Poner el código normal en un bloque try
– Tratar las excepciones en un bloque catch aparte
try {
Console.WriteLine("Escriba un número");
int i = int.Parse(Console.ReadLine());
}
catch (OverflowException capturada)
{
Console.WriteLine(capturada);
}
Tratamiento de errores
Lógica del programa
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 179
29/04/2022
Bloques catch múltiples
• Cada bloque catch captura una clase de excepcion
• Un bloque try puede tener un bloque catch general
• Un bloque try no puede capturar una clase 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) {…}
catch (DivideByZeroException capturada) {…}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 180
29/04/2022
La instrucción throw
• Lanza una excepción apropiada
• Asigna a la excepción un mensaje significativo
throw expression ;
if (minuto < 1 || minuto >= 60) {
throw new InvalidTimeException(minuto +
" no es un minuto válido");
// !! Not alcanzado !!
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 181
29/04/2022
La cláusula finally
• Las instrucciones de un bloque finally se
ejecutan
Monitor.Enter(x);
try {
...
}
finally {
Monitor.Exit(x);
}
Bloques catch opcionales
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 182
29/04/2022
Comprobación de desbordamiento aritmético
• Por defecto, el desbordamiento aritmético no se
comprueba
– Un comando checked activa la comprobación de
desbordamiento
checked {
int numero = int.MaxValue;
Console.WriteLine(++numero);
}
unchecked {
int numero = int.MaxValue;
Console.WriteLine(++numero);
} -2147483648
OverflowException
Se lanza un objeto excepción.
WriteLine no se ejecuta
MaxValue + 1 es negativo?
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 183
29/04/2022
Normas para el tratamiento de
excepciones
• Lanzamiento
– Evitar excepciones para casos normales o esperados
– Nunca crear ni lanzar objetos de clase Exception
– Incluir una cadena de descripción en un objeto
Exception
– Lanzar objetos de la clase más específica posible
• Captura
– Ordenar los bloques catch de lo específico a lo
general
– No permitir que salgan excepciones de Main
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 184
29/04/2022
Directrices para el uso de la gestión
estructurada de excepciones
No utilizar la gestión estructurada de excepciones para
errores que se produzcan de modo rutinario. Utilizar otros
bloques de código para abordar estos errores.
⚫ If…End If, etc.
Devolver un valor para los casos de errores habituales
⚫ Ejemplo: los métodos de lectura de E/S de archivos
no lanzan una excepción de fín de archivo
Organizar los bloques Catch desde específicos hasta
generales
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 185
29/04/2022
Tratamiento de excepciones
using System;
public class Hola
{
public static void Main(string[ ] args)
{
try{
Console.WriteLine(args[0]);
}
catch (Exception e) {
Console.WriteLine(“Excepción en
{0}", e.StackTrace);
}
}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 186
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 187
29/04/2022
Hola, mundo
using System;
class Hola
{
public static void Main()
{
Console.WriteLine("Hola, mundo");
}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 188
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 189
29/04/2022
La clase
• Una aplicación C# es una colección de
clases, estructuras y tipos
• Una clase es un conjunto de datos y métodos
• Sintaxis
• Una aplicación C# puede incluir muchos
archivos
• Una clase no puede abarcar más de un
archivo
class nombre
{
...
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 190
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 191
29/04/2022
El método Main
• Al escribir Main hay que:
– Utilizar una “M” mayúscula, como en “Main”
– Designar un Main como el punto de entrada
al programa
– Declarar Main como public static void Main
• Un Main puede pertenecer a múltiple
clases
• La aplicación termina cuando Main acaba
o ejecuta un return
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 192
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 193
29/04/2022
La sentencia using y el espacio de
nombres System
• .NET Framework ofrece muchas clases de utilidad
– Organizadas en espacios de nombres
• System es el espacio de nombres más utilizado
• Se hace referencia a clases por su espacio de
nombres
• La sentencia using
System.Console.WriteLine("Hola, mundo");
using System;
…
Console.WriteLine("Hola, mundo");
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 194
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 195
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 196
29/04/2022
La clase Console
• Permite acceder a las secuencias
estándar de entrada, salida y error
• Sólo tiene sentido para aplicaciones de
consola
– Entrada estándar: teclado
– Salida estándar: Pantalla
– Error estándar: Pantalla
• Es posible redireccionar todas las
secuencias
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 197
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 198
29/04/2022
Los métodos Write y WriteLine
• Console.Write y Console.WriteLine muestran
información en la pantalla de la consola
– WriteLine envía un fin de línea/retorno de carro
• Ambos métodos son sobrecargados
• Es posible emplear una cadena de formato y
parámetros
– Formatos de texto
– Formatos numéricos
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 199
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 200
29/04/2022
Los métodos Read y ReadLine
• Console.Read y Console.ReadLine leen
información introducida por el usuario
– Read lee el siguiente carácter
– ReadLine lee toda la línea introducida
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 201
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 202
29/04/2022
Comentarios a aplicaciones
• Los comentarios son importantes
– Una aplicación con los comentarios adecuados
permite a un desarrollador comprender perfectamente
la estructura de la aplicación
• Comentarios de una sola línea
• Comentarios de varias líneas
/* Encontrar la mayor raíz
de la ecuación cuadrática */
x = (…);
// Obtener el nombre del usuario
Console.WriteLine(“¿Cómo se llama? ");
name = Console.ReadLine( );
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 203
29/04/2022
Estructura de un programa C#
• Hola, mundo
• La clase
• El método Main
• La sentencia using y el espacio de nombres System
• Operaciones básicas de entrada/salida
– La clase Console
– Los métodos Write y WriteLine
– Los métodos Read y ReadLine
• Comentarios a aplicaciones
• Manejo de excepciones
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 204
29/04/2022
Tratamiento de excepciones
using System;
public class Hola
{
public static void Main(string[ ] args)
{
try{
Console.WriteLine(args[0]);
}
catch (Exception e) {
Console.WriteLine(“Excepción en
{0}", e.StackTrace);
}
}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 205
29/04/2022
Contenido
• Introducción al IDE de desarrollo.
• Sintaxis, tipos de datos y conversiones,
estructuras de control, métodos y manejo de
excepciones.
• Programación en capas (MVC) y aplicaciones con
conceptos de orientación a objetos (Herencia,
Polimorfismo y Lista de Objetos)
• Formularios, Controles Comunes y sus eventos.
(TextBox, Label, Button, ComboBox,
DateTimePicker, DatagridView, ListBox,
CheckBox, RadioButton, PictureBox)
• Manejo de eventos del mouse, teclado, ítems, etc.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 206
29/04/2022
Descripción general de POO
• Clases y objetos
• Uso de la encapsulación
• El lenguaje C# y la orientación a objetos
• Definición de sistemas orientados a objetos
• Derivación de clases
• Implementación de métodos
• Uso de clases selladas
• Uso de interfaces
• Uso de clases abstractas
• Lista de Objetos
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 207
29/04/2022
¿Qué es una clase?
• Para el filósofo…
– Un artefacto de clasificación humana
– Clasificamos según un comportamiento o atributos
comunes
– Acordamos descripciones y nombres de clases útiles
– Creamos vocabulario; nos comunicamos; ¡pensamos!
• Para el programador orientado a objetos…
– Una construcción sintáctica con nombre que describe
un comportamiento y atributos comunes
– Una estructura de datos que incluye datos y
funciones
¿COCHE?
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 208
29/04/2022
¿Qué es un objeto?
• Un objeto es una instancia de una clase
• Los objetos se caracterizan por:
– Identidad: Los objetos se distinguen unos de
otros
– Comportamiento: Los objetos pueden realizar
tareas
– Estado: Los objetos contienen información
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 209
29/04/2022
Comparación de clases y estructuras
• Una estructura define un valor
– Sin identidad, estado accesible, sin comportamiento
añadido
• Una clase define un objeto
– Identidad, estado inaccesible, comportamiento
añadido
struct Time class BankAccount
{ {
public int hour; ...
public int minute; ...
} }
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 210
29/04/2022
Abstracción
• La abstracción es ignorancia selectiva
– Decidir qué es importante y qué no lo es
– Concentrarse en lo importante y depender de ello
– Ignorar lo que no es importante y no depender de ello
– Usar encapsulación para forzar una abstracción
El objetivo de la abstracción es no perderse en vaguedades y crear
un nuevo nivel semántico en el que se pueda ser absolutamente
preciso.
Edsger Dijkstra
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 211
29/04/2022
Descripción general de POO
• Clases y objetos
• Uso de la encapsulación
• El lenguaje C# y la orientación a objetos
• Definición de sistemas orientados a objetos
• Derivación de clases
• Implementación de métodos
• Uso de clases selladas
• Uso de interfaces
• Uso de clases abstractas
• Lista de Objetos
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 212
29/04/2022
Combinación de datos y métodos
• Combinación de datos y métodos en una
sola cápsula
• La frontera de la cápsula crea un espacio
interior y otro exterior
Retirar( )
Ingresar( )
saldo
Retirar( )
Ingresar( )
saldo
¿CuentaBancaria ?
¿CuentaBancaria?
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 213
29/04/2022
Control de la visibilidad de acceso
• Los métodos son públicos, accesibles
desde el exterior
• Los datos son privados, accesibles sólo
desde el interior
Retirar( )
Ingresar( )
saldo
Retirar( )
Ingresar( )
saldo

¿CuentaBancaria ?
¿CuentaBancaria ?
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 214
29/04/2022
¿Por qué se encapsula?
• Porque permite el control
– El objeto se usa sólo
con los métodos
públicos
• Porque permite el cambio
– El uso del objeto no
varía si cambia el tipo
de los datos privados
Retirar( )
Ingresar( )
euros 12
Retirar( )
Ingresar( )
saldo 12,56
céntimos 56

Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 215
29/04/2022
Datos de objetos
• Los datos de objetos describen
información para objetos concretos
– Por ejemplo, cada cuenta bancaria tiene su
propio saldo. Si dos cuentas tienen el mismo
saldo, será sólo una coincidencia .
Retirar( )
Ingresar( )
saldo 12,56
prop. “Juan"
Retirar( )
Ingresar( )
saldo 12,56
prop. “Pedro"
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 216
29/04/2022
Uso de datos estáticos
• Los datos estáticos describen información
para todos los objetos de una clase
– Por ejemplo, supongamos que todas las
cuentas comparten el mismo interés. No sería
conveniente almacenar el interés en todas las
cuentas. ¿Por qué?
Retirar( )
Ingresar( )
saldo 12,56
interés 7%
Retirar( )
Ingresar( )
saldo 99,12
interés 7%
 
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 217
29/04/2022
Uso de métodos estáticos
• Los métodos estáticos acceden sólo a
datos estáticos
– Un método estático se llama en la clase, no el
objeto
Interés( )
interés 7%
Retirar( )
Ingresar( )
saldo 99,12
prop. “Pedro"
Un objeto cuenta
La clase cuenta
Las clases contienen datos
y métodos estáticos
Los objetos contienen datos
y métodos de objetos


✓
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 218
29/04/2022
Descripción general de POO
• Clases y objetos
• Uso de la encapsulación
• El lenguaje C# y la orientación a objetos
• Definición de sistemas orientados a objetos
• Derivación de clases
• Implementación de métodos
• Uso de clases selladas
• Uso de interfaces
• Uso de clases abstractas
• Lista de Objetos
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 219
29/04/2022
“Hola, mundo” de nuevo
using System;
class Hello
{
public static int Main( )
{
Console.WriteLine(“Hello, World”);
return 0;
}
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 220
29/04/2022
Definición de clases simples
• Datos y métodos juntos dentro de una clase
• Los métodos son públicos, los datos son
privados
class BankAccount
{
public void Withdraw(decimal cantidad)
{ ... }
public void Deposit(decimal cantidad)
{ ... }
private decimal balance;
private string name;
}
Métodos públicos
describen un
comportamiento
accesible
Campos privados
describen un
estado
inaccesible
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 221
29/04/2022
Creación de objetos
• Paso 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( );
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 222
29/04/2022
Instancias de nuevos objetos
• Al 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);
}
}
hora
minuto
ahora
suya ...
...
nuevo
objeto
CuentaBancaria
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 223
29/04/2022
Uso del constructor por defecto
• Características de un constructor por defecto
– Acceso público
– Mismo nombre que la clase
– No tiene tipo de retorno (ni siquiera void)
– No recibe ningún argumento
– Inicializa todos los campos a cero, false o null
• Sintaxis del constructor
class Date { public Date( ) { ... } }
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 224
29/04/2022
Sustitución del constructor por defecto
• 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;
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 225
29/04/2022
Sobrecarga de constructores
• Los constructores son métodos y pueden estar
sobrecargados
– Mismo ámbito, mismo nombre, distintos parámetros
– Permite inicializar objetos de distintas maneras
• AVISO
– Si 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) { ... }
...
}
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 226
29/04/2022
Tiempo de vida de un objeto
• Creación de objetos
– Se usa new para asignar memoria
– Se usa un constructor para inicializar un
objeto en esa memoria
• Uso de objetos
– Llamadas a métodos
• Destrucción de objetos
– Se vuelve a convertir el objeto en memoria
– Se libera la memoria
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 227
29/04/2022
Objetos y ámbito
• El 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 largo
– Destrucción no determinista
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 228
29/04/2022
Recolección de basura
• No 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 destruye
– Los convierte de nuevo en memoria binaria no
utilizada
– Normalmente lo hace cuando empieza a faltar
memoria
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 229
29/04/2022
Uso de la palabra reservada this
• La 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;
}
Si esta instrucción fuera
nombre = nombre;
¿qué ocurriría?
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 230
29/04/2022
Descripción general de POO
• Clases y objetos
• Uso de la encapsulación
• El lenguaje C# y la orientación a objetos
• Definición de sistemas orientados a objetos
• Derivación de clases
• Implementación de métodos
• Uso de clases selladas
• Uso de interfaces
• Uso de clases abstractas
• Lista de Objetos
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 231
29/04/2022
¿Qué es la herencia?
◼ La herencia especifica una relación “es un tipo de”
◼ Múltiples clases comparten los mismos atributos y
operaciones, permitiendo una eficaz reutilización del código
◼ Ejemplos:
⚫ Un cliente “es un tipo de” persona
⚫ Un empleado “es un tipo de” persona
Cliente Empleado
Persona
Clase base
Clases derivadas
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 232
29/04/2022
Herencia
• La herencia indica una relación “es un tipo de"
– La herencia es una relación entre clases
– Las nuevas clases añaden especialización a las
existentes
Músico
Violinista
Clase base
Clase derivada
Generalización
Especialización ¿Es éste un buen
ejemplo de
herencia ?
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 233
29/04/2022
Jerarquías de clases
• Las clases con relaciones de herencia
forman jerarquías de clases
Músico
???
Músico de
cuerda
Violín
???
Instrumento
musical
toca
toca
toca
Violinista
Instrumento de
cuerda
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 234
29/04/2022
Herencia sencilla y múltiple
• Herencia sencilla: derivadas de una clase
base
• Herencia múltiple: derivadas de dos o más
clases base
Instrumento de
cuerda
Violín
Instrumento
musical
Instrumento de
cuerda
Con teclas
Violín tiene una
sola clase base
directa
Instrumento de cuerda
tiene dos clases base
directas
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 235
29/04/2022
Polimorfismo
• El nombre del método reside en la clase base
• Los distintos cuerpos del método residen en
las clases derivadas
Músico de cuerda
AfinaTuInstrumento( )
Guitarrista
AfinaTuInstrumento( )
Violinista
AfinaTuInstrumento( )
Un método sin
cuerpo se llama
operación
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 236
29/04/2022
¿Qué es el polimorfismo?
• El nombre del método reside en la clase base
• Las implementaciones del método residen en
las clases derivadas
ImpuestoBase
CalcularImpuesto( )
ImpuestoProvincial
CalcularImpuesto( )
ImpuestoCiudadano
CalcularImpuesto( )
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 237
29/04/2022
Clases base abstractas
• Algunas 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 }
Guitarrista
« concrete »
Violinista
« concrete »
Se pueden crear instancias
de clases concretas
No se pueden crear instancias
de clases abstractas
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 238
29/04/2022
Interfaces
• Las interfaces contienen sólo operaciones,
no implementación
Músico de cuerda
{ abstract }
Violinista
« concrete »
Músico
« interface »
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.
Implementa las operaciones heredadas.
Se pueden crear instancias de una clase
concreta.
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 239
29/04/2022
Descripción general de POO
• Clases y objetos
• Uso de la encapsulación
• El lenguaje C# y la orientación a objetos
• Definición de sistemas orientados a objetos
• Derivación de clases
• Implementación de métodos
• Uso de clases selladas
• Uso de interfaces
• Uso de clases abstractas
• Lista de Objetos
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 240
29/04/2022
Cómo heredar de una clase
• Una clase derivada hereda de una clase
base
• Pueden heredarse propiedades, métodos,
miembros de datos, eventos y controladores
de eventos (dependiendo del ámbito)
• Palabras clave
– Inherits: hereda de una clase base
– NotInheritable: no es heredable
– MustInherit: no pueden crearse instancias de la
clase; solo puede heredarse de ella
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 241
29/04/2022
Extensión de clases base
• Sintaxis 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
{
...
}
ComentToken
« concrete »
Token
« concrete »
Clase derivada Clase base
2 puntos
Programación Orientada a Eventos Carrera de Software
Ph.D. Franklin Parrales 242
29/04/2022
Acceso a miembros de la clase base
• Los miembros heredados con protección están implícitamente
protegidos en la clase derivada
• Los miembros de una clase derivada sólo pueden acceder a sus
miembros heredados con protección
• En 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; }
} }
}

✓
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos
POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos

Contenu connexe

Tendances

Gestión del riesgo de software
Gestión del riesgo de software Gestión del riesgo de software
Gestión del riesgo de software jose_macias
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraFranklin Parrales Bravo
 
Estructura del sistema operativo windows
Estructura del sistema operativo windowsEstructura del sistema operativo windows
Estructura del sistema operativo windowsomfib123
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programaciónOver Rattlehead
 
ALGORITMOS Y PSEUDOCODIGOS
ALGORITMOS Y PSEUDOCODIGOSALGORITMOS Y PSEUDOCODIGOS
ALGORITMOS Y PSEUDOCODIGOSeliaaaramos
 
Plan de gestion de configuración de software
Plan de gestion de configuración de softwarePlan de gestion de configuración de software
Plan de gestion de configuración de softwareilianacon
 
SO Unidad 1: Introducción a los Sistemas Operativos
SO Unidad 1: Introducción a los Sistemas OperativosSO Unidad 1: Introducción a los Sistemas Operativos
SO Unidad 1: Introducción a los Sistemas OperativosFranklin Parrales Bravo
 
Gestion de riesgo software
Gestion de riesgo softwareGestion de riesgo software
Gestion de riesgo softwareHector L
 
Paradigmas programacion
Paradigmas programacionParadigmas programacion
Paradigmas programacionLuis Peralta
 
Arquitectura de los sistemas operativos
Arquitectura de los sistemas operativosArquitectura de los sistemas operativos
Arquitectura de los sistemas operativosXavier Jose
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semanticoInfomania pro
 
Ejemplo plan de desarrollo de software rup
Ejemplo plan de desarrollo de software rupEjemplo plan de desarrollo de software rup
Ejemplo plan de desarrollo de software rupXochitl Saucedo Muñoz
 
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientosIDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientosFranklin Parrales Bravo
 

Tendances (20)

Gestión del riesgo de software
Gestión del riesgo de software Gestión del riesgo de software
Gestión del riesgo de software
 
EP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestraEP Unidad02: Conceptos para el alcance, tiempo y muestra
EP Unidad02: Conceptos para el alcance, tiempo y muestra
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
2. El proceso del software
2. El proceso del software2. El proceso del software
2. El proceso del software
 
Estructura del sistema operativo windows
Estructura del sistema operativo windowsEstructura del sistema operativo windows
Estructura del sistema operativo windows
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
ALGORITMOS Y PSEUDOCODIGOS
ALGORITMOS Y PSEUDOCODIGOSALGORITMOS Y PSEUDOCODIGOS
ALGORITMOS Y PSEUDOCODIGOS
 
problemas del software
problemas del softwareproblemas del software
problemas del software
 
Fases del rup
Fases del rupFases del rup
Fases del rup
 
Arquitectura del software
Arquitectura del softwareArquitectura del software
Arquitectura del software
 
Plan de gestion de configuración de software
Plan de gestion de configuración de softwarePlan de gestion de configuración de software
Plan de gestion de configuración de software
 
SO Unidad 1: Introducción a los Sistemas Operativos
SO Unidad 1: Introducción a los Sistemas OperativosSO Unidad 1: Introducción a los Sistemas Operativos
SO Unidad 1: Introducción a los Sistemas Operativos
 
Gestion de riesgo software
Gestion de riesgo softwareGestion de riesgo software
Gestion de riesgo software
 
Paradigmas programacion
Paradigmas programacionParadigmas programacion
Paradigmas programacion
 
Modelo 4+1
Modelo 4+1Modelo 4+1
Modelo 4+1
 
Arquitectura de los sistemas operativos
Arquitectura de los sistemas operativosArquitectura de los sistemas operativos
Arquitectura de los sistemas operativos
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semantico
 
Ejemplo plan de desarrollo de software rup
Ejemplo plan de desarrollo de software rupEjemplo plan de desarrollo de software rup
Ejemplo plan de desarrollo de software rup
 
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientosIDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
IDR Unidad 1: Introducción y proceso de Ingeniería de requerimientos
 
Antecedentes MSF
Antecedentes MSFAntecedentes MSF
Antecedentes MSF
 

Similaire à POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos

Similaire à POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos (20)

3 4- Tecnol. de desarrollo de soft. IDE -Porta Ezequiel
3 4- Tecnol. de desarrollo de soft. IDE -Porta Ezequiel3 4- Tecnol. de desarrollo de soft. IDE -Porta Ezequiel
3 4- Tecnol. de desarrollo de soft. IDE -Porta Ezequiel
 
Lenguaje Borland C - Estructura y Componentes
Lenguaje Borland C - Estructura y ComponentesLenguaje Borland C - Estructura y Componentes
Lenguaje Borland C - Estructura y Componentes
 
Aprende programar-6330
Aprende programar-6330Aprende programar-6330
Aprende programar-6330
 
Aprende programar-6330
Aprende programar-6330Aprende programar-6330
Aprende programar-6330
 
IIS Unidad 3B Proceso de desarrollo de software
IIS Unidad 3B Proceso de desarrollo de softwareIIS Unidad 3B Proceso de desarrollo de software
IIS Unidad 3B Proceso de desarrollo de software
 
1057571401
10575714011057571401
1057571401
 
Cocomo
CocomoCocomo
Cocomo
 
Unidad 5
Unidad 5Unidad 5
Unidad 5
 
5 aissexposicion1grupo4
5 aissexposicion1grupo45 aissexposicion1grupo4
5 aissexposicion1grupo4
 
01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptx01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptx
 
Vinculación diseño-ódigo
Vinculación diseño-ódigoVinculación diseño-ódigo
Vinculación diseño-ódigo
 
Vinculación diseño-código
Vinculación diseño-códigoVinculación diseño-código
Vinculación diseño-código
 
Arduino (2).pdf
Arduino (2).pdfArduino (2).pdf
Arduino (2).pdf
 
Sis07 pwi programacion_web_i
Sis07 pwi programacion_web_iSis07 pwi programacion_web_i
Sis07 pwi programacion_web_i
 
Material estudio c
Material estudio cMaterial estudio c
Material estudio c
 
Tipos Datos y Operadores en Visual C# (C sharp)
Tipos Datos y Operadores en Visual C# (C sharp)Tipos Datos y Operadores en Visual C# (C sharp)
Tipos Datos y Operadores en Visual C# (C sharp)
 
Estructuras de un programa
Estructuras de un programaEstructuras de un programa
Estructuras de un programa
 
Programacion web 0
Programacion web 0Programacion web 0
Programacion web 0
 
Programacion
ProgramacionProgramacion
Programacion
 
Net capitulo I - fundamentos
Net   capitulo I - fundamentosNet   capitulo I - fundamentos
Net capitulo I - fundamentos
 

Plus de Franklin Parrales Bravo

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaFranklin Parrales Bravo
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebFranklin Parrales Bravo
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaFranklin Parrales Bravo
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosFranklin Parrales Bravo
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebFranklin Parrales Bravo
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaFranklin Parrales Bravo
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasFranklin Parrales Bravo
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosFranklin Parrales Bravo
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosFranklin Parrales Bravo
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosFranklin Parrales Bravo
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareFranklin Parrales Bravo
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software Franklin Parrales Bravo
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosFranklin Parrales Bravo
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosFranklin Parrales Bravo
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosFranklin Parrales Bravo
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosFranklin Parrales Bravo
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoFranklin Parrales Bravo
 
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4Franklin Parrales Bravo
 
RD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y RedesRD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y RedesFranklin Parrales Bravo
 

Plus de Franklin Parrales Bravo (20)

Presentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en CuencaPresentacion del congreso ETCM del 2021 en Cuenca
Presentacion del congreso ETCM del 2021 en Cuenca
 
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería WebIW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 1: Introducción a la Ingeniería Web
 
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicuaIW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 4: Web accesible, semántica y ubicua
 
IW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelosIW Unidad 3: Ingeniería Web dirigida por modelos
IW Unidad 3: Ingeniería Web dirigida por modelos
 
MOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modeladoMOD Unidad 2: Tipos de modelado
MOD Unidad 2: Tipos de modelado
 
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería WebIW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
 
AD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuidaAD Unidad4: Programación paralela y distribuida
AD Unidad4: Programación paralela y distribuida
 
AD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidasAD Unidad3: Tecnologías de aplicaciones distribuidas
AD Unidad3: Tecnologías de aplicaciones distribuidas
 
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidosAD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad2: Diseño de programas paralelos y distribuidos
 
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidosAD Unidad1: Fundamentos de sistemas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
 
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectosEP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad01: Principios básicos de la metodología de proyectos
 
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del SoftwareGCSW Unidad1: Objetos de la Gestión de Configuración del Software
GCSW Unidad1: Objetos de la Gestión de Configuración del Software
 
GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software GCSW Unidad2: Actividades de la gestión de configuración del software
GCSW Unidad2: Actividades de la gestión de configuración del software
 
POO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivosPOO Unidad 4: Persistencia de objetos y manejo de archivos
POO Unidad 4: Persistencia de objetos y manejo de archivos
 
POO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilosPOO Unidad 3: Interfaz gráfica de usuario e hilos
POO Unidad 3: Interfaz gráfica de usuario e hilos
 
POO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a ObjetosPOO Unidad 2: Programación Orientada a Objetos
POO Unidad 2: Programación Orientada a Objetos
 
POO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a ObjetosPOO Unidad 1: Introducción a la Programación Orientada a Objetos
POO Unidad 1: Introducción a la Programación Orientada a Objetos
 
RD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y EnrutamientoRD Unidad 3: IPv6, Routers y Enrutamiento
RD Unidad 3: IPv6, Routers y Enrutamiento
 
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
RD Unidad 2: Transmisión de datos. El mundo del TCP/IP y direccionamiento iPv4
 
RD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y RedesRD Unidad 1: Principios de Comunicación y Redes
RD Unidad 1: Principios de Comunicación y Redes
 

POE Unidad 2: Diseño y construcción de programas visuales y orientados a eventos

  • 1. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 1 29/04/2022 Diseño y construcción de programas visuales y orientados a eventos Unidad 2 Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para uso de los cursos de Programación Orientada a Eventos
  • 2. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 2 29/04/2022 Objetivo general de la Unidad 2 Construir programas con interfaces visuales y orientados a eventos, basados en el uso de clases provistas por un framework y creadas por el desarrollador para la interacción con el usuario final.
  • 3. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 3 29/04/2022 Contenido • Introducción al IDE de desarrollo. • Sintaxis, tipos de datos y conversiones, estructuras de control, métodos y manejo de excepciones. • Programación en capas (MVC) y aplicaciones con conceptos de orientación a objetos (Herencia, Polimorfismo y Lista de Objetos) • Formularios, Controles Comunes y sus eventos. (TextBox, Label, Button, ComboBox, DateTimePicker, DatagridView, ListBox, CheckBox, RadioButton, PictureBox) • Manejo de eventos del mouse, teclado, ítems, etc.
  • 4. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 4 29/04/2022 IDE: Visual Studio La palabra Visual hace referencia al método para crear la interfaz gráfica del usuario (GUI), en donde se colocan objetos prefabricados dentro de la pantalla. Para crear una aplicación con Visual Basic, se emplean proyectos; los cuales son una colección de archivos que generan a su vez nuevos formularios.
  • 5. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 5 29/04/2022 Entorno
  • 6. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 6 29/04/2022 Formulario El formulario es el objeto principal ubicado en la ventana del programa. Se pueden emplear tantas ventanas como sean necesarias en una aplicación, siempre y cuando no existan dos formularios con el mismo nombre. Visual Studio por defecto coloca a cada formulario el nombre de Form1, Form2 y así sucesivamente cada vez que se agreguen nuevos formularios.
  • 7. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 7 29/04/2022 Permite visualizar los proyectos, aplicaciones y formularios en forma jerárquica, de la solución que se está creando. Para acceder al explorador se da clic en el menú ver/explorador de soluciones o el ícono Desde el teclado Ctrl Alt L Explorador de soluciones
  • 8. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 8 29/04/2022 Permite visualizar los errores generado en el código. También advertencias. Para acceder a la ventana se da clic en el menú ver /resultados Desde el teclado Ctrl Alt O Ventana de resultados
  • 9. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 9 29/04/2022 Cuadro de herramientas • Contiene las herramientas agrupadas por categorías como: Todos los formularios de Windows Forms, controles comunes, contenedores, puntero, menús y barras de herramientas entre otros. • El cuadro de herramientas se visualiza a través del menú Ver/Cuadro de herramientas o el ícono de herramientas. • Desde el teclado Ctrl Alt X
  • 10. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 10 29/04/2022 Un programa en visual está formado por objetos Es cualquier control que forma parte de la aplicación y estos a su vez tienen asociado un conjunto de propiedades, métodos y eventos. Ejemplo: una caja de texto (textbox), una etiqueta (label) o un botón (button).
  • 11. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 11 29/04/2022 Son las características específicas que posee un objeto o formulario. Ejemplo color de fondo (backcolor), fuente (font) y color de letra (forecolor), imagen de fondo (backgroundimage) entre otros. Propiedades
  • 12. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 12 29/04/2022 Creando un proyecto de C# en Visual Studio • Creamos un proyecto de C# de tipo Windows Project Application • Le asignamos un nombre como solíamos hacer en proyectos de Algoritmos y Lógica de Programación • Por primera vez vamos a tener una interfaz gráfica!!
  • 13. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 13 29/04/2022 Vista principal de un proyecto de Escritorio
  • 14. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 14 29/04/2022 Contenido • Introducción al IDE de desarrollo. • Sintaxis, tipos de datos y conversiones, estructuras de control, métodos y manejo de excepciones. • Programación en capas (MVC) y aplicaciones con conceptos de orientación a objetos (Herencia, Polimorfismo y Lista de Objetos) • Formularios, Controles Comunes y sus eventos. (TextBox, Label, Button, ComboBox, DateTimePicker, DatagridView, ListBox, CheckBox, RadioButton, PictureBox) • Manejo de eventos del mouse, teclado, ítems, etc.
  • 15. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 15 29/04/2022 Contenido • Sintaxis • Tipos de datos y conversiones • Variables de tipo valor • Variables de tipo referencia • Estructuras de control • Métodos y parámetros • Manejo de excepciones
  • 16. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 16 29/04/2022 C# • Lenguaje Creado específicamente para la plataforma .NET • Estándar ECMA (Ecma-334). • Orientado a Objetos y Componentes. • Soporta todas las características de la POO: - Abstracción - Encapsulación. - Herencia. - Polimorfismo. • Sintaxis derivada de C, C++, Delphi y Java.
  • 17. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 17 29/04/2022 Arquitectura de .Net Framework . N E T F r a m e w o r k Múltiples Lenguajes VB C# C++ JScript ... Especificación de Lenguaje común (CLS) Librerías de clases extendidas ASP.NET ADO.NET Windows Forms XML Librerías de clases base Tiempo de ejecución en Lenguaje Común (CLR) Visual Studio .Net Servicios Operativos MSMQ COM+ IIS Windows
  • 18. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 18 29/04/2022 CLS - Elección del lenguaje • .NET posee un único runtime (el CLR) y un único conjunto de bibliotecas para todos los lenguajes • No hay diferencias notorias de performance entre los lenguajes provistos por Microsoft • El lenguaje a utilizar, en gral., dependerá de su experiencia previa con otros lenguajes o de gustos personales – Si conoce Java, Delphi, C++, etc. → C# – Si conoce Visual Basic o VBScript → VB.NET • Los tipos de aplicaciones .NET son INDEPENDIENTES del lenguaje que elija
  • 19. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 19 29/04/2022 Sintaxis C# • Terminación de Línea, es con un “;” int a = 1 + b; int a = 1 + b; int a = 1 + b; int a = 1 + b;
  • 20. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 20 29/04/2022 Sintaxis C# • Declaración en Bloques en llaves “{}”: class Programa{ public static void Main(string[] args) { Console.WriteLine(“Hola Mundo!"); } }
  • 21. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 21 29/04/2022 Sintaxis C# • Comentarios en el código: string nombre = “Juan”; // Comentario de una sola línea /* Comentario con mas de una línea*/ /// <summary> /// Documentación XML que puede ser consumida por otras /// herramientas para mostrar ayuda dinámica o generar /// documentación en varios formatos /// </summary> public class Matematica { /// <summary> /// Calcula la suma de dos números enteros /// </summary> /// <param name="x">El primer operando de la suma</param> /// <param name="y">El segundo operando de la suma</param> /// <returns> La suma entera de ambos operandos</returns> public int Sumar (int x, int y) {return x + y;} }
  • 22. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 22 29/04/2022 Sintaxis C# • C# es un lenguaje “case-sensitive” system.console.writeline(“HOLA”); //INCORRECTO System.Console.WriteLine(“HOLA”); //CORRECTO int a; //INCORRECTO A = 1; //INCORRECTO int a; //CORRECTO A = 1; //CORRECTO
  • 23. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 23 29/04/2022 Sintaxis C# • Declaración de variables int i; decimal d; rectangle r; Persona per;
  • 24. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 24 29/04/2022 Sintaxis C# • Inicialización de variables int i; //INCORRECTO System.Console.WriteLine(i); //INCORRECTO int i=0; //CORRECTO System.Console.WriteLine(i); //CORRECTO
  • 25. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 25 29/04/2022 Sintaxis C# • Conversión de Tipos Cuenta cta = new CtaCte(); CtaCte cc = cta; //Error: puede que cta no sea una CtaCte CtaCte cc = (CtaCte)cta; //Conversion explicita “CASTING” CtaCte cc = cta as CtaCte; //Usando el operador “as” if (cta is CtaCte) ... //Comparación con el operador “is”
  • 26. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 26 29/04/2022 Operadores Descripción C# Asignación = Adición + Sustracción - Multiplicación * División / Negación ! Módulo (Parte entera de la división) % Mayor > Menor < Mayor o Igual >= Menor o Igual <=
  • 27. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 27 29/04/2022 Operadores Lógicos Distinto != Igual == Negacion logica ! Operador logico O ll Operador logico Y && Operador C# En C# todas las evaluaciones se hacen por “cortocircuito” //Si Hacer1() es True, entonces //Si Hacer1() es False, entonces //NO se evalua Hacer2() //NO se evalua Hacer2() if (Hacer1() || Hacer2()) if (Hacer1() && Hacer2()) { { } }
  • 28. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 28 29/04/2022 Namespaces C# namespace BancoARG { namespace Gestion { public class CtaCte { } public class CajaAhorro { } } } //Referencia “full” BancoARG.Gestion.CtaCte; BancoARG.Gestion.CajaAhorro; //Referencia “corta” using BancoARG.Gestion; CtaCte cc = new CtaCte(); CajaAhorro ca = new CajaAhorro(); Los namespaces (espacios de nombre) funcionan como un método de organización de clases (tanto las que escribimos nosotros como las incluidas en .NET), agrupando en un conjunto a aquellas clases que están relacionadas lógicamente. Un namespace puede contener tanto tipos (clases) como otros namespaces, y dentro de un namespace no puede haber dos clases con el mismo nombre. El nombre completo de una clase se construye a partir de todos los namespaces que la contienen (la jerarquía se arma separándolos con “.”) + el nombre mismo de la clase.
  • 29. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 29 29/04/2022 Herencia En C# la herencia se define: class Cuenta //Clase Base { } class CtaCte : Cuenta //Clase Derivada { } En .NET solo se permite Herencia Simple
  • 30. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 30 29/04/2022 Contenido • Sintaxis • Tipos de datos y conversiones • Variables de tipo valor • Variables de tipo referencia • Estructuras de control • Métodos y parámetros • Manejo de excepciones
  • 31. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 31 29/04/2022 CTS (Common Type System) • Define un conjunto común de “tipos” de datos orientados a objetos • Todo lenguaje de programación .NET debe implementar los tipos definidos por el CTS • Todo tipo hereda directa o indirectamente del tipo System.Object • Define Tipos de VALOR y de REFERENCIA
  • 32. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 32 29/04/2022 CTS: Características • Cada tipo puede tener cero o mas miembros (campo, método, propiedad, evento). • No puede existir la herencia Múltiple. • Todo Tipo hereda directa o indirectamente del tipo System.Object • Los objetos que lanzan un tipo de excepción deben heredar (directa o indirectamente) de System.Exception • Los tipos declarados en 2 ensamblados distintos, son distintos, aunque tengan el mismo nombre.
  • 33. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 33 29/04/2022 Tipos Overview • Un programa en C# es una colección de tipos – Classes, structs, enums, interfaces, delegates • C# proporciona un conjunto de tipos predefinidos – E.g. int, byte, char, string, object, … • Puedes crear tus propios tipos. • Todos los datos y el código se definen dentro de un tipo. – No hay variables globales, ni funciones globales
  • 34. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 34 29/04/2022 Tipos Overview • Tipos contienen: – Data members • Fields, constants, arrays • Events – Function members • Methods, operators, constructors, destructors • Properties, indexers – Otros tipos • Classes, structs, enums, interfaces, delegates
  • 35. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 35 29/04/2022 Tipos Overview • Tipos pueden ser instanciados… – …y luego usados: call methods, get y set properties, etc. • Puede convertirse de un tipo a otro – Implicitamente y explicitamente • Tipos están organizados – Namespaces, files, assemblies • Hay dos categorías de tipos: valor y referencia. • Los tipos se organizan en una jerarquía.
  • 36. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 36 29/04/2022 Tipos Unified Type System • Value types – Directly contain data – Cannot be null • Reference types – Contain references to objects – May be null int i = 123; string s = "Hello world"; 123 i s "Hello world"
  • 37. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 37 29/04/2022 Los Tipos de Datos • El CLR administra dos segmentos de memoria: Stack (Pila) y Heap (Montón) • El Stack es liberado automáticamente y el Heap es administrado por el GC (Garbage Collector) • Los tipos VALOR se almacenan en el Stack • Los tipos REFERENCIA se almacenan en el Heap
  • 38. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 38 29/04/2022 Tipos de Datos por Valor Categoría Clase Descripción C# Alias Enteros Byte Un entero sin signo (8-bit) byte SByte Un entero con signo (8-bit) sbyte Int16 Un entero con signo (16-bit) short Int32 Un entero con signo (32-bit) int Int64 Un entero con signo (64-bit) long Punto Flotante Single Un número de punto flotante de simple precisión (32- bit) float Double Un número de punto flotante de doble precisión (64- bit) double Decimal Un número decimal de 96-bit decimal Lógicos Boolean Un valor booleano (true o false) bool Otros Char Un caracter Unicode (16-bit) char Object La raíz de la jerarquía de objetos object String Una cadena de caracteres unicode inmutable y de tamaño fijo string
  • 39. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 39 29/04/2022 Tipos Unified Type System • Value types – Primitivos int i; float x; – Enums enum State { Off, On } – Structs struct Point {int x,y;} • Reference types – Root object – String string – Classes class Foo: Bar, IFoo {...} – Interfaces interface IFoo: IBar {...} – Arrays string[] a = new string[10]; – Delegates delegate void Empty();
  • 40. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 40 29/04/2022 Tipos Unified Type System Value (Struct) Reference (Class) Variable holds Actual value Memory location Allocated on Stack, member Heap Nullability Always has value May be null Default value 0 null Aliasing (in a scope) No Yes Assignment means Copy data Copy reference
  • 41. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 41 29/04/2022 Tipos Unified Type System • Beneficios de value types – No heap allocation, less GC pressure – Más eficiente uso de memoria – Less reference indirection – Unified type system • No primitive/object dichotomy
  • 42. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 42 29/04/2022 Tipos Conversiones • Conversiones implícitas – Occur automatically – Guaranteed to succeed – No information (precision) loss • Explicit conversions – Require a cast – May not succeed – Information (precision) might be lost • Tanto las conversiones implícitas como las explícitas pueden ser definidas por el usuario
  • 43. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 43 29/04/2022 Tipos Conversiones int x = 123456; long y = x; // implicit short z = (short)x; // explicit double d = 1.2345678901234; float f = (float)d; // explicit long l = (long)d; // explicit
  • 44. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 44 29/04/2022 Tipos Unified Type System • Todo es un objeto – Todos los tipos finalmente heredan de object – Cualquier dato puede almacenarse, transportarse y manipularse sin trabajo adicional M em oryStream FileStream Stream Hashtable int double object
  • 45. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 45 29/04/2022 Tipos Unified Type System • Polimorfismo – La capacidad de realizar una operación en un objeto sin conocer el tipo preciso del objeto. void Poly(object o) { Console.WriteLine(o.ToString()); } Poly(42); Poly(“abcd”); Poly(12.345678901234m); Poly(new Point(23,45));
  • 46. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 46 29/04/2022 Tipos Unified Type System • Pregunta: ¿Cómo podemos tratar polimórficamente los tipos de valor y referencia? – ¿Cómo se convierte un int (tipo de valor) en un objeto (tipo de referencia)? • Respuesta: Boxing! – Only value types get boxed – Reference types do not get boxed
  • 47. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 47 29/04/2022 Conversión de tipos por Valor y Referencia • Para poder convertir tipos por valor a referencia y viceversa se utiliza una técnica conocida como: • BOXING: Convierte un tipo por valor a uno por referencia. • UNBOXING: Convierte un tipo por referencia a un tipo por valor. Tipo por Valor Tipo por Referencia Boxing Unboxing
  • 48. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 48 29/04/2022 Types Unified Type System • Boxing – Copies a value type into a reference type (object) – Each value type has corresponding “hidden” reference type – Note that a reference-type copy is made of the value type • Value types are never aliased – Value type is converted implicitly to object, a reference type • Essentially an “up cast”
  • 49. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 49 29/04/2022 Types Unified Type System • Unboxing – Inverse operation of boxing – Copies the value out of the box • Copies from reference type to value type – Requires an explicit conversion • May not succeed (like all explicit conversions) • Essentially a “down cast”
  • 50. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 50 29/04/2022 Types Unified Type System • Boxing and unboxing int i = 123; object o = i; int j = (int)o; 123 i o 123 j 123 System.Int32
  • 51. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 51 29/04/2022 Types Unified Type System • Benefits of boxing – Enables polymorphism across all types – Collection classes work with all types – Eliminates need for wrapper classes – Replaces OLE Automation's Variant • Lots of examples in .NET Framework Hashtable t = new Hashtable(); t.Add(0, "zero"); t.Add(1, "one"); t.Add(2, "two"); string s = string.Format( "Your total was {0} on {1}", total, date);
  • 52. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 52 29/04/2022 Types Unified Type System • Disadvantages of boxing – Performance cost • The need for boxing will decrease when the CLR supports generics (similar to C++ templates)
  • 53. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 53 29/04/2022 Types Predefined Types • Value – Integral types – Floating point types – decimal – bool – char • Reference – object – string
  • 54. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 54 29/04/2022 Predefined Types Value Types • All are predefined structs Signed sbyte, short, int, long Unsigned byte, ushort, uint, ulong Character char Floating point float, double, decimal Logical bool
  • 55. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 55 29/04/2022 Predefined Types Integral Types C# Type System Type Size (bytes) Signed? sbyte System.Sbyte 1 Yes short System.Int16 2 Yes int System.Int32 4 Yes long System.Int64 8 Yes byte System.Byte 1 No ushort System.UInt16 2 No uint System.UInt32 4 No ulong System.UInt64 8 No
  • 56. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 56 29/04/2022 Predefined Types Floating Point Types • Follows IEEE 754 specification • Supports ± 0, ± Infinity, NaN C# Type System Type Size (bytes) float System.Single 4 double System.Double 8
  • 57. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 57 29/04/2022 Predefined Types decimal • 128 bits • Essentially a 96 bit value scaled by a power of 10 • Decimal values represented precisely • Doesn’t support signed zeros, infinities or NaN C# Type System Type Size (bytes) decimal System.Decimal 16
  • 58. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 58 29/04/2022 Predefined Types decimal • All integer types can be implicitly converted to a decimal type • Conversions between decimal and floating types require explicit conversion due to possible loss of precision • s * m * 10e – s = 1 or –1 – 0  m  296 – -28  e  0
  • 59. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 59 29/04/2022 Predefined Types Integral Literals • Integer literals can be expressed as decimal or hexadecimal • U or u: uint or ulong • L or l: long or ulong • UL or ul: ulong 123 // Decimal 0x7B // Hexadecimal 123U // Unsigned 123ul // Unsigned long 123L // Long
  • 60. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 60 29/04/2022 Predefined Types Real Literals • F or f: float • D or d: double • M or m: decimal 123f // Float 123D // Double 123.456m // Decimal 1.23e2f // Float 12.3E1M // Decimal
  • 61. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 61 29/04/2022 Predefined Types bool • Represents logical values • Literal values are true and false • Cannot use 1 and 0 as boolean values – No standard conversion between other types and bool C# Type System Type Size (bytes) bool System.Boolean 1 (2 for arrays)
  • 62. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 62 29/04/2022 Predefined Types char • Represents a Unicode character • Literals – ‘A’ // Simple character – ‘u0041’ // Unicode – ‘x0041’ // Unsigned short hexadecimal – ‘n’ // Escape sequence character C# Type System Type Size (bytes) Char System.Char 2
  • 63. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 63 29/04/2022 Predefined Types char • Escape sequence characters (partial list) Char Meaning Value ’ Single quote 0x0027 ” Double quote 0x0022 Backslash 0x005C 0 Null 0x0000 n New line 0x000A r Carriage return 0x000D t Tab 0x0009
  • 64. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 64 29/04/2022 Predefined Types Reference Types Root type object Character string string
  • 65. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 65 29/04/2022 Predefined Types object • Root of object hierarchy • Storage (book keeping) overhead – 0 bytes for value types – 8 bytes for reference types • An actual reference (not the object) uses 4 bytes C# Type System Type Size (bytes) object System.Object 0/8 overhead
  • 66. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 66 29/04/2022 Predefined Types object Public Methods • public bool Equals(object) • protected void Finalize() • public int GetHashCode() • public System.Type GetType() • protected object MemberwiseClone() • public void Object() • public string ToString()
  • 67. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 67 29/04/2022 Predefined Types string • An immutable sequence of Unicode characters • Reference type • Special syntax for literals – string s = “I am a string”; C# Type System Type Size (bytes) String System.String 20 minimum
  • 68. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 68 29/04/2022 Predefined Types string • Normally have to use escape characters • Verbatim string literals – Most escape sequences ignored • Except for “” – Verbatim literals can be multi-line string s1= “serverfilesharefilename.cs”; string s2 = @“serverfilesharefilename.cs”;
  • 69. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 69 29/04/2022 Types User-defined Types • User-defined types Enumerations enum Arrays int[], string[] Interface interface Reference type class Value type struct Function pointer delegate
  • 70. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 70 29/04/2022 Types Enums • An enum defines a type name for a related group of symbolic constants • Choices must be known at compile-time • Strongly typed – No implicit conversions to/from int – Can be explicitly converted – Operators: +, -, ++, --, &, |, ^, ~, … • Can specify underlying type – byte, sbyte, short, ushort, int, uint, long, ulong
  • 71. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 71 29/04/2022 Types Enums enum Color: byte { Red = 1, Green = 2, Blue = 4, Black = 0, White = Red | Green | Blue } Color c = Color.Black; Console.WriteLine(c); // 0 Console.WriteLine(c.Format()); // Black
  • 72. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 72 29/04/2022 Types Enums • All enums derive from System.Enum – Provides methods to • determine underlying type • test if a value is supported • initialize from string constant • retrieve all values in enum • …
  • 73. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 73 29/04/2022 Types Arrays • Arrays allow a group of elements of a specific type to be stored in a contiguous block of memory • Arrays are reference types • Derived from System.Array • Zero-based • Can be multidimensional – Arrays know their length(s) and rank • Bounds checking
  • 74. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 74 29/04/2022 Types Arrays • Declare • Allocate • Initialize • Access and assign • Enumerate int[] primes; int[] primes = new int[9]; int[] prime = new int[] {1,2,3,5,7,11,13,17,19}; int[] prime = {1,2,3,5,7,11,13,17,19}; prime2[i] = prime[i]; foreach (int i in prime) Console.WriteLine(i);
  • 75. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 75 29/04/2022 Types Arrays • Multidimensional arrays – Rectangular •int[,] matR = new int[2,3]; • Can initialize declaratively •int[,] matR = new int[2,3] { {1,2,3}, {4,5,6} }; – Jagged • An array of arrays •int[][] matJ = new int[2][]; • Must initialize procedurally
  • 76. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 76 29/04/2022 Types Interfaces • An interface defines a contract – Includes methods, properties, indexers, events – Any class or struct implementing an interface must support all parts of the contract • Interfaces provide polymorphism – Many classes and structs may implement a particular interface • Contain no implementation – Must be implemented by a class or struct
  • 77. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 77 29/04/2022 Types Classes • User-defined reference type – Similar to C++, Java classes • Single class inheritance • Multiple interface inheritance
  • 78. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 78 29/04/2022 Types Classes • Members – Constants, fields, methods, operators, constructors, destructors – Properties, indexers, events – Static and instance members • Member access – public, protected, private, internal, protected internal • Default is private • Instantiated with new operator
  • 79. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 79 29/04/2022 public class Car : Vehicle { public enum Make { GM, Honda, BMW } Make make; string vid; Point location; Car(Make m, string vid; Point loc) { this.make = m; this.vid = vid; this.location = loc; } public void Drive() { Console.WriteLine(“vroom”); } } Car c = new Car(Car.Make.BMW, “JF3559QT98”, new Point(3,7)); c.Drive(); Types Classes
  • 80. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 80 29/04/2022 Types Structs • Similar to classes, but – User-defined value type – Always inherits from object • Ideal for lightweight objects – int, float, double, etc., are all structs – User-defined “primitive” types • Complex, point, rectangle, color, rational • Multiple interface inheritance • Same members as class • Member access – public, internal, private • Instantiated with new operator
  • 81. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 81 29/04/2022 public struct Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } public int X { get { return x; } set { x = value; } } public int Y { get { return y; } set { y = value; } } } Point p = new Point(2,5); p.X += 100; int px = p.X; // px = 102 Types Structs
  • 82. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 82 29/04/2022 Types Classes and Structs struct SPoint { int x, y; ... } class CPoint { int x, y; ... } SPoint sp = new SPoint(10, 20); CPoint cp = new CPoint(10, 20); 10 20 sp cp 10 20 CPoint
  • 83. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 83 29/04/2022 Class Struct Reference type Value type Can inherit from any non-sealed reference type No inheritance (inherits only from System.ValueType) Can have a destructor No destructor Can have user-defined parameterless constructor No user-defined parameterless constructor Types Classes and Structs: Differences
  • 84. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 84 29/04/2022 Comparación entre clases y estructuras Clases Estructuras Pueden definir miembros de datos, propiedades y métodos Pueden definir miembros de datos, propiedades y métodos Soportan constructores e inicialización de miembros Sin constructor predeterminado ni inicialización de miembros Soportan el método Finalize No soportan el método Finalize Extensibles por herencia No soportan herencia Tipo Referencia Tipo Valor
  • 85. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 85 29/04/2022 Types Classes and Structs: Static vs. Instance Members • By default, members are per instance – Each instance gets its own fields – Methods apply to a specific instance • Static members are per type – Static methods can’t access instance data – No this variable in static methods • Don’t abuse static members – They are essentially object-oriented global data and global functions
  • 86. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 86 29/04/2022 public class MyClass { public const string version = “1.0.0”; public const string s1 = “abc” + “def”; public const int i3 = 1 + 2; public const double PI_I3 = i3 * Math.PI; public const double s = Math.Sin(Math.PI); //ERROR ... } Types Classes and Structs: Constants • A constant is a data member that is evaluated at compile-time and is implicitly static (per type) – e.g. Math.PI
  • 87. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 87 29/04/2022 Types Classes and Structs: Fields • A field is a member variable • Holds data for a class or struct • Can hold: – a class instance (a reference), – a struct instance (actual data), or – an array of class or struct instances (an array is actually a reference)
  • 88. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 88 29/04/2022 Types Classes and Structs: Readonly Fields • Similar to a const, but is initialized at run-time in its declaration or in a constructor – Once initialized, it cannot be modified • Differs from a constant – Initialized at run-time (vs. compile-time) • Don’t have to re-compile clients – Can be static or per-instance public class MyClass { public static readonly double d1 = Math.Sin(Math.PI); public readonly string s1; public MyClass(string s) { s1 = s; } }
  • 89. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 89 29/04/2022 public class Button: Control { private string caption; public string Caption { get { return caption; } set { caption = value; Repaint(); } } } Button b = new Button(); b.Caption = "OK"; String s = b.Caption; Types Classes and Structs: Properties  A property is a virtual field  Looks like a field, but is implemented with code  Can be read-only, write-only, or read/write
  • 90. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 90 29/04/2022 public class ListBox: Control { private string[] items; public string this[int index] { get { return items[index]; } set { items[index] = value; Repaint(); } } } ListBox listBox = new ListBox(); listBox[0] = "hello"; Console.WriteLine(listBox[0]); Types Classes and Structs: Indexers  An indexer lets an instance behave as a virtual array  Can be overloaded (e.g. index by int and by string)  Can be read-only, write-only, or read/write
  • 91. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 91 29/04/2022 Types Delegates • Delegates are essentially function pointers. This is the mechanism used to implement event in the frameworks. • A delegate is a reference type that defines a method signature • A delegate instance holds one or more methods – Essentially an “object-oriented function pointer” – Methods can be static or non-static – Methods can return a value • Provides polymorphism for individual functions • Foundation for event handling
  • 92. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 92 29/04/2022 Types Delegates delegate double Del(double x); // Declare static void DemoDelegates() { Del delInst = new Del(Math.Sin); // Instantiate double x = delInst(1.0); // Invoke }
  • 93. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 93 29/04/2022 Types Multicast Delegates • A delegate can hold and invoke multiple methods – Multicast delegates must contain only methods that return void, else there is a run-time exception • Each delegate has an invocation list – Methods are invoked sequentially, in the order added • The += and -= operators are used to add and remove delegates, respectively • += and -= operators are thread-safe
  • 94. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 94 29/04/2022 Types Multicast Delegates delegate void SomeEvent(int x, int y); static void Foo1(int x, int y) { Console.WriteLine("Foo1"); } static void Foo2(int x, int y) { Console.WriteLine("Foo2"); } public static void Main() { SomeEvent func = new SomeEvent(Foo1); func += new SomeEvent(Foo2); func(1,2); // Foo1 and Foo2 are called func -= new SomeEvent(Foo1); func(2,3); // Only Foo2 is called }
  • 95. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 95 29/04/2022 Delegates and Interfaces • Could always use interfaces instead of delegates • Interfaces are more powerful – Multiple methods – Inheritance • Delegates are more elegant for event handlers – Less code – Can easily implement multiple event handlers on one class/struct
  • 96. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 96 29/04/2022 Contenido • Sintaxis • Tipos de datos y conversiones • Variables de tipo valor • Variables de tipo referencia • Estructuras de control • Métodos y parámetros • Manejo de excepciones
  • 97. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 97 29/04/2022 Aspectos generales del CTS • El CTS admite tanto tipos de valor como de referencia Tipo de referencia Tipo Tipo de valor
  • 98. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 98 29/04/2022 Comparación de tipos de valor y de referencia ◼ Tipos de valor: ◼ Contienen sus datos directamente ◼ Cada una tiene su propia copia de datos ◼ Las operaciones sobre una no afectan a otra ◼ Tipos de referencia: ◼ Almacenan referencias a sus datos (conocidos como objetos) ◼ Dos variables de referencia pueden apuntar al mismo objeto ◼ Las operaciones sobre una pueden afectar a otra
  • 99. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 99 29/04/2022 Comparación de tipos de valor predefinidos y definidos por el usuario ◼ Ejemplos de tipos de valor predefinidos: ◼ int ◼ float ◼ Ejemplos de tipos de valor definidos por el usuario: ◼ enum ◼ struct Del usuario Tipos de valor Predefinido
  • 100. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 100 29/04/2022 Tipos simples • Se identifican mediante palabras reservadas – int // Palabra reservada - o - – System.Int32
  • 101. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 101 29/04/2022 Reglas y recomendaciones para nombrar variables • Reglas – Use letras, el signo de subrayado y dígitos • Recomendaciones – Evite poner todas las letras en mayúsculas – Evite empezar con un signo de subrayado – Evite el uso de abreviaturas – Use PascalCasing para nombres con varias palabras diferente Diferente Respuesta42 42Respuesta ✓ ✓  ✓ Mal _regular Bien  ✓  Msj Mensaje ✓ 
  • 102. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 102 29/04/2022 Palabras clave de C# • Las palabras clave son identificadores reservados • No utilice palabras clave como nombres de variables – Produce errores en tiempo de compilación • Procure no usar palabras clave cambiando mayúsculas y minúsculas abstract, base, bool, default, if, finally int INT; // Mal estilo
  • 103. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 103 29/04/2022 Declaración de variables locales • Se suelen declarar por tipo de dato y nombre de variable: • Es posible declarar múltiples variables en una declaración: --o-- int objetoCuenta; int objetoCuenta, empleadoNúmero; int objetoCuenta, empleadoNúmero;
  • 104. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 104 29/04/2022 Asignación de valores a variables • Asignar valores a variables ya declaradas: • Inicializar una variable cuando se declara: • También es posible inicializar valores de caracteres: int empleadoNumero; empleadoNumero = 23; int empleadoNumero = 23; char inicialNombre = 'J';
  • 105. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 105 29/04/2022 Asignación compuesta • Es muy habitual sumar un valor a una variable • Se puede usar una expresión más práctica • Esta abreviatura es válida para todos los operadores aritméticos: itemCount = itemCount + 40; itemCount += 40; itemCount -= 24;
  • 106. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 106 29/04/2022 Operadores comunes Operadores comunes • Operadores de igualdad • Operadores relacionales • Operadores condicionales • Operador de incremento • Operador de decremento • Operadores aritméticos • Operadores de asignación Ejemplo == != < > <= >= is && || ?: ++ - - + - * / % = *= /= %= += -= <<= >>= &= ^= |=
  • 107. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 107 29/04/2022 Incremento y decremento • Es muy habitual cambiar un valor en una unidad • Se puede usar una expresión más práctica • Existen dos formas de esta abreviatura objetoCuenta += 1; objetoCuenta -= 1; objetoCuenta++; objetoCuenta--; ++objetoCuenta; --objetoCuenta;
  • 108. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 108 29/04/2022 Precedencia de operadores • Precedencia y asociatividad de operadores – 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
  • 109. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 109 29/04/2022 Enumeraciones • Definición de una enumeración • Uso de una enumeración • Visualización de una variable de enumeración enum Color { Rojo, Verde, Azul } Color colorPaleta = Color.Rojo; Console.WriteLine(“{0}”, colorPaletta); // Muestra Rojo
  • 110. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 110 29/04/2022 Estructuras • Definición de una estructura • Uso de una estructura Employee empresaEmpleado; empresaEmpleado.pilaNombre = "Juan"; empresaEmpleado.age = 23; public struct Empleado { public string pilaNombre; public int age; }
  • 111. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 111 29/04/2022 Conversión implícita de tipos de datos • Conversión de int a long • Las conversiones implícitas no pueden fallar – Se puede perder precisión, pero no magnitud using System; class Test { static void Main( ) { int intValor = 123; long longValor = intValor; Console.WriteLine("(long) {0} = {1}", intValor, longValor); } }
  • 112. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 112 29/04/2022 Conversión explícita de tipos de datos • Para hacer conversiones explícitas se usa una expresión de cast (molde): using System; class Test { static void Main( ) { long longValor = Int64.MaxValor; int intValor = (int) longValor; Console.WriteLine("(int) {0} = {1}", longValor, intValor); } }
  • 113. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 113 29/04/2022 Contenido • Sintaxis • Tipos de datos y conversiones • Variables de tipo valor • Variables de tipo referencia • Estructuras de control • Métodos y parámetros • Manejo de excepciones
  • 114. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 114 29/04/2022 Comparación de tipos valor y tipos referencia ◼ Tipos valor ⚫ La variable contiene el valor directamente ⚫ Ejemplos: char, int 42 int mol; mol = 42; • string mol; mol = “Hola"; Hola ◼ Tipos referencia ⚫ La variable contiene una referencia al dato ⚫ El dato se almacena en un área de memoria aparte
  • 115. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 115 29/04/2022 Declaración y liberación de variables referencia ◼ Declaración de variables referencia coordenada c1; c1 = new coordinate(); c1.x = 6.12; c1.y = 4.2; • 6.12 4.2 c1 = null; • 6.12 4.2 ◼ Liberación de variables referencia
  • 116. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 116 29/04/2022 Referencias no válidas • Si hay referencias no válidas – No es posible acceder a miembros o variables • Referencias no válidas en tiempo de compilación – El compilador detecta el uso de referencias no inicializadas • Referencias no válidas en tiempo de ejecución – El sistema generará un error de excepción
  • 117. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 117 29/04/2022 Comparación de valores y comparación de referencias • Comparación de tipos valor – == and != comparan valores • Comparación de tipos referencia – == and != comparan las referencias, no los valores • 1.0 2.0 • 1.0 2.0 Diferente
  • 118. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 118 29/04/2022 Referencias múltiples a un mismo objeto • Dos referencias pueden apuntar a un mismo objeto – Dos 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); • 2.3 7.6 • c1 c2
  • 119. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 119 29/04/2022 Uso de referencias como parámetros de métodos • Las referencias se pueden usar como parámetros – Si se pasan por valor, es posible cambiar el dato referenciado static void PassCoordinateByValue(coordinate c) { c.x++; c.y++; } loc.x = 2; loc.y = 3; PassCoordinateByValue(loc); Console.WriteLine(loc.x + " , " + loc.y); 2 3 3 4 • •
  • 120. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 120 29/04/2022 ◆Uso de tipos referencia comunes • Clase Exception • Clase String • Métodos, operadores y propiedades comunes de String • Comparaciones de cadenas de caracteres • Operadores de comparación en String
  • 121. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 121 29/04/2022 Clase Exception • Exception es una clase • Los objetos Exception se usan para lanzar excepciones – Para crear un objeto Exception se usa new – Para lanzar el objeto se usa throw • Los tipos Exception son subclases de Exception
  • 122. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 122 29/04/2022 Clase String • Cadenas de caracteres Unicode • Abreviatura de System.String • Inmutable string s = "Hola"; s[0] = 'c'; // Error al compilar
  • 123. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 123 29/04/2022 Métodos, operadores y propiedades comunes de String • Corchetes • Método Insert • Propiedad Length • Método Copy • Método Concat • Método Trim • Métodos ToUpper y ToLower
  • 124. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 124 29/04/2022 Comparaciones de cadenas de caracteres • Método Equals – Comparación de valores • Método Compare – Más comparaciones – Opción para no distinguir mayúsculas y minúsculas – Ordenación alfabética • Opciones locales de Compare
  • 125. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 125 29/04/2022 Operadores de comparación en String • Los operadores == y != están sobrecargados para cadenas • Son equivalentes a String.Equals y !String.Equals string a = "Test"; string b = "Test"; if (a == b) ... // Devuelve true
  • 126. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 126 29/04/2022 ◆ La jerarquía de objetos • El tipo object • Métodos comunes • Reflexión
  • 127. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 127 29/04/2022 El tipo object • Sinónimo de System.Object • Clase base para todas las demás clases Exception SystemException MyClass Object String
  • 128. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 128 29/04/2022 Métodos comunes • Métodos comunes para todos los tipos referencia – Método ToString – Método Equals – Método GetType – Método Finalize
  • 129. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 129 29/04/2022 Reflexión • Es posible obtener información sobre el tipo de un objeto • Espacio de nombres System.Reflection • El operador typeof devuelve el tipo de un objeto – Sólo para clases en tiempo de compilación • Método GetType en System.Object – Información sobre clases en tiempo de ejecución
  • 130. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 130 29/04/2022 ◆ Espacios de nombres en .NET Framework • Espacio de nombres System.IO • Espacio de nombres System.Xml • Espacio de nombres System.Data • Otros espacios de nombres útiles
  • 131. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 131 29/04/2022 Espacio de nombres System.IO • Acceso a entrada/salida del sistema de archivos – File, Directory – StreamReader, StreamWriter – FileStream – BinaryReader, BinaryWriter
  • 132. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 132 29/04/2022 Espacio de nombres System.Xml • Compatibilidad con XML • Estándares de XML
  • 133. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 133 29/04/2022 Espacio de nombres System.Data • System.Data.SqlClient – SQL Server .NET Data Provider • System.Data – Consta básicamente de las clases que constituyen la arquitectura ADO.NET
  • 134. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 134 29/04/2022 Otros espacios de nombres útiles • Espacio de nombres System • Espacio de nombres System.Net • Espacio de nombres System.Net.Sockets • Espacio de nombres System.Windows.Forms
  • 135. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 135 29/04/2022 ◆ Conversiones de datos • Conversión de tipos valor • Conversiones padre/hija • El operador is • El operador as • Conversiones y el tipo object • Conversiones e interfaces • Boxing y unboxing
  • 136. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 136 29/04/2022 Conversión de tipos valor • Conversiones implícitas • Conversiones explícitas – Operador de cast • Excepciones • Clase System.Convert – Control interno de conversiones
  • 137. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 137 29/04/2022 Conversiones padre/hija • Conversión a referencia de clase padre – Implícita o explícita – Siempre tiene éxito – Siempre se puede asignar a un objeto • Conversión a referencia de clase hija – Es necesario cast explícito – Comprueba que la referencia es del tipo correcto – Si no lo es, causa una excepción InvalidCastException
  • 138. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 138 29/04/2022 El operador is • Devuelve true si es posible realizar una conversión Pajaro b; if (a is Pajaro) b = (Pajaro) a; // No hay problema else Console.WriteLine("No es Pájaro");
  • 139. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 139 29/04/2022 El operador as • Hace conversiones entre tipos referencia, como cast • En caso de error – Devuelve null – No causa una excepción Pajaro b = a as Pajaro; // Convertir if (b == null) Console.WriteLine("No es Pájaro”);
  • 140. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 140 29/04/2022 Conversiones y el tipo object • El tipo object es la base para todas las clases • Se puede asignar a object cualquier referencia • Se puede asignar cualquier variable object a cualquier referencia – Con conversión de tipo y comprobaciones • El tipo object y el operador is object buey; buey = a; buey = (object) a; buey = a as object; b = (Pajaro) buey; b = buey as Pajaro;
  • 141. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 141 29/04/2022 Conversiones e interfaces • Una interfaz sólo se puede usar para acceder a sus propios miembros • No es posible acceder a otros miembros y variables de la clase a través de la interfaz
  • 142. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 142 29/04/2022 Boxing y unboxing • Sistema de tipos unificado • Boxing • Unboxing • Llamadas a métodos de object en tipos valor int p = 123; object box; box = p; • 123 123 p = (int)box;
  • 143. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 143 29/04/2022 Contenido • Sintaxis • Tipos de datos y conversiones • Variables de tipo valor • Variables de tipo referencia • Estructuras de control • Métodos y parámetros • Manejo de excepciones
  • 144. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 144 29/04/2022 Bloques de instrucciones ◼ Se usan llaves para delimitar bloques { // code } { int i; ... { int i; ... } } { int i; ... } ... { int i; ... } ◼ Un bloque y su bloque padre o pueden tener una variable con el mismo nombre ◼ Bloques hermanos pueden tener variables con el mismo nombre
  • 145. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 145 29/04/2022 Tipos de instrucciones Instrucciones Condicionales Las instrucciones if y switch Instrucciones de iteración Las instrucciones while, do, for, y foreach Instrucciones de salto Las instrucciones goto, break, y continue
  • 146. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 146 29/04/2022 La instrucción if • Sintaxis: • No hay conversión implicita de int a bool int x; ... if (x) ... // Debe ser if (x != 0) en C# if (x = 0) ... // Debe ser if (x == 0) en C# if ( expresión-booleana ) primera-instrucción-incrustada else segunda-instrucción-incrustada
  • 147. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 147 29/04/2022 Instrucciones if en cascada enum Palo { Treboles, Corazones, Diamantes, Picas} Palo cartas = Palo.Corazones; if (cartas == Palo.Treboles) color = “Negro”; else if (cartas == Palo.Corazones) color = “Rojo"; else if (palo == Palo.Diamantes) color = "Rojo"; else color = “Negro";
  • 148. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 148 29/04/2022 La instrucción switch • Las instrucciones switch se usan en bloques de varios casos • Se usan instrucciones break para evitar caídas en cascada (fall through) switch (palo) { case Palo.Treboles : case Palo.Picas : color = "Negro"; break; case Palo.Corazones : case Palo.Diamantes : color = "Rojo"; break; default: color = "ERROR"; break; }
  • 149. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 149 29/04/2022 La instrucción while • Ejecuta instrucciones en función de un valor booleano • Evalúa la expresión booleana al principio del bucle • Ejecuta las instrucciones mientras el valor booleano sea True int i = 0; while (i < 10) { Console.WriteLine(i); i++; } 0 1 2 3 4 5 6 7 8 9
  • 150. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 150 29/04/2022 La instrucción do • Ejecuta instrucciones en función de un valor booleano • Evalúa la expresión booleana al final del bucle • Ejecuta las instrucciones mientras el valor booleano sea True int i = 0; do { Console.WriteLine(i); i++; } while (i < 10); 0 1 2 3 4 5 6 7 8 9
  • 151. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 151 29/04/2022 La instrucción for • La información de actualización está al principio del bucle • Las variables de un bloque for sólo son válidas en el bloque • Un bucle for puede iterar varios valores for (int i = 0; i < 10; i++) { Console.WriteLine(i); } 0 1 2 3 4 5 6 7 8 9 for (int i = 0; i < 10; i++) Console.WriteLine(i); Console.WriteLine(i); // Error: i está fuera de ámbito for (int i = 0, j = 0; ... ; i++, j++)
  • 152. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 152 29/04/2022 La instrucción foreach • Elige el tipo y el nombre de la variable de iteración • Ejecuta instrucciones incrustadas para cada elemento de la clase collection ArrayList numeros = new ArrayList( ); for (int i = 0; i < 10; i++ ) { numeros.Add(i); } foreach (int number in numeros) { Console.WriteLine(numero); } 0 1 2 3 4 5 6 7 8 9
  • 153. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 153 29/04/2022 La instrucción goto • Transfiere el flujo de control a una instrucción con etiqueta • Pueden dar lugar fácilmente a código “spaghetti” de difícil interpretación if (numero % 2 == 0) goto Par; Console.WriteLine(“impar"); goto Fin; Par: Console.WriteLine(“par"); Fin:;
  • 154. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 154 29/04/2022 Las instrucciones break and continue • La instrucción break salta fuera de una iteración • La instrucción continue salta a la siguiente iteración int i = 0; while (true) { Console.WriteLine(i); i++; if (i < 10) continue; else break; }
  • 155. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 155 29/04/2022 Contenido • Sintaxis • Tipos de datos y conversiones • Variables de tipo valor • Variables de tipo referencia • Estructuras de control • Métodos y parámetros • Manejo de excepciones
  • 156. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 156 29/04/2022 Métodos • Todo código se ejecuta en un método – Los constructores, destructores y operadores son tipos especiales de métodos. – Las propiedades y los indexadores se implementan con métodos get/set • Los métodos tienen listas de argumentos • Los métodos contienen declaraciones • Los métodos pueden devolver un valor. – Solo si el return no es void
  • 157. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 157 29/04/2022 Definición de métodos • Main es un método – Para definir métodos propios se usa la misma sintaxis using System; class ExampleClass { static void ExampleMethod( ) { Console.WriteLine("ExampleMethod"); } static void Main( ) { // ... } }
  • 158. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 158 29/04/2022 Llamadas a métodos • 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 con la palabra clave 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
  • 159. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 159 29/04/2022 Uso de la instrucción return • Return inmediato • Return con una instrucción condicional static void ExampleMethod( ) { int numBeans; //... Console.WriteLine("Hello"); if (numBeans < 10) return; Console.WriteLine("World"); }
  • 160. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 160 29/04/2022 Uso de variables locales • Variables locales – Se crean cuando comienza el método – Son privadas para el método – Se destruyen a la salida • Variables compartidas – Para compartir se utilizan variables de clase • Conflictos de ámbito – El compilador no avisa si hay conflictos entre nombres locales y de clase
  • 161. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 161 29/04/2022 Devolución de valores • El método se debe declarar con un tipo que no sea void • Se añade una instrucción return con una expresión – Fija el valor de retorno – Se devuelve al llamador • Los métodos que no son void deben devolver un valor static int DosMasDos( ) { int a,b; a = 2; b = 2; return a + b; } int x; x = DosMasDos( ); Console.WriteLine(x);
  • 162. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 162 29/04/2022 Declaración y llamadas a parámetros • Declaración de parámetros – Se ponen entre paréntesis después del nombre del método – Se definen el tipo y el nombre de cada parámetro • Llamadas a métodos con parámetros – Un valor para cada parámetro static void MethodWithParameters(int n, string y) { ... } MethodWithParameters(2, "Hola, mundo");
  • 163. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 163 29/04/2022 Mecanismos de paso de parámetros • Tres maneras de pasar parámetros entrada Paso por valor entrada salida Paso por referencia salida Parámetros de salida
  • 164. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 164 29/04/2022 Paso por valor • Mecanismo predeterminado para el paso de parámetros: – Se copia el valor del parámetro – Se puede cambiar la variable dentro del método – No afecta al valor fuera del método – El 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 }
  • 165. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 165 29/04/2022 Paso por referencia • ¿Qué son los parámetros referencia? – Una referencia a una posición de memoria • Uso de parámetros referencia – 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
  • 166. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 166 29/04/2022 Parámetros de salida • ¿Qué son los parámetros de salida? – Pasan valores hacia fuera, pero no hacia dentro • Uso de parámetros de salida – Como ref, pero no se pasan valores al método – Se usa la palabra clave out en la declaración y las llamadas al método static void OutDemo(out int p) { // ... } int n; OutDemo(out n);
  • 167. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 167 29/04/2022 Uso de listas de parámetros de longitud variable • Se usa la palabra clave params • Se declara como tabla al final de la lista de parámetros • Siempre paso por valor static long AddList(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 = AddList(63,21,84); }
  • 168. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 168 29/04/2022 Normas para el paso de parámetros • Mecanismos – El paso por valor es el más habitual – 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 • Eficiencia – El paso por valor suele ser el más eficaz
  • 169. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 169 29/04/2022 Uso de métodos recursivos • Un método puede hacer una llamada a sí mismo – Directamente – Indirectamente • Útil para resolver ciertos problemas
  • 170. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 170 29/04/2022 Declaración de métodos sobrecargados • Métodos que comparten un nombre en una clase – Se distinguen examinando la lista de parámetros 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)); } }
  • 171. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 171 29/04/2022 Signaturas de métodos • Las signaturas de métodos deben ser únicas dentro de una clase • Definición de signatura ◼ Nombre del método ◼ Tipo de parámetro ◼ Modificador Forman la definición de la signatura ◼ Nombre de parámetro ◼ Tipo de retorno de método No afectan a la signatura
  • 172. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 172 29/04/2022 Uso de métodos sobrecargados • Conviene usar métodos sobrecargados si: – Hay métodos similares que requieren parámetros diferentes – Se quiere añadir funcionalidad al código existente • No hay que abusar, ya que: – Son difíciles de depurar – Son difíciles de mantener
  • 173. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 173 29/04/2022 Contenido • Sintaxis • Tipos de datos y conversiones • Variables de tipo valor • Variables de tipo referencia • Estructuras de control • Métodos y parámetros • Manejo de excepciones
  • 174. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 174 29/04/2022 ¿Por qué se emplean excepciones? • El tradicional tratamiento procedural de errores es demasiado complicado 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: ... Trat. De errores Lógica del programa
  • 175. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 175 29/04/2022 La clase Exception ◼ Las clases Exception permiten recuperar información sobre cualquier excepción que encontremos ◼ Las propiedades de la clase base Exception permiten analizar excepciones – Principales propiedades: StackTrace, Message, HelpLink, Source IOException Exception OutOfMemoryException ApplicationException SystemException FileNotFoundException ◼ El .NET Framework proporciona el siguiente modelo de objeto de excepciones:
  • 176. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 176 29/04/2022 Obejetos Excepción Exception SystemException OutOfMemoryException IOException NullReferenceException ApplicationException
  • 177. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 177 29/04/2022 ¿Qué es la gestión estructurada de excepciones? • Detecta y responde a errores mientras se ejecuta una aplicación • Utiliza Try…Catch…Finally para encapsular y proteger bloques de código que podrían provocar errores – Cada bloque tiene uno o más controladores asociados – Cada controlador especifica alguna forma de condición de filtro en el tipo de excepción que controla • Ventajas: – Permite la separación entre la lógica y el código de gestión de errores – Facilita la lectura, depuración y mantenimiento del código
  • 178. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 178 29/04/2022 Uso de bloques try-catch • Solución orientada a objetos para el tratamiento de errores – Poner el código normal en un bloque try – Tratar las excepciones en un bloque catch aparte try { Console.WriteLine("Escriba un número"); int i = int.Parse(Console.ReadLine()); } catch (OverflowException capturada) { Console.WriteLine(capturada); } Tratamiento de errores Lógica del programa
  • 179. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 179 29/04/2022 Bloques catch múltiples • Cada bloque catch captura una clase de excepcion • Un bloque try puede tener un bloque catch general • Un bloque try no puede capturar una clase 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) {…} catch (DivideByZeroException capturada) {…}
  • 180. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 180 29/04/2022 La instrucción throw • Lanza una excepción apropiada • Asigna a la excepción un mensaje significativo throw expression ; if (minuto < 1 || minuto >= 60) { throw new InvalidTimeException(minuto + " no es un minuto válido"); // !! Not alcanzado !! }
  • 181. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 181 29/04/2022 La cláusula finally • Las instrucciones de un bloque finally se ejecutan Monitor.Enter(x); try { ... } finally { Monitor.Exit(x); } Bloques catch opcionales
  • 182. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 182 29/04/2022 Comprobación de desbordamiento aritmético • Por defecto, el desbordamiento aritmético no se comprueba – Un comando checked activa la comprobación de desbordamiento checked { int numero = int.MaxValue; Console.WriteLine(++numero); } unchecked { int numero = int.MaxValue; Console.WriteLine(++numero); } -2147483648 OverflowException Se lanza un objeto excepción. WriteLine no se ejecuta MaxValue + 1 es negativo?
  • 183. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 183 29/04/2022 Normas para el tratamiento de excepciones • Lanzamiento – Evitar excepciones para casos normales o esperados – Nunca crear ni lanzar objetos de clase Exception – Incluir una cadena de descripción en un objeto Exception – Lanzar objetos de la clase más específica posible • Captura – Ordenar los bloques catch de lo específico a lo general – No permitir que salgan excepciones de Main
  • 184. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 184 29/04/2022 Directrices para el uso de la gestión estructurada de excepciones No utilizar la gestión estructurada de excepciones para errores que se produzcan de modo rutinario. Utilizar otros bloques de código para abordar estos errores. ⚫ If…End If, etc. Devolver un valor para los casos de errores habituales ⚫ Ejemplo: los métodos de lectura de E/S de archivos no lanzan una excepción de fín de archivo Organizar los bloques Catch desde específicos hasta generales
  • 185. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 185 29/04/2022 Tratamiento de excepciones using System; public class Hola { public static void Main(string[ ] args) { try{ Console.WriteLine(args[0]); } catch (Exception e) { Console.WriteLine(“Excepción en {0}", e.StackTrace); } } }
  • 186. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 186 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 187. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 187 29/04/2022 Hola, mundo using System; class Hola { public static void Main() { Console.WriteLine("Hola, mundo"); } }
  • 188. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 188 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 189. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 189 29/04/2022 La clase • Una aplicación C# es una colección de clases, estructuras y tipos • Una clase es un conjunto de datos y métodos • Sintaxis • Una aplicación C# puede incluir muchos archivos • Una clase no puede abarcar más de un archivo class nombre { ... }
  • 190. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 190 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 191. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 191 29/04/2022 El método Main • Al escribir Main hay que: – Utilizar una “M” mayúscula, como en “Main” – Designar un Main como el punto de entrada al programa – Declarar Main como public static void Main • Un Main puede pertenecer a múltiple clases • La aplicación termina cuando Main acaba o ejecuta un return
  • 192. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 192 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 193. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 193 29/04/2022 La sentencia using y el espacio de nombres System • .NET Framework ofrece muchas clases de utilidad – Organizadas en espacios de nombres • System es el espacio de nombres más utilizado • Se hace referencia a clases por su espacio de nombres • La sentencia using System.Console.WriteLine("Hola, mundo"); using System; … Console.WriteLine("Hola, mundo");
  • 194. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 194 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 195. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 195 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 196. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 196 29/04/2022 La clase Console • Permite acceder a las secuencias estándar de entrada, salida y error • Sólo tiene sentido para aplicaciones de consola – Entrada estándar: teclado – Salida estándar: Pantalla – Error estándar: Pantalla • Es posible redireccionar todas las secuencias
  • 197. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 197 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 198. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 198 29/04/2022 Los métodos Write y WriteLine • Console.Write y Console.WriteLine muestran información en la pantalla de la consola – WriteLine envía un fin de línea/retorno de carro • Ambos métodos son sobrecargados • Es posible emplear una cadena de formato y parámetros – Formatos de texto – Formatos numéricos
  • 199. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 199 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 200. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 200 29/04/2022 Los métodos Read y ReadLine • Console.Read y Console.ReadLine leen información introducida por el usuario – Read lee el siguiente carácter – ReadLine lee toda la línea introducida
  • 201. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 201 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 202. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 202 29/04/2022 Comentarios a aplicaciones • Los comentarios son importantes – Una aplicación con los comentarios adecuados permite a un desarrollador comprender perfectamente la estructura de la aplicación • Comentarios de una sola línea • Comentarios de varias líneas /* Encontrar la mayor raíz de la ecuación cuadrática */ x = (…); // Obtener el nombre del usuario Console.WriteLine(“¿Cómo se llama? "); name = Console.ReadLine( );
  • 203. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 203 29/04/2022 Estructura de un programa C# • Hola, mundo • La clase • El método Main • La sentencia using y el espacio de nombres System • Operaciones básicas de entrada/salida – La clase Console – Los métodos Write y WriteLine – Los métodos Read y ReadLine • Comentarios a aplicaciones • Manejo de excepciones
  • 204. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 204 29/04/2022 Tratamiento de excepciones using System; public class Hola { public static void Main(string[ ] args) { try{ Console.WriteLine(args[0]); } catch (Exception e) { Console.WriteLine(“Excepción en {0}", e.StackTrace); } } }
  • 205. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 205 29/04/2022 Contenido • Introducción al IDE de desarrollo. • Sintaxis, tipos de datos y conversiones, estructuras de control, métodos y manejo de excepciones. • Programación en capas (MVC) y aplicaciones con conceptos de orientación a objetos (Herencia, Polimorfismo y Lista de Objetos) • Formularios, Controles Comunes y sus eventos. (TextBox, Label, Button, ComboBox, DateTimePicker, DatagridView, ListBox, CheckBox, RadioButton, PictureBox) • Manejo de eventos del mouse, teclado, ítems, etc.
  • 206. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 206 29/04/2022 Descripción general de POO • Clases y objetos • Uso de la encapsulación • El lenguaje C# y la orientación a objetos • Definición de sistemas orientados a objetos • Derivación de clases • Implementación de métodos • Uso de clases selladas • Uso de interfaces • Uso de clases abstractas • Lista de Objetos
  • 207. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 207 29/04/2022 ¿Qué es una clase? • Para el filósofo… – Un artefacto de clasificación humana – Clasificamos según un comportamiento o atributos comunes – Acordamos descripciones y nombres de clases útiles – Creamos vocabulario; nos comunicamos; ¡pensamos! • Para el programador orientado a objetos… – Una construcción sintáctica con nombre que describe un comportamiento y atributos comunes – Una estructura de datos que incluye datos y funciones ¿COCHE?
  • 208. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 208 29/04/2022 ¿Qué es un objeto? • Un objeto es una instancia de una clase • Los objetos se caracterizan por: – Identidad: Los objetos se distinguen unos de otros – Comportamiento: Los objetos pueden realizar tareas – Estado: Los objetos contienen información
  • 209. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 209 29/04/2022 Comparación de clases y estructuras • Una estructura define un valor – Sin identidad, estado accesible, sin comportamiento añadido • Una clase define un objeto – Identidad, estado inaccesible, comportamiento añadido struct Time class BankAccount { { public int hour; ... public int minute; ... } }
  • 210. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 210 29/04/2022 Abstracción • La abstracción es ignorancia selectiva – Decidir qué es importante y qué no lo es – Concentrarse en lo importante y depender de ello – Ignorar lo que no es importante y no depender de ello – Usar encapsulación para forzar una abstracción El objetivo de la abstracción es no perderse en vaguedades y crear un nuevo nivel semántico en el que se pueda ser absolutamente preciso. Edsger Dijkstra
  • 211. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 211 29/04/2022 Descripción general de POO • Clases y objetos • Uso de la encapsulación • El lenguaje C# y la orientación a objetos • Definición de sistemas orientados a objetos • Derivación de clases • Implementación de métodos • Uso de clases selladas • Uso de interfaces • Uso de clases abstractas • Lista de Objetos
  • 212. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 212 29/04/2022 Combinación de datos y métodos • Combinación de datos y métodos en una sola cápsula • La frontera de la cápsula crea un espacio interior y otro exterior Retirar( ) Ingresar( ) saldo Retirar( ) Ingresar( ) saldo ¿CuentaBancaria ? ¿CuentaBancaria?
  • 213. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 213 29/04/2022 Control de la visibilidad de acceso • Los métodos son públicos, accesibles desde el exterior • Los datos son privados, accesibles sólo desde el interior Retirar( ) Ingresar( ) saldo Retirar( ) Ingresar( ) saldo  ¿CuentaBancaria ? ¿CuentaBancaria ?
  • 214. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 214 29/04/2022 ¿Por qué se encapsula? • Porque permite el control – El objeto se usa sólo con los métodos públicos • Porque permite el cambio – El uso del objeto no varía si cambia el tipo de los datos privados Retirar( ) Ingresar( ) euros 12 Retirar( ) Ingresar( ) saldo 12,56 céntimos 56 
  • 215. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 215 29/04/2022 Datos de objetos • Los datos de objetos describen información para objetos concretos – Por ejemplo, cada cuenta bancaria tiene su propio saldo. Si dos cuentas tienen el mismo saldo, será sólo una coincidencia . Retirar( ) Ingresar( ) saldo 12,56 prop. “Juan" Retirar( ) Ingresar( ) saldo 12,56 prop. “Pedro"
  • 216. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 216 29/04/2022 Uso de datos estáticos • Los datos estáticos describen información para todos los objetos de una clase – Por ejemplo, supongamos que todas las cuentas comparten el mismo interés. No sería conveniente almacenar el interés en todas las cuentas. ¿Por qué? Retirar( ) Ingresar( ) saldo 12,56 interés 7% Retirar( ) Ingresar( ) saldo 99,12 interés 7%  
  • 217. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 217 29/04/2022 Uso de métodos estáticos • Los métodos estáticos acceden sólo a datos estáticos – Un método estático se llama en la clase, no el objeto Interés( ) interés 7% Retirar( ) Ingresar( ) saldo 99,12 prop. “Pedro" Un objeto cuenta La clase cuenta Las clases contienen datos y métodos estáticos Los objetos contienen datos y métodos de objetos   ✓
  • 218. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 218 29/04/2022 Descripción general de POO • Clases y objetos • Uso de la encapsulación • El lenguaje C# y la orientación a objetos • Definición de sistemas orientados a objetos • Derivación de clases • Implementación de métodos • Uso de clases selladas • Uso de interfaces • Uso de clases abstractas • Lista de Objetos
  • 219. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 219 29/04/2022 “Hola, mundo” de nuevo using System; class Hello { public static int Main( ) { Console.WriteLine(“Hello, World”); return 0; } }
  • 220. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 220 29/04/2022 Definición de clases simples • Datos y métodos juntos dentro de una clase • Los métodos son públicos, los datos son privados class BankAccount { public void Withdraw(decimal cantidad) { ... } public void Deposit(decimal cantidad) { ... } private decimal balance; private string name; } Métodos públicos describen un comportamiento accesible Campos privados describen un estado inaccesible
  • 221. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 221 29/04/2022 Creación de objetos • Paso 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( );
  • 222. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 222 29/04/2022 Instancias de nuevos objetos • Al 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); } } hora minuto ahora suya ... ... nuevo objeto CuentaBancaria
  • 223. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 223 29/04/2022 Uso del constructor por defecto • Características de un constructor por defecto – Acceso público – Mismo nombre que la clase – No tiene tipo de retorno (ni siquiera void) – No recibe ningún argumento – Inicializa todos los campos a cero, false o null • Sintaxis del constructor class Date { public Date( ) { ... } }
  • 224. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 224 29/04/2022 Sustitución del constructor por defecto • 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; }
  • 225. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 225 29/04/2022 Sobrecarga de constructores • Los constructores son métodos y pueden estar sobrecargados – Mismo ámbito, mismo nombre, distintos parámetros – Permite inicializar objetos de distintas maneras • AVISO – Si 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) { ... } ... }
  • 226. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 226 29/04/2022 Tiempo de vida de un objeto • Creación de objetos – Se usa new para asignar memoria – Se usa un constructor para inicializar un objeto en esa memoria • Uso de objetos – Llamadas a métodos • Destrucción de objetos – Se vuelve a convertir el objeto en memoria – Se libera la memoria
  • 227. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 227 29/04/2022 Objetos y ámbito • El 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 largo – Destrucción no determinista
  • 228. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 228 29/04/2022 Recolección de basura • No 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 destruye – Los convierte de nuevo en memoria binaria no utilizada – Normalmente lo hace cuando empieza a faltar memoria
  • 229. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 229 29/04/2022 Uso de la palabra reservada this • La 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; } Si esta instrucción fuera nombre = nombre; ¿qué ocurriría?
  • 230. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 230 29/04/2022 Descripción general de POO • Clases y objetos • Uso de la encapsulación • El lenguaje C# y la orientación a objetos • Definición de sistemas orientados a objetos • Derivación de clases • Implementación de métodos • Uso de clases selladas • Uso de interfaces • Uso de clases abstractas • Lista de Objetos
  • 231. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 231 29/04/2022 ¿Qué es la herencia? ◼ La herencia especifica una relación “es un tipo de” ◼ Múltiples clases comparten los mismos atributos y operaciones, permitiendo una eficaz reutilización del código ◼ Ejemplos: ⚫ Un cliente “es un tipo de” persona ⚫ Un empleado “es un tipo de” persona Cliente Empleado Persona Clase base Clases derivadas
  • 232. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 232 29/04/2022 Herencia • La herencia indica una relación “es un tipo de" – La herencia es una relación entre clases – Las nuevas clases añaden especialización a las existentes Músico Violinista Clase base Clase derivada Generalización Especialización ¿Es éste un buen ejemplo de herencia ?
  • 233. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 233 29/04/2022 Jerarquías de clases • Las clases con relaciones de herencia forman jerarquías de clases Músico ??? Músico de cuerda Violín ??? Instrumento musical toca toca toca Violinista Instrumento de cuerda
  • 234. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 234 29/04/2022 Herencia sencilla y múltiple • Herencia sencilla: derivadas de una clase base • Herencia múltiple: derivadas de dos o más clases base Instrumento de cuerda Violín Instrumento musical Instrumento de cuerda Con teclas Violín tiene una sola clase base directa Instrumento de cuerda tiene dos clases base directas
  • 235. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 235 29/04/2022 Polimorfismo • El nombre del método reside en la clase base • Los distintos cuerpos del método residen en las clases derivadas Músico de cuerda AfinaTuInstrumento( ) Guitarrista AfinaTuInstrumento( ) Violinista AfinaTuInstrumento( ) Un método sin cuerpo se llama operación
  • 236. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 236 29/04/2022 ¿Qué es el polimorfismo? • El nombre del método reside en la clase base • Las implementaciones del método residen en las clases derivadas ImpuestoBase CalcularImpuesto( ) ImpuestoProvincial CalcularImpuesto( ) ImpuestoCiudadano CalcularImpuesto( )
  • 237. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 237 29/04/2022 Clases base abstractas • Algunas 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 } Guitarrista « concrete » Violinista « concrete » Se pueden crear instancias de clases concretas No se pueden crear instancias de clases abstractas
  • 238. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 238 29/04/2022 Interfaces • Las interfaces contienen sólo operaciones, no implementación Músico de cuerda { abstract } Violinista « concrete » Músico « interface » 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. Implementa las operaciones heredadas. Se pueden crear instancias de una clase concreta.
  • 239. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 239 29/04/2022 Descripción general de POO • Clases y objetos • Uso de la encapsulación • El lenguaje C# y la orientación a objetos • Definición de sistemas orientados a objetos • Derivación de clases • Implementación de métodos • Uso de clases selladas • Uso de interfaces • Uso de clases abstractas • Lista de Objetos
  • 240. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 240 29/04/2022 Cómo heredar de una clase • Una clase derivada hereda de una clase base • Pueden heredarse propiedades, métodos, miembros de datos, eventos y controladores de eventos (dependiendo del ámbito) • Palabras clave – Inherits: hereda de una clase base – NotInheritable: no es heredable – MustInherit: no pueden crearse instancias de la clase; solo puede heredarse de ella
  • 241. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 241 29/04/2022 Extensión de clases base • Sintaxis 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 { ... } ComentToken « concrete » Token « concrete » Clase derivada Clase base 2 puntos
  • 242. Programación Orientada a Eventos Carrera de Software Ph.D. Franklin Parrales 242 29/04/2022 Acceso a miembros de la clase base • Los miembros heredados con protección están implícitamente protegidos en la clase derivada • Los miembros de una clase derivada sólo pueden acceder a sus miembros heredados con protección • En 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; } } } }  ✓