Вы находитесь на странице: 1из 8

¿Qué es un Objeto?

• Es la representación del estado y comportamiento


de un objeto real o abstracto.
– El estado esta representado por un conjunto de
“datos”
Lenguajes de Programación 2 – El comportamiento esta representado por un
conjunto de “métodos”
Programació
Programación Orientada a Objetos
Objetos y Clases

LP2 2008-
2008-1 Diapositiva 1 LP2 2008-
2008-1 Diapositiva 2

¿Qué es un Objeto? ¿Qué son las Clases?


• En la POO, un programa se conceptualiza como un • Un conjunto de objetos que comparten el mismo
conjunto de objetos en interacción comportamiento y tipos de sus datos (no los
valores) se dicen que pertenecen a la misma clase
• Los objetos interactúan enviándose mensajes unos
a otros • En POO, una clase es un tipo de dato, cuyas
instancias son objetos
• Un objeto responde a un mensaje ejecutando un
• Una clase contiene la descripción de los datos y
método métodos de un conjunto de objetos

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

Declaración de una Clase Ejemplo en C++


• Sintaxis general de declaración:
class Persona { void main()
main() {
char*
char* nombre; Persona p("Jose
p("Jose",
", 30);
int edad; p.Imprimir();
p.Imprimir();
[modificadores] class <Nombre> [esp. Herencia] public:
public: Persona *q =
{ <datos, funciones y tipos> } Persona(char*
Persona(char* n, int edad) { new Persona("Pedro",
nombre = n; 40);
• Diferencias entre C++, Java y C#: }
this-
this->edad = edad;
edad; q->Imprimir();
delete q;
– Los modificadores de declaració
declaración de una clase. ~Persona()
~Persona() {
}
cout << "Destructor
"Destructor:
: " <<
– La especificació
especificación de la herencia. nombre << endl;
endl;

– 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

Datos Miembros Métodos


• Declaració
Declaración: • Declaració
Declaración:
[modificadores] tipo nombre [inicializador
[inicializador]
] [mod]
mod] tipo nombre( args ) [mod
[mod]
] { cuerpo }

• 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

Modificadores de Acceso Modificadores de Acceso


• Dentro de un ámbito, los elemento tiene acceso directo • C++, Java y C# : private,
private, protected y public.
public.
unos a otros. • Java:
• Para determinar la visibilidad de un elemento desde un – protected = paquete + clases derivadas
ámbito distinto, se utilizan modificadores de acceso.
acceso. – de-
de-paquete = paquete (por defecto)
class Cuadrado {
private int lado;
• C#:
C#:
public Cuadrado(int lado) { this.lado = lado; } – internal = ensamblaje
public int area(
area( ) { return lado * lado;
lado; } – internal protected = ensamblaje + clases derivadas
}
class Principal { • C++ y C#
public static void main(String[]
main(String[] args)
args) { – por defecto = private
Cuadrado c = new Cuadrado(10);
System.out.println(
System.out.println(“Area = “ + c.area()); // OK
System.out.println(
System.out.println(“Lado = “ + c.lado); // ERROR
}
}

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

• En las estructuras no existe polimorfismo. • Sintaxis general de declaración:


• Se pueden hacer agregaciones. struct <Nombre> [esp. Herencia]
• Las estructuras se utilizan: { <datos,tipos,funciones>
datos,tipos,funciones> }
– Cuando la informació
información que contendrá
contendrán las estrusturas será
será
manipulada como un tipo de dato primitivo. • Creación de una instancia:
– Cuando la informació
información que se almacen es pequeñ
pequeña <= 16 struct persona {
bytes.
bytes. string nombre;
– Cuando no se requiere utilizar herencia y/o polimorfismo. }
• Básicamente una estructura es má
más eficiente que una clase. ...
persona yo;

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

• Modificadores de acceso por defecto

C++ C# Java

Clases private private package

Estructuras public private no existen

LP2 2008-
2008-1 Diapositiva 31

Вам также может понравиться