capÍtulos de progra… · los objetos son los elementos principales de construcción. la...
TRANSCRIPT
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 1
CAPÍTULOS1.- INTRODUCCIÓN AL PARADIGMA ORIENTADO
A OBJETOS4.- CLASES Y OBJETOS
2
1
2
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 2
3
Preguntas detonadoras
�¿Qué es una clase?�¿Qué es un objeto?�¿Representa lo mismo una clase que un objeto?�Diversos objetos creados a partir de la misma clase, ¿son
iguales?�¿Qué significa el término instancia?�¿Cómo se logra que un objeto almacene datos y también
realice acciones?�¿Qué es un atributo, propiedad y método?�¿Cuál es la diferencia entre atributo y propiedad?�¿Cómo se diseña el modelo de una aplicación orientada a
objetos?
� Microsoft Visual Studio (programación en C# .Net)
� Nclass (software para el diseño de clases)
� WizFlow (software para diseñar diagramas de flujo)
� Enlaces de descarga en:� http://www.itnuevolaredo.edu.mx/Takeyas/Materias/POO/descargas.htm
4
Descarga de utilerías y herramientas
3
4
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 3
5
Programación Orientada a Objetos
� POO es un conjunto de técnicas que puedenutilizarse para desarrollar programaseficientemente.
� Los objetos son los elementos principales deconstrucción.
� La Orientación a Objetos (OO) es el estilodominante de programación, descripción ymodelado de hoy en dia.
6
La POO es …
“Un método de implementación en el que losprogramas se organizan como coleccionescooperativas de objetos, cada uno de los cualesrepresenta una instancia de alguna clase y cuyasclases son todas miembros de una jerarquía declases unidas mediante relaciones”
Grady Booch
5
6
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 4
7
Programación Orientada a Objetos
8
Objetos en el mundo real
LavadoraTelevisión
Perro
Persona Factura
7
8
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 5
9
�Los objetos poseen características quelos distinguen entre sí.
�Los objetos tienen acciones asociadasa ellos.
Podemos darnoscuenta que…
10
Ejemplo: PERRO� Características:
� Nombre: “FIDO”
� Raza: “Chihuahua”
� Color: “Café”
� ….etc…
� Acciones:
� Ladrar [“Guau Guau”]
� Comer [“Chomp Chomp”]
� Dormir [“Zzzzzzzz”]
� …etc…
9
10
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 6
11
Todos los objetos tienen Estado, Comportamiento e Identidad
ESTADO COMPORTAMIENTO IDENTIDAD
Valor de suscaracterísticas(Atributos)
Acciones quepuede realizar(Métodos)
Pertenecea una clasey tiene unnombreúnico
12
AbstracciónLa abstracción se centra en las características esenciales de algún objeto, en relación a laperspectiva del observador.
11
12
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 7
13
Encapsulamiento
� Permite incluir en una sola entidadinformación y operaciones que controlan dichainformación.
� Permite:
� Componentes públicos [Accesibles, Visibles].
� Componentes privados [No accesibles, Ocultos].
� Restricción de accesos indebidos.
14
Clase
� Es una descripción de lascaracterísticas y acciones para un tipode objetos.
� Una clase NO es un objeto. Es solouna plantilla, plano, molde odefinición para crear objetos.
13
14
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 8
15
Clase
� Contiene todas las características comunes de ese conjunto de objetos
� Clase = Modelo = Plantilla = Esquema = Descripción de la anatomía de los objetos.
� A partir de una clase se pueden crear muchosobjetos independientes con las mismascaracterísticas.
16
Objeto
� Unidad que combina datos y funciones.� Datos = Atributos = Características
� Funciones = Métodos = Procedimientos =Acciones
� Un objeto es creado a partir de una clase.
� Los datos y funciones están Encapsulados.
� Posee un nombre único (identificador).
� Un objeto es del tipo de una clase
� “Un objeto es la instancia de una clase”
� Un objeto es un ejemplar específico creado con la estructura de una clase.
15
16
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 9
17
Instancia� Es la creación o manifestación concreta de un
objeto a partir de su clase
18
Clases y Objetos� “FIDO” es UN “PERRO”
� “FIDO” es del TIPO “PERRO”
� “FIDO” es un OBJETO
� “PERRO” es la CLASE de “FIDO”
� “CHESTER” es OTRO “PERRO”
� “CHESTER” también es del TIPO “PERRO”
� “CHESTER” es otro OBJETO
� “PERRO” también es la clase de “CHESTER”
17
18
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 10
Clases y objetos
� Una clase es básicamente un plano para un tipo dedatos personalizado.
� Cuando se define una clase, se utiliza cargándolaen la memoria.
� Una clase que se ha cargado en la memoria sedenomina objeto o instancia.
� Se crea una instancia de una clase utilizando lapalabra clave de C# new
19
Clases en UML� Cada clase se representa en un rectángulo con tres
compartimentos:
� Nombre
� Atributos (datos)
� Métodos y propiedades
(acciones)
20
NombreDeLaClase
Aquí se escriben las características
Aquí se escriben las acciones
19
20
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 11
21
Dentro de la clase…
� Se pueden declarar variables, propiedades,métodos, delegados, eventos, etc.
� Cada elemento puede tener un modificador deacceso.
� Un modificador de acceso especifica quienes estánautorizados a “ver” ese elemento.
� Si no se especifica ningún modificador de acceso,se asume que se trata de un elemento “private”.
22
Modificadores de acceso
� publicAccesible a todos los elementos
� privateAccesible solo a esa misma clase
� protectedAccesible solo a la misma clase y métodos de sus clasesderivadas. No accesible desde el exterior.
� internal
Accesible solo a ese ensamblado
� protected internalAccesible desde el mismo ensamblado, la misma clase y métodos de sus clases derivadas
21
22
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 12
23
Modificadores de acceso
Modificador de acceso
Clase donde se declaró
Subclase
(Mismo assembly)
Subclase
(Distinto
Assembly)
Externamente
(Mismo
Assembly)
Externamente
(Distinto
Assembly)
private SI NO NO NO NO
internal SI SI NO SI NO
protected SI SI SI NO NO
protected internal
SI SI SI SI NO
public SI SI SI SI SI
Accesible desde …
Atributos
� Representan los datos de los objetos
� Son controlados a través de la declaración de variables
� Es importante identificar el tipo de dato
� Se debe seleccionar sólo aquellos atributos necesarios para el modelo planteado (abstracción)
24
23
24
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 13
25
Atributos o campos
�Un atributo o campo es un dato común atodos los objetos de una determinada clase.
�Las variables declaradas dentro de una claseson ejemplos de atributos o campos
Ejemplo: Atributos de un estudiante
26
�Atributos:� claveMatrícula: “A-233”
� nombre: “Bruno López Takeyas”
� grado: 3
� grupo: ‘A’
� promedio: 87.4
string claveMatricula;
string nombre;
int grado;
char grupo;
float promedio;
25
26
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 14
27
Tipos de datos más comunes enC#
� Numérico� Entero (int)� Real (float, double)
� Alfanumérico� Caracter (char)
� Cadena (string)
� Lógico� Booleano (bool)
� Calendario� Fecha y hora (DateTime)
Tipos de datos en C#
28
27
28
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 15
Tipos de datos enteros
29
30
Tipo de Dato
Tamaño(bytes)
Valor más pequeño Valor más grande
Sbyte 1 -128 127
byte 1 0 255
Char 2 0 65, 535
Int16 ó short
2 -32, 768 32, 767
UInt16 ó ushort
2 0 65, 535
int ó Int32 4 -2, 147, 483, 648 2, 147, 483, 647
uint 4 0 4, 294, 967, 295
Int64 ó long
8 -9, 223, 372, 036, 854, 775, 808 9, 223, 372, 036, 854, 775, 807
UInt64 ó ulong
8 0 18,446,744,073,709,551,615
float 4 -3.402823E+38 3.402823E+38
double 8 -1.79769313486232E+308 1.79769313486232E+308
decimal 16 -79,228,162,514,264,337,593,543,950,335 79,228,162,514,264,337,593,543,950,335
29
30
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 16
Identificadores� Pueden iniciar con una letra o _
� Evitar caracteres especiales como +, -, &
� Puede tener mayúsculas y minúsculas; sin embargo, edad no es lo mismo que Edad
� Puede ser de cualquier longitud; p. ejem.
� Edad_alumno, Sueldo_empleado
31
� http://www.itnuevolaredo.edu.mx/Takeyas/Ap
untes/POO/Apuntes/02.-
%20NomenclaturaComponentesProyecto.pdf
32
Nomenclatura sugerida para identificar los componentes de un proyecto
31
32
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 17
33
Ejemplo: Variables con modificadores de acceso
class MiClase
{
//Si no se indica, es private
int _intNumero;
private int _intNumero1;
public int intNumero2;
protected int intNumero3 = 99;
internal int intNumero4;
protected internal int intNumero5;
}
Representación de modificadores de acceso en C# y UML
34
Modificador de acceso
Codificación enC#
Representaciónen UML
Privado private -Público public +
Protegido protected #Interno internal ~
Protegido interno protected internal #
33
34
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 18
Métodos� Son las acciones que realizan los objetos y definen su
comportamiento
35
�Atributos:� claveMatrícula: “A-233”
� nombre: “Bruno López Takeyas”
� grado: 3
� grupo: ‘A’
� promedio: 87.4
�Acciones:� Leer()
� Investigar()
void Leer()
void Investigar()
Ejemplo de una clase
36
35
36
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 19
Ejemplo de una clase
37
class CuentaBancaria
{
// Declaración de los atributos
public string strNombreCliente;
public DateTime dtmFechaDeInversion;
private double _dblSaldo;
// Definción de los métodos
public int CalcularDiasDeInversion() {
// Aquí se escribe el código de este método
}
private double ConsultarSaldo() {
// Aquí se escribe el código de este método
}
public void Depositar(double dblCantidad, DateTime dtmFecha) {
// Aquí se escribe el código de este método
}
public bool OtorgarBono() {
// Aquí se escribe el código de este método
}
}
38
Crear objetos:Instanciación� Una vez creada la clase, ya es posible “consumirla”
mediante la instanciación.
� La instanciación es el proceso de crear objetos a partir de una clase.
� Ejemplo en dos pasos:ClaseA miobjetoA;
miobjetoA = new ClaseA();
� Ejemplo en un paso:
ClaseA miobjetoA = new ClaseA();
1. Definir el tipo de “miObjetoA”
2. Adquirir memoria sin inicializar para el nuevo objeto usando new.
3. Ejecutar el constructor para inicializar la memoria y convertirla en un objeto usable
37
38
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 20
Objetos en UML� En UML un objeto se representa como un rectángulo
con un nombre subrayado
39
miPersona miAutomóvil miCuentaBancaria
Los objetos no se crean automáticamente cuando se declaran
40
Accediendo a los miembros de los objetos
Asignación:
miobjetoA . Numero2 = 50;
Lectura:
miOtraVariable = miobjetoA . Numero2;
Nombre
del objetoSelección Miembro
39
40
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 21
41
Propiedades
� Son mecanismos para acceder a los valores (variables) que poseen losobjetos.
� Algunos autores las consideran sinónimos de los datos, sin embargo nosiempre lo son (solamente en el caso de las propiedadesautoimplementadas).
� Se pueden implementar:� Declarando la variable como public
� No sería posible especificarla como Solo-Lectura o Solo-Escritura
� No se puede implementar código adicional asociado a la Lectura o Escritura de lavariable.
� Declarando un método de acceso a la variable� Empobrece la legibilidad del código. Puede crear confusión.
� Utilizando accesadores get{ } y set { } para las propiedades� Recomendado en C#
42
Implementando propiedadescon accesadores get, set
class Persona{
private int _intEdad;public int Edad{
get{
return _intEdad;}set{
_intEdad = value;}
}}
class Programa
{
static void Main()
{
Persona unaPersona = new
Persona();
unaPersona.Edad = 25;
System.Console.WriteLine
(unaPersona.Edad);
}
}
(Manera recomendada)
41
42
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 22
43
Ejemplo de clase con propiedades
44
Codificación de la clase y sus propiedades
class Empleado
{
// Declaración de los atributos privados
private string _strNombre;
private int _intEdad;
private double _dblSueldo;
// Propiedad pública de lectura y escritura del nombre
public string Nombre
{
get
{
return _strNombre;
}
set
{
_strNombre = value;
}
}
// Propiedad pública de solo escritura para la edad
public int Edad
{
set
{
_intEdad = value;
}
}
// Propiedad pública de solo lectura para el sueldo
public double Sueldo
{
get
{
return _dblSueldo;
}
}
}
43
44
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 23
45
Propiedades autoimplementadas
La propiedad autoimplementada debe tener los descriptores de acceso get y set; es decir, no puede ser de solo lectura o solo
escritura
46
Codificación de propiedades autoimplementadas
class Empleado
{
// Propiedades autoimplementadas
public string Nombre
{
get;
set;
}
public int Edad
{
get;
set;
}
public double Sueldo
{
get;
set;
}
}
45
46
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 24
Ejercicio resuelto 1Definir una clase para manejar los artículos de unsupermercado cuyos datos son:
� Clave numérica
� Descripción
� Precio
� Cantidad en existencia
Defina los atributos y propiedades de acuerdo a los datosdel artículo, declare y cree un objeto, modifique eimprima sus valores.
47
Análisisa) Investigación preliminarInvestigar los tipos de datos necesarios para administrar laclave, descripción, precio y cantidad en existencia de unartículo que vende un supermercado.
b) Definición del problema� Diseñar una clase que tenga como atributos privados la
clave numérica, descripción, precio y cantidad enexistencia de un artículo de un supermercado.
� Declarar y crear un objeto de dicha clase.� Solicitar al usuario que teclee el valor de cada atributo del
objeto.� Una vez capturados todos los datos del artículo, se deben
imprimir para su verificación.
48
47
48
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 25
Análisis (cont.)c) Datos de entrada� Clave numérica del artículo (atributo:_intClaveNumerica, propiedad: ClaveNumerica) :entero
� Descripción del artículo (atributo: _strDescripcion,propiedad: Descripcion) : cadena
� Precio del artículo (atributo: _dblPrecio, propiedad:Precio) : real
� Cantidad en existencia del artículo (atributo:_dblCantidadEnExistencia, propiedad:CantidadEnExistencia) : real
d) Información de salida� Los mismos datos definidos en la entrada
49
Análisis (cont.)
e) Variables auxiliares
� Clase que define los datos de un artículo que vende el supermercado (Articulo)
� Objeto de dicha clase (miArticulo : Articulo)
50
49
50
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 26
Diseño (diagrama de clase)
51
Implementación (codificación de la
clase)
52
class Articulo
{
// Atributos privados
private int _intClaveNumerica;
private string _strDescripcion;
private double _dblPrecio;
private double _dblCantidadEnExistencia;
// Propiedades públicas
public int ClaveNumerica
{
get { return _intClaveNumerica; }
set { _intClaveNumerica = value; }
}
public string Descripcion
{
get { return _strDescripcion; }
set { _strDescripcion = value; }
}
public double Precio
{
get { return _dblPrecio; }
set { _dblPrecio = value; }
}
public double CantidadEnExistencia
{
get { return _dblCantidadEnExistencia; }
set { _dblCantidadEnExistencia = value; }
}
}
51
52
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 27
Implementación (codificación del método
principal)
53
static void Main(string[] args){
// Declaración y creación de un objetoArticulo miArticulo = new Articulo();
Console.Write("Teclee la clave del artículo:");miArticulo.ClaveNumerica = int.Parse(Console.ReadLine());
Console.Write("Teclee la descripción del artículo: ");miArticulo.Descripcion = Console.ReadLine();
Console.Write("Teclee el precio del artículo: ");miArticulo.Precio = double.Parse(Console.ReadLine());
Console.Write("Teclee la cantidad en existencia: ");miArticulo.CantidadEnExistencia = double.Parse(Console.ReadLine());
Console.WriteLine("Clave numérica = " + miArticulo.ClaveNumerica);Console.WriteLine("Descripción = " + miArticulo.Descripcion);Console.WriteLine("Precio = " + miArticulo.Precio);Console.WriteLine("Cantidad en existencia = " + miArticulo.CantidadEnExistencia);Console.ReadKey();
}
Ejercicio resuelto 2
Diseñe una clase para convertir una temperatura degrados farenheit a grados centígrados. La clase debetener un atributo que almacene la temperatura en gradosfarenheit, una propiedad de solo escritura para modificarsu valor y un método que haga la conversión. Declare ycree un objeto al que le introduzca el valor de latemperatura en grados farenheit y calcule, devuelva eimprima la conversión. Investigue la fórmulacorrespondiente.
54
53
54
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 28
Análisisa) Investigación preliminarInvestigar la fórmula para convertir una temperatura de grados Farenheita grados centígrados. La fórmula es:
b) Definición del problema� Diseñar una clase que tenga como atributo privado la temperatura en
grados farenheit con su respectiva propiedad de sólo escritura. Dicha clase debe contener un método (función) que haga la conversión a grados centígrados y devuelva el resultado.
� Declarar y crear un objeto de dicha clase.� Capturar la temperatura en grados farenheit e introducirla al objeto
correspondiente.� Ejecutar el método de conversión que se ubica dentro del objeto para
calcular la temperatura en grados centígrados y devolver el resultado.� Recibir el valor devuelto por el método para imprimir el resultado.
55
Análisis (cont.)c) Datos de entrada
� Temperatura en grados farenheit (atributo: _dblGradosFarenheit, propiedad: GradosFarenheit) : real
d) Información de salida
� Temperatura en grados centígrados (dblGradosCentigrados: real)
56
55
56
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 29
Análisis (cont.)
e) Variables auxiliares
� Clase que controla la temperatura en grados farenheit y laconvierte a grados centígrados(TemperaturaGradosFarenheit)
� Objeto de dicha clase (miTemperaturaGradosFarenheit :TemperaturaGradosFarenheit)
57
Diseño (diagrama de clase)
58
57
58
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 30
Diseño (diagrama de flujo del
método)
59
Nombre dela clase
Tipo de datodel valordevuelto
Nombre delmétodo
Implementación (codificación de la
clase)
60
class TemperaturaGradosFarenheit{
// Atributo privadoprivate double _dblGradosFarenheit;
// Propiedad pública de solo escriturapublic double GradosFarenheit{
set { _dblGradosFarenheit = value; }}
public double ConvertirAGradosCentigrados(){
return (5 * (_dblGradosFarenheit - 32) / 9);}
}
59
60
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 31
Implementación (codificación del método
principal)
61
static void Main(string[] args)
{
// Declaración y creación de un objeto
TemperaturaGradosFarenheit miTemperaturaGradosFarenheit = new
TemperaturaGradosFarenheit();
// Captura la temperatura en °F
Console.Write("Teclee la temperatura en grados farenheit: ");
miTemperaturaGradosFarenheit.GradosFarenheit =
double.Parse(Console.ReadLine());
// Invoca el método para hacer la conversión e imprime el
resultado
Console.Write("La temperatura en °C = " +
miTemperaturaGradosFarenheit.ConvertirAGradosCentigrados().ToStrin
g("N2"));
Console.ReadKey();
}
62
Software para diagramas de clases�NClass es software para el diseño de
diagramas de clases.
�Puede descargarse de manera gratuita en:
http://nclass.sourceforge.net
61
62
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 32
63
¿Cómo exportar un diagrama de NClass?
64
Software para diagramas de flujo�WizFlow es software para el diseño de
diagramas de flujo.
63
64
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 33
65
¿Cómo exportar un diagrama de WizFlow?
� No se deben capturar datos calculables
� Los datos calculables NO deben ser atributos
� Una vez creado el objeto, primero se deben introducir sus valores y después ejecutar sus métodos
� No se recomienda capturar ni imprimir datos desde un método ubicado dentro de una clase
66
Consejos al diseñar clases y utilizar objetos
65
66
Fundamentos de Programación
Ing. Bruno López Takeyas, M.C.http://www.itnuevolaredo.edu.mx/Takeyas 34
Otros títulos del autor
http://www.itnuevolaredo.edu.mx/Takeyas/Libro
Bruno López [email protected]
67