Академический Документы
Профессиональный Документы
Культура Документы
LP2 2008-
2008-1 Diapositiva 1 LP2 2008-
2008-1 Diapositiva 2
LP2 2008-
2008-1 Diapositiva 3 LP2 2008-
2008-1 Diapositiva 4
¿Qué son las Clases? Principios de la POO
• Las clases deben ser implementadas • Encapsulamiento
de forma tal que los objetos que de
ellas se creen siempre tengan un – Al mantener juntos datos y comportamiento
estado consistente • Ocultamiento
Objeto de la
• Pueden encapsular:
clase Cadena. – Al restringir el acceso de otros objetos a sus datos.
– Datos (datos
(datos miembros)
Acceso indirecto, por sus métodos.
– Métodos (funciones miembros)
– Otros tipos de datos (tipos
Valor=“Hola” • Herencia
miembros) Long=2
• Polimorfismo
Inconsistente:
La longitud no
coincide con el
valor.
LP2 2008-
2008-1 Diapositiva 5 LP2 2008-
2008-1 Diapositiva 6
– La especificació
especificación del tipo de acceso y el tipo de acceso por defecto. }
void Imprimir() {
– La declaració
declaración de constructor y destructor. cout << "Nombre: " << nombre <<
", Edad: " << edad << endl;
endl;
– Las auto-
auto-referencia y la referencia a la base. }
– La especificació
especificación de miembros fuera de su clase. };
LP2 2008-
2008-1 Diapositiva 7 LP2 2008-
2008-1 Diapositiva 8
Ejemplo en Java Ejemplo en C#
class Persona { using System;
System;
String nombre; int edad; class Persona {
public Persona(String n, int edad) { String nombre; int edad;
nombre = n; this.edad = edad; public Persona(String n, int edad) {
} nombre = n; this.edad = edad;
public void finalize()
finalize() { }
System.out.println("Destructor:
System.out.println("Destructor: " + nombre); ~Persona()
~Persona() {
} Console.WriteLine("Destructor
Console.WriteLine("Destructor de: " + nombre);
public void Imprimir(){ }
System.out.println("Nombre:
System.out.println("Nombre: " + nombre + ", Edad: " + edad); public void Imprimir() {
} Console.WriteLine("Nombre:
Console.WriteLine("Nombre: " + nombre + ", Edad: " + edad); }
} }
class PruebaDePersona { class Principal {
public static void main(String[]
main(String[] args)
args) { public static void Main()
Main() {
Persona p = new Persona("Jose
Persona("Jose",
", 30); p.Imprimir();
p.Imprimir(); Persona p = new Persona("Jose
Persona("Jose",
", 30); p.Imprimir();
p.Imprimir();
Persona q = new Persona("Pedro", 40); q.Imprimir();
q.Imprimir(); Persona q = new Persona("Pedro", 40); q.Imprimir();
q.Imprimir();
}} }
}
LP2 2008-
2008-1 Diapositiva 9 LP2 2008-
2008-1 Diapositiva 10
• Modificadores: • Modificadores:
• C++: static,
static, virtual, inline,
inline, const,
const, “= 0”
0”
• C++: const,
const, static
• Java: [mod. Acceso], final, static,
static, abstract,
abstract, synchronized
• Java: [mod. Acceso], final, static
• C#:
C#: [mod. Acceso], const,const, readonly,
readonly, static,
static, virtual, override
• C#:
C#: [mod. Acceso], const,
const, readonly,
readonly, static
• Paso de pará
parámetros:
• Inicializació
Inicialización automá
automática: • C++: Por valor, por puntero, por referencia
• C++: Solo para tipos definidos por el programador. • Java: Primitivos por valor, objetos por referencia
• Java y C#:
C#: Siempre que no se inicialice en la misma decl.
decl. • C#:
C#: Por valor, ref,
ref, out, params
LP2 2008-
2008-1 Diapositiva 11 LP2 2008-
2008-1 Diapositiva 12
Ámbitos de Declaración Ámbitos de Declaración
• Definen espacios donde es posible declarar • En C++: De clase, de función o método, de bloque,
elementos de un programa (clases, datos, métodos, namespace.
etc.). • En Java: De clase, de método, paquete.
• Permiten organizar los elementos de un programa • En C#: De clase, de método y namespace.
definiendo:
– Espacios de nombres
– La visibilidad y por tanto, los accesos
LP2 2008-
2008-1 Diapositiva 13 LP2 2008-
2008-1 Diapositiva 14
LP2 2008-
2008-1 Diapositiva 15 LP2 2008-
2008-1 Diapositiva 16
Modificadores de Acceso Constructores
• Los ámbitos pueden anidarse. Algunos ámbitos hijos • Tipos:
puede tener un modificador de acceso, el que – De instancia.
afecta a todos sus elementos. – Está
Estáticos:
• Java: class MiClase { static { ... } ... }
• C#:
C#: class MiClase { static MiClase(
MiClase( ) { ...} ... }
Desde un ctor.
ctor. está
estático solo se puede acceder a miembros
Accesibles desde fuera
está
estáticos.
del paquete “Figuras”
package Figuras;
public class Circulo { public int dato1; ... } • C#:
C#: Permite llamar un ctor.
ctor. desde otro:
class Cuadrado {public
{public int dato2; ... } class A { A(int a) { ... } A( ) : base(10) { ... } ... }
Accesibles solo en
el paquete “Figuras”
LP2 2008-
2008-1 Diapositiva 17 LP2 2008-
2008-1 Diapositiva 18
Destructores
• Tipos de finalizació
finalización:
– Determinista: C++ => Destructor
– No-
No-determinista: Java, C# => Finalizador
• No se puede determinar cuando se destruye un objeto.
• Uso de un recolector de basura. Arreglos, Propiedades e
•
•
Finalizadores:
Finalizadores: Solo acciones no crí
Acciones crí
críticas: Mé
críticas.
Método llamado explí
explícitamente. Indizadores
• Sintaxis:
– Java: class A { protected void finalize(
finalize( ) { ... } ... }
– C#:
C#: class A { ~A(
~A( ) { ... } ... }
LP2 2008-
2008-1 Diapositiva 19 LP2 2008-
2008-1 Diapositiva 20
Arreglos Arreglos
• Java: • Java:
• Son clases especiales. – int [ ] arreglo; arreglo = new int [10]; arreglo[2] = 4;
• Únicamente unidimensionales. – int [ ] arreglo = {3,6,4};
• Los multidimensionales se manejan como arreglos de arreglos. – int [ ][ ] aa = new int[5][
int[5][ ]; aa[0]
aa[0] = new int [15]; ...
• Clase Arrays.
Arrays. – int [ ][ ] aa = new int[5][10];
int[5][10]; aa[2][3]
aa[2][3] = 100;
• C#:
C#: – for(int i = 0; i < aa.length;
aa.length; i++)
i++)
• Son clases especiales. for(int j = 0; j < aa[i].
aa[i].length
length;; i++) aa[i][j] ... }
i++) { ... aa[i][j]
• Unidimensionales y multidimensionales.
• El flujo de control foreach trabaja con arreglos.
• Clase Array.
Array.
LP2 2008-
2008-1 Diapositiva 21 LP2 2008-
2008-1 Diapositiva 22
Arreglos Propiedades
• Se maneja como un dato miembro público.
• Al obtener/asignar se llama a un método de
obtención/establecimiento.
• C#:
– int [ ] arrUni;
arrUni; int [,] arrMulti;
arrMulti; int [ ][ ] arrArr;
arrArr; class A { private int MiValor;
MiValor;
– int [,] arrMulti = new int [3,2] {{1,2},{3,4},{5,6}}; [mod. acc.]
acc.] int MiProp {
– arrMulti = new int [10,20]; arrMulti[2,3]
arrMulti[2,3] = 50; set { MiValor = value;
value; }
– for(int i = 0; i < aa.GetLength(0);
aa.GetLength(0); i++)
i++) get { return MiValor;
MiValor; }
for(int j = 0; j < aa.GetLength(1);
aa.GetLength (1); j++)
j++) { ... aa[i,j]
aa[i,j] ... } }
– “arrMulti.Rank” }
arrMulti.Rank” vale 2.
LP2 2008-
2008-1 Diapositiva 23 LP2 2008-
2008-1 Diapositiva 24
Indizadores
• Permite trabajar un objeto como si fuese un
arreglo.
class B {
public int this [int indice]
set {...}
indice] { Estructuras
get {...}
}
}
LP2 2008-
2008-1 Diapositiva 25 LP2 2008-
2008-1 Diapositiva 26
Estructuras Estructuras
LP2 2008-
2008-1 Diapositiva 27 LP2 2008-
2008-1 Diapositiva 28
Estructuras Estructuras
• C++: • C#
– La única diferencia entre una estructura y una – Son de tipo valor (pila).
clase es que el modificador por defecto del ámbito – No se puede construir un constructor por defecto.
de una estructura es “púbico”. – No se puede inicializar un dato miembro cuando se declara.
– No se puede hacer uso de una estructura hasta inicializar
– Se pueden almacenar en el heap o en la pila. sus valores.
• C#: – No pueden heredar de otras estructuras ni clases pero si
– Las estructuras solo se almacenan en pila, las pueden implementar interfaces.
clases solo en montón.
LP2 2008-
2008-1 Diapositiva 29 LP2 2008-
2008-1 Diapositiva 30
Estructuras
C++ C# Java
LP2 2008-
2008-1 Diapositiva 31