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

Programación Orientada a

Objetos

Unidad 2
Clases y Objetos

Universidad de Chile
Departamento de Ciencias de la Computación
Profesor: Nelson Baloian
nbaloian@dcc.uchile.cl
Temario
 Clases
 Objetos
 Campos
 Métodos
 Encapsulamiento
 Propiedades
 Instanciación
 Constructores

2
OOP
 En Object-Oriented Programming
(OOP), o Programación Orientada a
Objetos, un programa está hecho de
clases, con sus campos y métodos

 La creación de un programa involucra


ensamblar objetos y hacerlos
interactuar entre ellos

3
UML
 Unified Modeling Language es el
lenguaje o notación estándar para
Análisis y Diseño Orientados a Objetos
 Creado por Rational
(http://www.rational.com), y mantenido
por OMG (http://www.omg.org)
 En el curso, se usará UML para describir
los conceptos introducidos

4
Tipos de Datos
 En Java existen 2 categorías de tipos de datos:
 Primitivos: boolean, char, byte, short, int, long, float, double
 Referencias: clases, interfaces, arreglos
 Un objeto es una instancia de una clase o de un arreglo
 Una variable es un espacio de memoria que puede almacenar:
Tipo de la variable Puede almacenar

Primitivo Un valor del tipo

Clase El valor null, o una referencia a una instancia de la


clase o de alguna subclase de la clase
Interfaz El valor null, o una referencia a una instancia de
alguna clase que implemente la interfaz
Arreglo El valor null, o una referencia a un arreglo de
elementos del tipo del arreglo
5
Tipos de Datos Primitivos

Tipo Valores

boolean true o false

char Carácter Unicode (de 16 bits)

byte Entero de 8 bits (con signo)

short Entero de 16 bits (con signo)

int Entero de 32 bits (con signo)

long Entero de 64 bits (con signo)

float Número flotante de 32 bits

double Número flotante de 64 bits

6
Clases y Objetos
 In object-oriented programming, a class is a construct that is
used as a blueprint (or template) to create objects of that class.
This blueprint describes the state and behavior that the objects
of the class all share. An object of a given class is called an
instance of the class. The class that contains (and was used to
create) that instance can be considered as the type of that
object, e.g. an object instance of the "Fruit" class would be of
the type "Fruit".
 A class usually represents a noun, such as a person, place or
(possibly quite abstract) thing - it is a model of a concept within
a computer program. Fundamentally, it encapsulates the state
and behavior of the concept it represents. It encapsulates state
through data placeholders called attributes (or member
variables or instance variables); it encapsulates behavior
through reusable sections of code called methods.
Wikipedia

7
Clases y Objetos
 Una clase describe un grupo de objetos que
comparten propiedades y métodos comunes
 Una clase es una plantilla que define qué forma
tienen los objetos de la clase
 Una clase se compone de:
 Información: campos (atributos, propiedades)
 Comportamiento: métodos (operaciones, funciones)
 Un objeto es una instancia de una clase
Clase Objeto
Empresa Sodimac
Casa La Moneda
Empleado Juan Pérez
Ventana (tiempo de diseño) Ventana (tiempo de ejecución)
String “Juan Pérez”
8
Definición de una Clase

class Circulo {
// campos
// métodos
// constructores
// main()
}

9
Campos
 Los objetos almacenan información en sus campos
 Existen dos tipos de campos: de instancia y static (de
clase)
 Campos de instancia
 Hay una copia de un campo de instancia por cada objeto de
la clase
 El campo de instancia es accesible a través del objeto al que
pertenece
 Campos static (de clase)
 Hay una única copia de un campo static en el sistema
(equivalente a lo que en otros lenguajes es una variable
global)
 El campo static es accesible a través de la clase (sin
necesidad de instanciar la clase)

10
Campos
radio y color son variables de
instancia, hay una copia de ellas por
cada objeto Circulo
class Circulo {
// campos
double radio = 5;
String color;
static int numeroCirculos = 0;
static final double PI = 3.1416;
// métodos
// constructores
// main( )
numeroCirculos y PI son variables
}
static, están sólo una vez en
memoria; PI además es constante
(final): no puede modificarse

11
Acceso a Campos
 Acceso a variables de instancia: se utiliza la
sintaxis "objeto."
Circulo c1 = new Circulo();
c1.radio = 5;
c1.color = "rojo";
// si c1 es null,
// se genera una excepción NullPointerException
 Acceso a variables static: se utiliza la sintaxis
"clase."
Circulo.numeroCirculos++;
System.out.println(Circulo.PI);

12
Métodos
 Instrucciones que operan sobre los datos de un objeto para
obtener resultados
 Tienen cero o más parámetros
 Pueden retornar un valor o pueden ser declarados void para
indicar que no retornan ningún valor
 Pueden ser de instancia o static:
 Un método de instancia se invoca sobre un objeto de la clase, al
cual tiene acceso mediante la palabra this (y sus variables de
instancia son accesibles de manera directa)
 Un método static no opera sobre un objeto de la clase, y la palabra
this no es válida en su interior
 Sintaxis
[static] <tipo retorno> <nombre método> (<tipo> parámetro1, ...)
{
// cuerpo del método
return <valor de retorno>;
}
13
Métodos
Método de instancia, tiene acceso
directo a las variables de instancia del
class Circulo { objeto sobre el que se invoca
// campos
double radio = 5;
String color;
static int numeroCirculos = 0;
static final double PI = 3.1416;
// métodos
double getCircunferencia() {
return getCircunferencia(radio);
}
static double getCircunferencia(double r) {
return 2 * r * PI;
}
// constructores Método static, no tiene acceso
directo a variables de instancia
// main( )
}
14
Sobrecarga (Overload) de Métodos
 Métodos de una clase pueden tener el mismo nombre pero
diferentes parámetros
 Cuando se invoca un método, el compilador compara el número
y tipo de los parámetros y determina qué método debe invocar
 Firma (signature) = nombre del método + lista de parámetros
 Ejemplo:
class Cuenta {
public void depositar(double monto) {
this.depositar(monto, "$");
}
public void depositar(double monto,
String moneda) {
// procesa el depósito
}
}

15
Acceso a Métodos
 Acceso a campos y métodos de instancia: se
utiliza la sintaxis "objeto."
Circulo c1 = new Circulo();
c1.radio = 5;
c1.color = "rojo";
double d = c1.getCircunferencia();
// Si c1 es null,
// se genera una excepción NullPointerException;
 Acceso a campos y métodos static: se utiliza
la sintaxis "clase."
Circulo.numeroCirculos++;
int n = Circulo.getNumeroCirculos();
System.out.println(Circulo.PI);

16
Sobrecarga de Operadores en .NET
 .NET permite programar los operadores, como
métodos static llamados "operator X", donde X es el
nombre o símbolo del operador
 Operadores unarios tienen un parámetro; operadores
binarios tienen dos parámetros
 Uno de los parámetros debe ser del mismo tipo que
la clase o estructura que declara el operador

public class Matriz


{
public static Matriz operator + (Matriz m1, Matriz m2)
{
...
}
}
17
Sobrecarga de Operadores en .NET

18
Sobrecarga de Operadores en .NET

19
Encapsulamiento
 Gady Booch define al encapsulamiento “the process of
compartmentalizing the elements of an abstraction that
constitute its structure and behavior; encapsulation serves to
separate the contractual interface of an abstraction and its
implementation”

 La clase es el espacio donde se empaquetan atributos y


métodos
20
Ocultamiento de la Información
 Information hiding is the principle of segregation of design
decisions in a computer program that are most likely to change,
thus protecting other parts of the program from extensive
modification if the design decision is changed. The protection
involves providing a stable interface which protects the
remainder of the program from the implementation (the details
that are most likely to change).
Wikipedia
 Beneficios
 Seguridad en el código:
sólo los métodos de la
clase pueden alterar el
estado del objeto
 La implementación
interna puede ser
modificada sin afectar
el código de la aplicación
21
Modificadores de Acceso
 Nivel de acceso para miembros de clases (campos,
métodos, y clases anidadas)
 Public: miembro es accesible en cualquier lugar en que la
clase sea accesible
 Protected: miembro es accesible por subclases y clases del
mismo package
 Package (default): miembro es accesible por clases del
mismo package
 Private: miembro es accesible sólo al interior de la clase
 Nivel de acceso para clases e interfaces
 Public: clase/interfaz es accesible globalmente
 Package (default): clase/interfaz es accesible por clases del
mismo package

22
Modificadores de Acceso

class Circulo {
// campos
private double radio = 5;
private String color;
private static int numeroCirculos = 0;
public static final double PI = 3.1416;
// métodos
// constructores
// main( )
}

 Recomendación: los campos siempre deben ser privados (a


menos que sean constantes)

23
Propiedades
 En Java, las propiedades se definen por la existencia
de métodos getter y setter: Propiedad radio

class Circulo { (read-write)


void setRadio(double radio) { ... }
Propiedad
double getRadio() { ... }

circunferencia
double getCircunferencia() { ... } (read-only)
}
 Las propiedades pueden basarse en el uso de
campos o no: la clase Circulo puede tener un campo
radio, pero probablemente no tenga un campo
circunferencia
 Las propiedades de una clase pueden ser
determinadas en ejecución mediante reflection (lo
que es utilizado por frameworks como JSP, JSF, JPA)

24
Propiedades en .NET
 .NET provee un manejo de propiedades más
estructurado que el de Java:

25
Identificación de Clases
 Se han realizado diversas proposiciones para apoyar el proceso
de identificación de clases:
 Realizar un análisis gramatical de los requerimientos del sistema:
los sustantivos pueden corresponder a clases y atributos, los
adjetivos a atributos, los verbos a métodos
 Considerar entidades tangibles (auto, factura), roles (socio,
alumno), interacciones (reunión), ubicaciones (sucursal), unidades
organizacionales (empresa), etc.
 Determinar las responsabilidades del sistema, y asignar estas
responsabilidades a clases
 RUP: definir una clase de control por cada caso de uso, una clase
de interfaz (boundary) por cada par {caso de uso, actor}, y clases
de entidad según se requiera

Actor 1 Actor 2

26
Declaración de Variables
 La definición de una clase crea un tipo de datos
 Variables de este tipo se declaran:
Circulo c1;
 Una declaración de una variable de una clase no crea
un objeto; crea una variable que contiene una
referencia a un objeto, sin crear al objeto en sí
 .NET soporta estructuras (struct), además de clases;
las estructuras se crean automáticamente en
memoria con la declaración (se manejan de manera
directa, no mediante referencias)

27
Instanciación y Referencias

 Los objetos se crean con el operador new, y se manejan


mediante referencias
 Los objetos se crean en el área de memoria dinámica
conocida como el heap
 Una referencia contiene la Memoria
dirección de un objeto (es
similar a los punteros de
Stack Heap
otros lenguajes)
 Una asignación entre objetos
es una asignación de
referencias c1
 Circulo c1 = new Circulo();
 Circulo c2 = c1; c2
28
Paso de Parámetros
 En Java el paso de parámetros se
realiza "por valor"
 Argumentos de tipos primitivos
 Si un método modifica el valor de un
parámetro, este cambio sólo ocurre al interior
del método; al retornar el método, se mantiene
el valor original
 Argumentos de tipo referencia (objetos)
 Al retornar el método, la referencia pasada
como parámetro sigue referenciando al mismo
objeto; sin embargo, los campos del objeto
podrían haber sido modificados por el método

29
Constructores
 Un constructor es un método especial invocado para
instanciar e inicializar un objeto de una clase
 Invocado con la sentencia new
 Tiene el mismo nombre que la clase
 Puede tener cero o más parámetros
 No tiene tipo de retorno, ni siquiera void
 Un constructor no público restringe el acceso a la creación
de objetos
 Si la clase no tiene ningún constructor, el sistema
provee un constructor default, sin parámetros
 Si la clase tiene algún constructor, debe usarse
alguno de los constructores definidos al instanciar la
clase (el sistema no provee un constructor default en
este caso)
30
Ejemplo

class Circulo {
...

// constructores
public Circulo() {
}

public Circulo(double r) {
radio = r;
}

void f() {
Circulo c = new Circulo(30);
...
}
} 31
Invocación entre Constructores
 La palabra this puede ser utilizada en la
primera línea de un constructor para
invocar a otro constructor
class Circulo {
private double radio;
private static int numeroCirculos = 0;
Circulo(double radio) {
this.radio = radio;
Circulo.numeroCirculos++;
}
Circulo() {
this(10); // radio default: 10
}
}
32
Inicialización Static
 Es posible definir bloques de inicialización static al
interior de una clase, que se ejecutan en la primera
ocasión en que se realiza una referencia a la clase

public class Log {


private static DataSource datasource;
static {
try {
datasource = ...;
} catch (Exception e) {
...
}
}
...

 En .NET existe un constructor static, equivalente a la


inicialización static de Java 33
Garbage Collection
 Cuando no quedan en el programa referencias a un
objeto, el espacio que él ocupa puede ser reclamado
por un "garbage collector" (recolector de basura)
 Uno no elimina explícitamente objetos (no existe el
delete de C++)

X
 Entorno seguro (no hay punteros a basura)
 Circulo c1 = new Circulo();
 Circulo c2 = new Circulo();
c1
 c1 = c2;
 El primer círculo no es
eliminado de memoria al
perderse su referencia, sino
c2
cuando la JVM decide invocar
al garbage collector

34
Resumen
 Una clase es una plantilla a partir de la cual se
instancian objetos
 Los objetos contienen información (en campos de
instancia y static) y comportamiento (en métodos de
instancia y static)
 Los miembros de instancia se utilizan con la sintaxis
"objeto."
 Los miembros static se utilizan con la sintaxis "clase."
 Una clase puede tener varios métodos con el mismo
nombre (sobrecarga), siempre que tengan diferentes
parámetros

35
Resumen
 Para instanciar una clase (crear un objeto) se utiliza
el operador new
 Los constructores son métodos especiales invocados
al instanciar una clase
 Los objetos se manejan a través de referencias
 La palabra this representa una referencia al objeto
sobre el cual se invoca un método de instancia
 Los modificadores de acceso controlan quién tiene
acceso a los miembros de una clase

36

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