Poo 1

Yordany Pirela
Yordany PirelaPromotor Comunal em alcaldia bolivariana del municipio miranda
LENGUAJE DE
PROGRAMACIÓN II
(ELEMENTOS BÁSICOS DEL LENGUAJE JAVA)
ING. HOWARD PERNÍA
Contenido
Conceptos básicos
• Clase
• Objeto o instancia
• Atributos
• Métodos
• Constructores
• Visibilidad
• Implementación en C++ y Java
Paradigma OO
Resultado de la evolución natural de la
programación, devenido en metodología de
programación de propósito general que simula la
forma en que el hombre trabaja y cuya idea básica
es que percibimos al mundo que nos rodea como
una variedad de objetos.
Ejemplo: Enviar flores a una persona
de otra ciudad
Conceptos básicos
Un Objeto es una entidad con una estructura de
datos interna bien definida, junto a un conjunto de
acciones que describen su comportamiento. Es la
unidad básica de la POO.
Ejemplo:
María la florista
Perla la florista
José el florista
Conceptos básicos
•Un objeto o instancia es una variable concreta de
una clase con su propia copia de variables miembros.
Un objeto tiene estado, comportamiento e identidad.
• Tiene datos internos que le dan el estado.
• Tiene métodos para producir comportamiento.
• Cada objeto tiene una dirección única en memoria lo
que le da identidad.
Objeto
Mensaje
Cliente Servidor
Emisor Receptor
Objeto,
Usuario,
Aplicación
Mensaje: Forma de solicitar una acción a un objeto.
Conceptos básicos
Conceptos básicos
Una clase es:
• una categoría de objetos con características
comunes.
• una plantilla que se usa para crear múltiples objetos
con características similares.
Las clases engloban las características de un
conjunto particular de objetos.
Cuando se escribe un programa en un lenguaje
orientado a objetos no se definen objetos
individuales sino clases de objetos.
Ejemplo: Florista
Conceptos básicos
• Las clases son tipos de variables o tipos de datos
creados por el usuario.
• Se puede extender un lenguaje de programación
adicionando nuevos tipos de datos específicos
acorde a las necesidades del problema a resolver.
• Las clases pueden estar formadas por variables
miembros y funciones miembros.
Implementación
// En Java
class Circulo {
}
class TCirculo {
}
Buenas Prácticas:
• Nombrar las clases utilizando la notación Camell,
comenzando o no con la letra T para indicar que es
un tipo de datos.
• Colocar la apertura de ambiente en la misma línea
o en una línea aparte.
// En C++
class Circulo {
};
class TCirculo {
};
Implementación
// Sintaxis en Java
[<visibilidad>]class Circulo {
[<miembros>]
}
// Sintaxis en C++
class <nombre de la clase>
{
private: [lista de miembros]
protected: [lista de miembros]
public: [lista de miembros]
};
Conceptos básicos
Cada clase puede estar compuesta por:
• Atributos: definen el estado de la clase.
• atributos pasivos,
• variables miembros,
• campos.
• Métodos: definen el comportamiento de la clase.
• funciones miembros,
• atributos activos,
• operaciones,
• comportamiento,
• responsabilidades.
Variables Miembros
Funciones miembros
Florista
Nombre
Salario
Edad
Vender flores
Enviar flores a otra ciudad
Ejemplos:
Variables Miembros
Funciones miembros
Bombillo
Consumo
Enceder
Apagar
Aumentar Brillo
Disminuir brillo
Notación UML para
representar una clase
Los atributos son características, propiedades que
hacen que un objeto se diferencie del otro. Pueden
determinar apariencia, cualidades, estado, etc.
Los atributos se definen por variables.
Para cada variable se define su tipo.
Tanto en Java como en C++ es posible definir:
• Variables o atributos de clase
• Variables o atributos de objeto o de instancia
Atributos o variables miembros
Sintaxis
//en Java
[visibilidad] [static] [final] [transient] [volatile]
<Tipo> <nombreAtributo>;
//en C++
Tipo nombreAtributo;
Variables de clases
• Define un atributo para toda la clase.
• Aplica para la clase y para todas sus instancias.
• Sólo almacena una copia con independencia de la
cantidad de objetos.
• Existe aunque no se haya creado ningún objeto de
la clase.
• Debe ser definida como static.
Variables de objetos o de instancia
• Define un atributo de un objeto en particular.
• Cada instancia u objeto almacena su propia copia
de variables de objeto.
• Los atributos son por defecto de objetos o de
instancia a menos que se califiquen como static (de
clase).
Ejemplos// en Java
class Circulo {
static int numCirculos = 0;
double x, y, r;
}
// en C++
class Circulo {
static int numCirculos = 0;
double x, y, r;
};
Las variables de clases son buenas para la
comunicación entre diferentes objetos de la clase o
para llevar un registro de información relativa a toda
la clase.
Ejemplo: el número total de círculos creados.
Ejemplos
// en Java
class Circulo {
static int numCirculos = 0;
double x; // coordenada x
double y; // coordenada y
double r; // radio
}
// en C++
class Fecha {
int d;
int m;
int a;
static TDate defaultDate;
};
Buenas prácticas
Definir cada atributo en una línea independiente
aunque sean del mismo tipo.
Hace el código más legible y permite comentar mejor.
Modificadores de atributos
La palabra reservada final calificando a un atributo o
variable sirve para declarar constantes.
Si además es static, sólo se puede acceder a dicha
constante anteponiendo el nombre de la clase, sin
instanciarla.
El valor de un atributo final tiene ser asignado en su
declaración y no se puede modificar.
Modificadores de atributos
Los atributos de un objeto se consideran, por defecto,
persistentes. Esto significa que al almacenar objetos
en un fichero, los valores de dichos atributos deben
almacenarse.
Aquellos atributos que no forman parte del estado
persistente del objeto porque almacenan estados
transitorios o puntuales del objeto, se declaran como
transient (transitorios).
Modificadores de atributos
Si una clase contiene atributos de objeto que son
modificados asíncronamente por distintos threads
(hilos) que se ejecutan concurrentemente, puede
utilizar atributos volatile.
Esto le indica a la máquina virtual Java que debe
cargar el atributo desde memoria antes de utilizarlo y
volver a almacenarlo en memoria después, para que
cada hilo pueda “verlo” en un estado coherente.
Métodos o funciones miembros
El comportamiento de una clase se implementa a
través de sus métodos o funciones miembros.
Una clase o un objeto puede llamar métodos de
otras clases para:
• Indicar a otro objeto que cambie
• Pedir a otro objeto que haga algo
Es posible definir:
• Métodos de instancia: aplican a cada objeto de la
clase.
• Métodos de clase (en Java).
Métodos de clase
• Están disponibles para cualquier instancia de la
clase y para otras clases.
• No se requiere una instancia de la clase para poder
invocar a un método de clase.
• Para definir los métodos de clase hay que
anteponer a la definición del método la cláusula
static.
Tipos de funciones miembros
• Funciones (procedimientos)
• Constructores
• Destructores
En C++ y en Java todas son funciones, no existen
procedimientos.
Definiendo métodos
• Cada objeto puede satisfacer sólo ciertos
requerimientos.
• Los requerimientos que puede resolver el objeto
están definidos por su interfaz y los tipos que hay en
ella.
• Cuando se hace un requerimiento a un objeto un
método es llamado.
Definiendo métodos
La definición básica de un método cuenta de:
• Tipo de retorno (tipo de objeto o tipo primitivo)
• Nombre del método
• Lista de parámetros
• Cuerpo del método
<tipo-retorno/void> nombre([parámetros]) {
//cuerpo del método
}
//en Java
[<visibilidad>]<tipo-retorno/void> nombre([parámetros]) {
//cuerpo del método
}
Las tres primeras partes se conocen como interfaz o
firma del método.
Definiendo métodos
<tipo-retorno/void> nombre ([lista de parámetros]) {
//cuerpo del método
}
Tipo-retorno
Es el tipo primitivo o la clase del valor devuelto.
void indica que no hay valor de retorno.
Nombre
Debe expresar claramente lo que se hace en el
cuerpo del método.
Definiendo métodos
<tipo-retorno/void> nombre ([lista de parámetros]) {
//cuerpo del método
}
Lista de parámetros
Conjunto de declaraciones de variables (tipo-variables)
separadas por coma que reciben valor al invocar al
método. Aunque dos parámetros tengan el mismo tipo
no se puede abreviar.
Los párametros se convierten en variables locales en
el cuerpo del método.
Si un parámetro se declara const (en C++) o final (en
Java) no se puede variar en el cuerpo del método.
Definiendo métodos
<tipo-retorno/void> nombre ([lista de parámetros]) {
//cuerpo del método
}
Lista de parámetros
Puede que un método no tenga parámetros.
Los parámetros se inicializan en cada llamada al
método al cual pertenecen con los valores
especificados al llamarlos.
En C++ se permite que los parámetros tengan valores
por defecto.
Parámetros-Valores por defecto
• Una función miembro puede tener o no valores por
defecto.
• Si los tiene, a partir del primero que sea por defecto,
el resto tiene que ser por defecto.
• Los valores por defecto no pueden redeclararse.
class Clase {
void f(int = 1);
void h(int);
//error, 2do tiene que ser por defecto
void g(int = 1, int, int =2);
void m(int, int, int =2); // ok
};
void Clase::f(int pP = 2) //error, no puede redeclararse
Definiendo métodos
<tipo-retorno/void> nombre ( [lista de parámetros] ) {
//cuerpo del método
}
En el cuerpo del método se pueden definir:
• Expresiones
• Condicionales
• Ciclos
• Llamadas a métodos de otras clases, etc.
A menos que aparezca como tipo de retorno void en
el cuerpo del método hay que devolver la variable del
tipo indicado en cualquier punto mediante la clásula
return.
Ejemplo en Java
public class Circulo {
static int numCirculos = 0;
double x, y, r;
//método de objeto para comparar círculos
public Circulo elMayor(Circulo c) {
if (r >= c.r)
return this;
else
return c;
}
// método de clase para comparar círculos
public static Circulo elMayor(Circulo c, Circulo d) {
if (c.r >= d.r)
return c;
else
return d;
}
}
Ejemplo
Utilizando los métodos de clase, Java ofrece entre
otras la clase Math, donde define un conjunto de
operaciones matemáticas.
Así, desde cualquier método de una clase se puede
invocar al método de clase sqrt definido en la clase
Math:
float raiz = Math.sqrt(345);
Sobrecarga de métodos
Tanto en Java como en C++ es posible definir varios
métodos para la misma clase con el mismo nombre
pero con diferencias en:
En la lista de argumentos:
• el número
• el tipo de los argumentos
• o ambos
Esto se conoce como sobrecarga de métodos.
Si se tratan de crear dos métodos con la misma
interfaz y diferentes tipos de retorno, la clase no se
compila.
Definiendo clases
En Java:
• todo es una clase. No se pueden definir variables o
funciones que no pertenezcan a una clase.
• las clases se declaran y se implementan en el
mismo fichero (<nombre>.java).
En C++:
• es posible definir variables y funciones que no
pertenezcan a una clase.
• las clases se declaran en un fichero <nombre>.h y
se implementan sus métodos en un fichero
<nombre>.cpp a menos que la función sea inline.
Ejemplo en Java
// en Java, fichero.java
class Date {
int d;
public:
int D() {
return d;
}
}
Ejemplo en C++
// en C++, fichero.h
class Date {
int d;
public:
//por defecto es inline
int D(){return d;}
};
// en C++, fichero.h
class Date {
int d;
public:
int D();
};
//En fichero.cpp
inline int Date::D() {
return d;
}
//otra variante
int Date::D() {
return d;
}
Funciones inline (C++)
• Útil para funciones pequeñas y frecuentemente
usadas.
• El llamado a la función se sustituye por el código.
• Su definición se replica en cada unit que incluya la
unit en que fue definida.
Métodos en Java
[Visibilidad] [static] [abstract] [final] [native] [synchronized]
TipoDevuelto NombreMétodo ([ ListaParámetros])
[throws ListaExcepciones]
Los métodos abstract se declaran en las clases
abstract y no se implementa su cuerpo.
Un método declarado final no puede ser redefinido.
Se comporta como una función inline en C++. Donde
se llama se carga el código completo del método. El
compilador puede decidir no cargarlo si el método es
muy grande.
Métodos en Java
Los métodos native, son métodos que se encuentran
escritos en otro lenguaje de
programación .
Los métodos synchronized son métodos especiales
para cuando varios hilos pueden acceder
concurrentemente a los mismos datos.
Métodos constantes (C++)
Una función miembro se declara constante (usando
const) para indicar que no altera el estado de la
clase.
• Un parámetro también puede ser declarado
constante.
• El compilador alerta si la función fue declarada
const y en su definición se trata de cambiar el estado
de la clase.
• El compilador alerta si el objeto fue declarado const
y se trata de invocar un método no constante.
Métodos constantes (C++)
• Si el método se implementa fuera de la clase debe
llevar el sufijo const en su interfaz.
• Una función miembro const puede ser invocada por
objetos constantes y no constantes.
• Una función miembro no constante solo puede ser
llamada por objetos no constantes.
Métodos constantes (C++)
class Fecha
{
private:
int d;
int m;
public:
int D() const {return d;}
void IncDia(int);
int M() const;
};
int Fecha::M(){…} // error, falta const
int Fecha::M() const {…} //ok
int Fecha::M()const{//error
return ++m;
}
Constructor
• Su nombre coincide con el de la clase.
• No tiene valor de retorno (ni void)
• Una clase puede tener varios constructores (ejemplo
típico de sobrecarga de funciones), pero la lista de
parámetros tiene que variar.
• Los constructores deben diferir en tipo y/o cantidad
de parámetro.
Es un tipo especial de método utilizado para crear
objetos o instancias de una clase.
Características
Constructor
• Si la clase tiene un constructor, todos los objetos de
la clase deben ser inicializados invocándolo.
• Si el constructor tiene parámetros al invocarlo hay
que suministrarlos.
• De no definirse un constructor para la clase, el
compilador genera un constructor por defecto.
• El constructor por defecto, no tiene parámetros e
inicializa cada atributo con el valor nulo por defecto.
• Si un constructor no tiene parámetros se considera
el constructor por defecto.
Características
Constructores en C++
• Existe un tipo especial de constructor llamado
constructor copia, cuyo parámetro es una referencia
a una instancia de la clase.
• El constructor copia debe copiar cada miembro de la
clase.
• No hay constructores virtuales ya que al construir se
debe conocer el tipo exacto del objeto.
Uso del this
El this es un puntero (C++) o referencia (Java) al
objeto.
El programador no lo crea ni lo inicializa. Cuando se
llama a una función miembro, el código oculto
genera el this con la dirección del objeto y lo pasa
como parámetro.
Uso del this
En el cuerpo de método se puede referir al objeto
actual, desde donde fue llamado el método,
utilizando el this.
En Java, sólo se puede usar this dentro del cuerpo
de la definición de un método de instancia, nunca en
el cuerpo de un método de clase.
Ejemplo en Java
public class Circulo {
static int numCirculos = 0;
public static final double PI=3.14159265358979323846;
public double x, y, r;
public Circulo(double x, double y, double r) {
this.x = x;
this.y = y;
this.r = r;
numCirculos++;
}
public Circulo(double r) { this(0.0, 0.0, r); }
public Circulo(Circulo c) { this(c.x, c.y, c.r); }
public Circulo() { this(0.0, 0.0, 1.0); }
public double Perimetro() {return 2.0 * PI * r;}
public double Area() {return PI * r * r;}
}
Uso del this
public class Rectangulo {
private static int numRectangulos = 0;
protected double x1, y1, x2, y2;
public Rectangulo(double p1x, double p1y,
double p2x, double p2y) {
x1 = p1x;
x2 = p2x;
y1 = p1y;
y2 = p2y;
numRectangulos++;
}
public Rectangulo(){ this(0, 0, 1.0, 1.0); }
}
En Java, con this se invoca al constructor general
desde otro constructor.
Ejemplo en C++
class Fecha {
private:
int d;
int m;
int y;
public:
Fecha(); //constructor por defecto
Fecha(int, int); //día y mes del año actual
Fecha(int, int, int);
Fecha(const TDate&) //constructor copia
};
Uso del this
// en Java
public Circulo(double pX, double pY, double pR) {
this.x = pX; // x es un atributo
this.y = pY;
this.r = pR;
numCirculos++;
}
// en C++
class Fecha {
int d;…
public:
Fecha(int, int, int);
Fecha& IncD(int);
};
// en .cpp
Fecha& Fecha::IncD(int pInc) {
d += pInc;
return *this;
}
Constructores (en C++)
// Variante 1: inicialización de miembros
// todo en el fichero .h
class Fecha
{
private:
int d;
int m;
int a;
public:
Fecha(int pD, int pM, int pY) : d(pD), m(pM),
a(pA) {}
};
Constructores (en C++)
// Variante 2: parte en el .h y otra en el .cpp
// en el .h
class Fecha {
private:
int d;
…
public:
Fecha(int, int, int);
};
//en .cpp
Fecha::Fecha(int pD, int pM, int pA) {
d = pD;
m = pM;
a = pA;
}
Sólo es preciso declarar la
interfaz del método
Constructor copia (en C++)
<Nombre clase>(<Nombre clase>&<variable>)
TDate(TDate&)
Tiene que ser por referencia (&), porque si se pasa
por valor se hace una copia en la pila y con ello se
invoca al constructor copia recursivamente.
Fecha::Fecha(Fecha& pFecha) {
d = pFecha.d;
m = pFecha.m;
a = pFecha.a;
}
Creando una instancia en Java
Circulo c = new Circulo();
// equivale a
Circulo c;
c = new Circulo();
Se crea una referencia llamada c a un objeto de la
clase Circulo.
Crear una referencia es como crear un “nombre”
válido para referirse a un objeto de la clase Circulo.
La referencia contiene la dirección de memoria donde
se encuentra el objeto.
Creando instancias en Java
En Java solo se crean instancias de manera explícita
urilizando el operador new.
Circulo circulo = new Circulo();
El operador new crea una nueva instancia de la clase,
reserva memoria para ella e invoca al constructor.
La instrucción anterior además asigna a la referencia
circulo el objeto creado.
Nombre de la clase
Referencia al objeto
constructor
Creando una instancia en C++
Hay dos formas de crear instancias en C++.
• Objetos locales (Estática)
• Objetos arbitrarios (Dinámica)
Los objetos locales se crean y se destruyen
automáticamente.
TDate date(30,9,2000);
Declara la variable date de tipo TDate (objeto) e
invoca al constructor quien inicializa sus atributos con
los valores pasados por parámetro.
Creando una instancia en C++
Los arbitrarios (dinámicos) tienen duración arbitraria,
los crea y los destruye el usuario con new y delete
respectivamente.
TDate* myBirthday = new TDate (30,9,2000);
Se declara un puntero a la clase TDate (myBirthday)
y se llama al operador new que calcula el tamaño del
objeto, devuelve el tipo correcto de puntero, invoca
al constructor de la clase y asigna la dirección al
puntero.
Composición de clases
Cuando una instancia se construye deben construirse
también todas sus instancias miembros.
Circulo Punto
class Circulo {
Punto punto;
float radio;
};
Los atributos de una clase pueden ser instancias de
otras clases.
La relación tiene-un que se estable entre las clases
se denomina composición.
Ejemplo en C++
class Punto {
private:
int x;
int y;
public:
int X() const {return x;}
int Y() const {return y;}
Punto(int pX = 0,int pY = 0): x(pX),y(pY) {}
Punto(Punto& pPunto):
x(pPunto.X()), y(pPunto.Y()) {}
};
Composición de clases
class Circulo {
Punto punto;
float radio;
public:
Circulo(int pX=0,int pY=0,float pRadio=1):
radio(pRadio), punto(pX,pY){}
Circulo(Punto pPunto, float pRadio=1):
radio(pRadio), punto(pPunto){}
};
Circulo* circulo = new Circulo(1,2,3);
Punto punto = Punto(2,4);
Circulo* circulo2 = new Circulo(punto,8);
Paso de parámetros en Java
En Java, los parámetros pasan como siguen:
• Los tipos básicos o primitivos se pasan por valor.
• Los arreglos y los objetos se pasan por referencia
por lo que si se modifican en el cuerpo del método al
salir su valor queda alterado.
Paso de parámetros en C++
Los parámetros se pueden pasar por:
• Valor.
• Referencia.
• Puntero.
En los dos últimos casos si se modifican en el cuerpo
del método al salir su valor queda alterado.
Cuando se pasa un objeto por referencia o por
puntero y se quiere evitar lo anterior, se declara const.
El pase por referencia o por puntero es más eficiente.
Visibilidad en Java
Controla el acceso a los miembros, tanto a atributos
como a métodos.
El acceso en C++ puede ser:
• private, protected y public
• El acceso es por defecto private.
El acceso en Java puede ser:
• private, protected, package y public
• El acceso es por defecto package.
Visibilidad en Java
public: puede ser usada por cualquier clase.
protected: puede ser usada por:
• funciones miembros de la clase,
• funciones miembros de las subclases.
• funciones miembros de las clases del propio
paquete.
package: puede ser utilizada por todas las clases del
paquete.
private: sólo puede ser usado por las funciones
miembros de la clase.
Visibilidad en Java
Cuando no se especifican permisos de acceso
(public, private o protected) se supone la opción
por defecto, que es package.
Si no se ha definido ningún paquete, se utiliza el
package por defecto que es el directorio donde
están definidas las clases.
Es preciso especificar la visibilidad de cada miembro
ya sea atributo o método de forma independiente.
Visibilidad en Java
Visibilidad
Acceso desde:
Propia clase subclases paquete Todas las clases
private X No No No
protected X según X No
public X X X X
por defecto X No X No
Funciones amigas (en C++)
• No son miembros de la clase (disminuye el tamaño
del objeto).
• Una función amiga se define fuera del alcance de
la clase pero tienen acceso a los miembros
privados de la clase.
• La amistad es independiente del control de acceso,
por lo que se coloca en cualquier parte de la
definición de la clase.
• Coloque la palabra friend antes de la declaración
de la función.
• Las funciones amigas pueden definirse inline.
• La amistad no es simétrica.
Funciones amigas (en C++)
• No funciona el this porque no es miembro de la
clase.
• No se puede declarar como amiga ni:
- Constructor,
- Destructor,
- Funciones virtuales
Stroutrup, sugiere usarlas:
• Para evitar miembros de datos públicos
• Una función amiga para más de una clase.
Funciones amigas (en C++)
class ClaseA {
int a;
public:
ClaseA(int pA): a(pA){}
int A(){return a;}
friend int B(ClaseA&);
int C(){return B(*this);}
};
int B(ClaseA& pClaseA){
return pClaseA.a + 5; // ok, puede acceder a lo privado
}
ClaseA claseA(3);
int i = claseA.A(); // i=3
i = claseA.B(claseA); // error, B no es miembro de TClaseA
i = claseA.C(); // i=8
Las funciones amigas requieren
la especificación de objeto para
acceder a los miembros.
Clases amigas (en C++)
class ClaseB {
int b;
public:
ClaseB(int pB){b = pB;}
int B(ClaseA& pClaseA){return pClaseA.a;}
char BB(ClaseA& pClaseA){return pClaseA.AA();}
};
class ClaseB;
class ClaseA {
friend ClaseB;
int a;
char AA(){return a;}
public:
ClaseA(int pA){a = pA;}
int A(){return a;}
};
TClaseA declara a TClaseB
como amiga.
Esto permite que TClaseB
acceda a todos los atributos y
métodos de la clase TClaseA
aunque sean privados.
Visibilidad en C++
class TExample
{
private: [lista de miembros]
protected: [lista de miembros]
public: [lista de miembros]
};
private: Utilizados por funciones miembros de la
propia clase o por amigas de la clase.
protected: Utilizados por funciones miembros o
amigas de la propia clase y por funciones miembros y
amigas de cualquier clase derivada.
public: Utilizados por cualquier función pertenezca o
no a la clase.
Visibilidad en C++
Privados (private)
Públicos (public)
Protegidos (protected)
Públicos Privados
Métodos

Atributos
Protegidos
Encapsulamiento
Es una de las propiedades de la POO que define que
el objeto debe ser una cápsula o caja negra que
encapsula su funcionamiento y estructura interna.
Sólo se ven desde afuera los miembros (la interfaz
para el caso de los métodos) con visibilidad pública.
Buenas Prácticas: los atributos deben ser privados o
protegidos y se debe acceder a ellos a través de los
métodos que pueden ser públicos.
Encapsulamiento
instancia1 instancia2
CLASE
INTERFAZ de la CLASE
CLASE
Datos y
Funciones Miembros
Privadas, Protegidas y
de Paquete
Atributos Públicos Métodos Públicos
Encapsulamiento
El encapsulamiento permite:
• Ocultar detalles de implementación.
• Simplificar el programa.
• Minimizar el impacto del cambio.
• Garantizar integridad de los datos.
Referencias en Java
Una referencia es un apuntador que se usa para indicar el
valor de un objeto.
Cuando se asigna un objeto a una variable o se pasa un
objeto a un método como argumento no se usan objeto, ni
copias de objetos sino referencias a los objetos.
Ejemplo:
Point pt1, pt2;
pt1 = new Point (100, 100);
pt2 = pt1;
pt1.x= 200;
pt1.x= 200;
System.out.println(“Punto1: = ” + pt1.x + ”, “ + pt1.y);
System.out.println(“Punto2: = ” + pt2.x + ”, “ + pt2.y);
Punto1: 200, 200
Punto2: 200, 200
Referencias en Java
Punto1: 200, 200
Punto2: 200, 200
Punto p1;
Punto p2;
p1 = new Punto(100, 100);
p2 = p1;
p1.x = 200;
p1.x = 200;
System.out.println(“Punto1: = ” + p1.x + “, ”
+ p1.y);
System.out.println(“Punto2: = ” + p2.x + “, ”
+ p2.y);
Referencias en Java
Punto p1;
Punto p2;
p1 = new Punto(100, 100);
p2 = new Punto(300, 300);
p2 = p1;
p1.x = 200;
p1.x = 200;
System.out.println(“Punto1: = ” + p1.x + “, ”
+ p1.y);
System.out.println(“Punto2: = ” + p2.x + “, ”
+ p2.y);
Punto1: 200, 200
Punto2: 100, 100
Hay que probar esto
Acceso a variables de instancia y método
En Java
Circulo c = new Circulo(2.0, 2.0, 4.0);
System.out.println("Radio = “ + c.r +
"unidades.");
c.r = 5; // se cambia el valor del radio
Para referirse a variables de instancias y métodos de
objetos se puede usar la notación de punto:
c: referencia al objeto + operador . + nombre de la
variable miembro r (c.r).
Estas expresiones de evalúan de izquierda a derecha.
Acceso a variables de clase
Circulo c = new Circulo(2.0, 2.0, 4.0);
System.out.println(c.numCirculos + “ círculos
creados.");
Circulo.numCirculos = 5; // se cambia el valor
Para accesar y cambiar las variables de clases se
puede usar la notación de punto utilizando tanto el
nombre de la instancia como de la clase a la izquierda
del punto.
Se sugiere usar el nombre de la clase, ya que el
nombre de la instancia puede resultar confuso.
Acceso a métodos
Se pueden combinar llamadas de métodos anidados y
referencias a variables de instancia.
System.out.println();
Systems describe el comportamiento para el sistema
en que se está ejecutando Java
System.out es una variable de clase que contiene
una instancia de la clase PrintStream.
Este objeto de PrintStream representa la salida
estándar del sistema.
Los objetos PrintStream tienen un método println que
envía una cadema al flujo de salida.
Acceso a métodos
public Circulo elMayor(Circulo c) {
if (this.r>=c.r)
return this;
else
return c;
}
public static Circulo elMayor(Circulo c, Circulo d) {
if (c.r>=d.r)
return c;
else
return d;
}
Circulo c = c1.elMayor(c2);
Circulo c = Circulo.elMayor(c1, c2);
Ambas funciones (sobrecargadas) retornan una
referencia al objeto que constituye el mayor círculo.
Acceso a variables y métodos en C++
En función de como se cree el objeto hay dos formas
de acceder a los atributos y funciones miembros.
1- objeto.<atributo o función miembro>
Fecha fecha(5,1,2000);
fecha.IncA(4);
2- objeto-><atributo o función miembro>
Fecha* miCumple = new Fecha(5,1,2000);
miCumple->IncA(4);
Alcance de variables
En C++, existen variables:
•Globales
•Locales
•Variables de instancia
•Variables de clase
En Java, existen variables:
•Locales
•Variables de instancia
•Variables de clase
En Java no existen variables globales.
Alcance de variables
Java busca primero una variable en el bloque actual,
después en el método. Si la variable no es local, la
busca como variable de instancia o variable de clase.
Si no la encuentra, la busca en las superclases.
Si una variable de instancia tiene el mismo nombre
de una variable local (sum) y es preciso trabajar en el
método con ambas:
this.sum // se refiere a la variable de instancia
sum // se refiere a la variable local
Buenas prácticas
Hay que ser muy cauteloso al nombrar todos los
tipos de variables
Alcance de variables
int a = 1; // variable global
class TClase
{
int a;
public:
TClase(int);
};
TClase clase(5);
TClase.a; // error, trata de encontrala en el
// ámbito de TClase y es privada.
En C++, las clases tienen su propio ámbito.
C++ y Java
La pila: Se ubica en el área de la memoria RAM y el
almacenamiento en ella es extremadamente rápido y
eficiente. El compilador de Java debe saber mientras
crea el programa, el tamaño exacto y el tiempo de
vida de todos los datos que se almacenan en la pila.
Esto limita la flexibilidad de los programas, así que
aun cuando algunos almacenamientos en Java son en
la pila, en particular las referencias y los objetos en
Java no son puestos en la pila.
Bibliografia
El heap: Es un área de propósito general ubicada en
la memoria RAM y donde se almacenan todos los
objetos en Java. El compilador no necesita saber
cuanto espacio debe reservar en el heap, ni por
cuanto tiempo. Sin embargo asignar espacio en el
heap toma más tiempo que asignar espacio en la pila.
Bibliografia
• Centro de Estudio de Ingeniería de Sistemas (CEIS) Instituto
Superior Politécnico “José Antonio Echeverría” (CUJAE)
• An introduction to Object-Oriented Programming.
Timothy Budd. Addison Wesley, 1991.
• The C++ Programming Language. Third Edition.
Bjarne Stroustrup. Addison Wesley, 1997.
• Thinking in Java. Third Edition. Bruce Eckel, 2002.
1 de 92

Recomendados

Consultas base de datos en SQL por
Consultas base de datos en SQLConsultas base de datos en SQL
Consultas base de datos en SQLCristian Salazar C.
104K visualizações26 slides
7.2. funciones sql por
7.2.  funciones sql7.2.  funciones sql
7.2. funciones sqlrenaldy villanueva
1.9K visualizações18 slides
Sentencias sql por
Sentencias sqlSentencias sql
Sentencias sqlPatricia Marquez Contreras
2.8K visualizações52 slides
Comandos y funciones sql postgres por
Comandos y funciones sql postgresComandos y funciones sql postgres
Comandos y funciones sql postgresHIPOLITO GRULLON
6.8K visualizações18 slides
Topicos Avanzados de Programacion - Unidad 4 programacion concurrente por
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteTopicos Avanzados de Programacion - Unidad 4 programacion concurrente
Topicos Avanzados de Programacion - Unidad 4 programacion concurrenteJosé Antonio Sandoval Acosta
1.6K visualizações37 slides
Diagramas clases presentacion por
Diagramas clases presentacionDiagramas clases presentacion
Diagramas clases presentacionjosebrandon24
3.3K visualizações16 slides

Mais conteúdo relacionado

Mais procurados

INYECCION SQL(SEGURIDAD DE LA INFORMACION) por
INYECCION SQL(SEGURIDAD DE LA INFORMACION)INYECCION SQL(SEGURIDAD DE LA INFORMACION)
INYECCION SQL(SEGURIDAD DE LA INFORMACION)toshko86
4.6K visualizações10 slides
Sql DML Lenguaje de manipulación de datos por
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos josecuartas
38.6K visualizações26 slides
Diagrama de clases UML por
Diagrama de clases UMLDiagrama de clases UML
Diagrama de clases UMLJosé Antonio Sandoval Acosta
217 visualizações24 slides
Procedimientos almacenados en MySQL por
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQLMiguel Angel Rivera Robledo
35.9K visualizações25 slides
Modelamiento De Negocio por
Modelamiento De NegocioModelamiento De Negocio
Modelamiento De NegocioKudos S.A.S
15.8K visualizações54 slides
Unidad 1 introducción a las estructuras de datos por
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datosUrban Skate House
2.5K visualizações7 slides

Mais procurados(20)

INYECCION SQL(SEGURIDAD DE LA INFORMACION) por toshko86
INYECCION SQL(SEGURIDAD DE LA INFORMACION)INYECCION SQL(SEGURIDAD DE LA INFORMACION)
INYECCION SQL(SEGURIDAD DE LA INFORMACION)
toshko864.6K visualizações
Sql DML Lenguaje de manipulación de datos por josecuartas
Sql DML Lenguaje de manipulación de datos Sql DML Lenguaje de manipulación de datos
Sql DML Lenguaje de manipulación de datos
josecuartas38.6K visualizações
Modelamiento De Negocio por Kudos S.A.S
Modelamiento De NegocioModelamiento De Negocio
Modelamiento De Negocio
Kudos S.A.S15.8K visualizações
Unidad 1 introducción a las estructuras de datos por Urban Skate House
Unidad 1 introducción a las estructuras de datosUnidad 1 introducción a las estructuras de datos
Unidad 1 introducción a las estructuras de datos
Urban Skate House2.5K visualizações
Del análisis al diseño. diagramas de secuencia y contratos por Juan Pablo Bustos Thames
Del análisis al diseño. diagramas de secuencia y contratosDel análisis al diseño. diagramas de secuencia y contratos
Del análisis al diseño. diagramas de secuencia y contratos
Juan Pablo Bustos Thames24.6K visualizações
Modelo Entidad Relación Extendido. por nayis2010
Modelo Entidad Relación Extendido.Modelo Entidad Relación Extendido.
Modelo Entidad Relación Extendido.
nayis201077.2K visualizações
Casos de Uso en UML por Henry Cuascota
Casos de Uso en UMLCasos de Uso en UML
Casos de Uso en UML
Henry Cuascota1.5K visualizações
DIAGRAMAS DE CLASE por Juan Raul Vergara
DIAGRAMAS DE CLASEDIAGRAMAS DE CLASE
DIAGRAMAS DE CLASE
Juan Raul Vergara19.4K visualizações
Clase 11 uml_casos_de_uso por Demián Gutierrez
Clase 11 uml_casos_de_usoClase 11 uml_casos_de_uso
Clase 11 uml_casos_de_uso
Demián Gutierrez4.3K visualizações
Base de datos de una pizzeria por Lupithaa Guerrero
Base de datos de una pizzeriaBase de datos de una pizzeria
Base de datos de una pizzeria
Lupithaa Guerrero23.7K visualizações
Pilas y colas por arrietaevelio
Pilas y colasPilas y colas
Pilas y colas
arrietaevelio7.4K visualizações
UML - Casos de Uso y Diagramas de Clase por Guillermo Díaz
UML - Casos de Uso y Diagramas de ClaseUML - Casos de Uso y Diagramas de Clase
UML - Casos de Uso y Diagramas de Clase
Guillermo Díaz78.8K visualizações
diagrama de despliegue por albertozurita96
diagrama de desplieguediagrama de despliegue
diagrama de despliegue
albertozurita9630.5K visualizações

Destaque

Actividad grupal por
Actividad grupalActividad grupal
Actividad grupalAngel Apugllon
170 visualizações23 slides
Unidad1 y 2 por
Unidad1 y 2Unidad1 y 2
Unidad1 y 2cibernano
2.2K visualizações64 slides
Ejemplos c por
Ejemplos cEjemplos c
Ejemplos cCarlos
19.9K visualizações32 slides
Capitulo 9 funciones vectoriales por
Capitulo 9  funciones vectorialesCapitulo 9  funciones vectoriales
Capitulo 9 funciones vectorialesIsrael Matorras Rojas
11.1K visualizações9 slides
Funciones vectoriales por
Funciones vectorialesFunciones vectoriales
Funciones vectorialesDany Deyvis Rios Garcia
40.8K visualizações21 slides
Cinematica vectorial web por
Cinematica vectorial webCinematica vectorial web
Cinematica vectorial webMoisés Galarza Espinoza
9.6K visualizações25 slides

Destaque(6)

Actividad grupal por Angel Apugllon
Actividad grupalActividad grupal
Actividad grupal
Angel Apugllon170 visualizações
Unidad1 y 2 por cibernano
Unidad1 y 2Unidad1 y 2
Unidad1 y 2
cibernano2.2K visualizações
Ejemplos c por Carlos
Ejemplos cEjemplos c
Ejemplos c
Carlos19.9K visualizações
Capitulo 9 funciones vectoriales por Israel Matorras Rojas
Capitulo 9  funciones vectorialesCapitulo 9  funciones vectoriales
Capitulo 9 funciones vectoriales
Israel Matorras Rojas11.1K visualizações

Similar a Poo 1

Programación Orientada a Objetos por
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a ObjetosZamantha Gonzalez Universidad Nacional Abierta
11.3K visualizações37 slides
Presentacion4 por
Presentacion4Presentacion4
Presentacion4Actuaria, Facultad de Ciencias, UNAM
2.5K visualizações26 slides
Programación Orientada a Objetos en Java - Parte I 2015 por
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015Renny Batista
3.4K visualizações38 slides
INTRODUCCION LENGUAJE JAVA por
INTRODUCCION LENGUAJE JAVAINTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVAKarla Estefania Villanueva Epigmenio
354 visualizações20 slides
2introduccionallenguajejava 141109171757-conversion-gate02 por
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02Krizztiina Pacheko
157 visualizações20 slides
2) introduccion al lenguaje java por
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje javaMargarita Romero
1.9K visualizações20 slides

Similar a Poo 1(20)

Programación Orientada a Objetos en Java - Parte I 2015 por Renny Batista
Programación Orientada a Objetos en Java - Parte I 2015Programación Orientada a Objetos en Java - Parte I 2015
Programación Orientada a Objetos en Java - Parte I 2015
Renny Batista3.4K visualizações
2introduccionallenguajejava 141109171757-conversion-gate02 por Krizztiina Pacheko
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
Krizztiina Pacheko157 visualizações
2) introduccion al lenguaje java por Margarita Romero
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
Margarita Romero1.9K visualizações
Constructor Y Destructor por Tecnologico
Constructor Y DestructorConstructor Y Destructor
Constructor Y Destructor
Tecnologico19.6K visualizações
Programación Orientada a Objetos - Unidad 2: clases y objetos por José Antonio Sandoval Acosta
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
José Antonio Sandoval Acosta859 visualizações
8. técnicas de escritura de códigos por HectorMamani
8. técnicas de escritura de códigos8. técnicas de escritura de códigos
8. técnicas de escritura de códigos
HectorMamani2K visualizações
Java basico por victdiazm
Java basicoJava basico
Java basico
victdiazm1.2K visualizações
Semana9b Vbr por Carlos Luna
Semana9b VbrSemana9b Vbr
Semana9b Vbr
Carlos Luna522 visualizações
programacion orientada a objetos por jent46
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
jent468.3K visualizações
Poo Java por eccutpl
Poo JavaPoo Java
Poo Java
eccutpl11.1K visualizações
Unidad 2 ProgramacióN Orientada A Objetos (Repaso) por Sergio Sanchez
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Unidad 2 ProgramacióN Orientada A Objetos (Repaso)
Sergio Sanchez3.4K visualizações
Java por mtemarialuisa
JavaJava
Java
mtemarialuisa3.2K visualizações
Programacion orientada a objetos 1 por mellcv
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1
mellcv668 visualizações
Java basico por DAPUMA
Java basicoJava basico
Java basico
DAPUMA401 visualizações
Unidad o informatica por Marisa Torrecillas
Unidad o informaticaUnidad o informatica
Unidad o informatica
Marisa Torrecillas396 visualizações

Mais de Yordany Pirela

Simbolos patrios del Zulia por
Simbolos patrios del ZuliaSimbolos patrios del Zulia
Simbolos patrios del ZuliaYordany Pirela
37.7K visualizações4 slides
Partes del cpu por
Partes del cpuPartes del cpu
Partes del cpuYordany Pirela
7.6K visualizações2 slides
Estados de la materia por
Estados de la materiaEstados de la materia
Estados de la materiaYordany Pirela
4.3K visualizações17 slides
Analisis de sistemas por
Analisis de sistemasAnalisis de sistemas
Analisis de sistemasYordany Pirela
135 visualizações3 slides
Tutorial bluej-español por
Tutorial bluej-españolTutorial bluej-español
Tutorial bluej-españolYordany Pirela
741 visualizações38 slides
Atlas del rio obi irtish por
Atlas del rio obi irtishAtlas del rio obi irtish
Atlas del rio obi irtishYordany Pirela
1.9K visualizações9 slides

Mais de Yordany Pirela(7)

Simbolos patrios del Zulia por Yordany Pirela
Simbolos patrios del ZuliaSimbolos patrios del Zulia
Simbolos patrios del Zulia
Yordany Pirela37.7K visualizações
Partes del cpu por Yordany Pirela
Partes del cpuPartes del cpu
Partes del cpu
Yordany Pirela7.6K visualizações
Estados de la materia por Yordany Pirela
Estados de la materiaEstados de la materia
Estados de la materia
Yordany Pirela4.3K visualizações
Analisis de sistemas por Yordany Pirela
Analisis de sistemasAnalisis de sistemas
Analisis de sistemas
Yordany Pirela135 visualizações
Tutorial bluej-español por Yordany Pirela
Tutorial bluej-españolTutorial bluej-español
Tutorial bluej-español
Yordany Pirela741 visualizações
Atlas del rio obi irtish por Yordany Pirela
Atlas del rio obi irtishAtlas del rio obi irtish
Atlas del rio obi irtish
Yordany Pirela1.9K visualizações
Geografia la observacion por Yordany Pirela
Geografia la observacionGeografia la observacion
Geografia la observacion
Yordany Pirela34.9K visualizações

Último

cuadro comparativo de francis.pdf por
cuadro comparativo de francis.pdfcuadro comparativo de francis.pdf
cuadro comparativo de francis.pdffrancisfuentesm
24 visualizações4 slides
Tema 15. Funciones del DNA 2023.pptx por
Tema 15. Funciones del DNA 2023.pptxTema 15. Funciones del DNA 2023.pptx
Tema 15. Funciones del DNA 2023.pptxIES Vicent Andres Estelles
29 visualizações116 slides
Sesión Misión en favor de los no alcanzados primera parte por
Sesión Misión en favor de los no alcanzados primera parteSesión Misión en favor de los no alcanzados primera parte
Sesión Misión en favor de los no alcanzados primera partehttps://gramadal.wordpress.com/
158 visualizações4 slides
PLANO CARTESIANOPARA NIÑOS.pptx por
PLANO CARTESIANOPARA NIÑOS.pptxPLANO CARTESIANOPARA NIÑOS.pptx
PLANO CARTESIANOPARA NIÑOS.pptxCarlos Campaña Montenegro
150 visualizações28 slides
POINT AYUDAS TECNICAS EN EDUCACION INFANTIL por
POINT AYUDAS TECNICAS EN EDUCACION INFANTILPOINT AYUDAS TECNICAS EN EDUCACION INFANTIL
POINT AYUDAS TECNICAS EN EDUCACION INFANTILchoquegarciaana
36 visualizações8 slides
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx por
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptxUnidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptxblogdealgebraunad
28 visualizações25 slides

Último(20)

cuadro comparativo de francis.pdf por francisfuentesm
cuadro comparativo de francis.pdfcuadro comparativo de francis.pdf
cuadro comparativo de francis.pdf
francisfuentesm24 visualizações
POINT AYUDAS TECNICAS EN EDUCACION INFANTIL por choquegarciaana
POINT AYUDAS TECNICAS EN EDUCACION INFANTILPOINT AYUDAS TECNICAS EN EDUCACION INFANTIL
POINT AYUDAS TECNICAS EN EDUCACION INFANTIL
choquegarciaana36 visualizações
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx por blogdealgebraunad
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptxUnidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx
Unidad 1. Álgebra, tigonometría y geometría analitica. Fase 2..pptx
blogdealgebraunad28 visualizações
Caso clinico VIH sida tb.pptx por AGUSTIN VEGA VERA
Caso clinico VIH sida tb.pptxCaso clinico VIH sida tb.pptx
Caso clinico VIH sida tb.pptx
AGUSTIN VEGA VERA41 visualizações
25 de Novembro no IES Monelos por Agrela Elvixeo
25 de Novembro no IES Monelos25 de Novembro no IES Monelos
25 de Novembro no IES Monelos
Agrela Elvixeo33 visualizações
Caso clìnico VIH.pptx por AGUSTIN VEGA VERA
Caso clìnico VIH.pptxCaso clìnico VIH.pptx
Caso clìnico VIH.pptx
AGUSTIN VEGA VERA37 visualizações
Discurso jurídico por AnthonyAguilera11
Discurso jurídicoDiscurso jurídico
Discurso jurídico
AnthonyAguilera1144 visualizações
PPT TECNOLOGIAS PARA LA ENSEÑANZA VIRTUAL.pptx por CarlaFuentesMuoz
PPT TECNOLOGIAS PARA LA ENSEÑANZA VIRTUAL.pptxPPT TECNOLOGIAS PARA LA ENSEÑANZA VIRTUAL.pptx
PPT TECNOLOGIAS PARA LA ENSEÑANZA VIRTUAL.pptx
CarlaFuentesMuoz37 visualizações
marketing digital pdf.pdf por estefanimilenca
marketing digital pdf.pdfmarketing digital pdf.pdf
marketing digital pdf.pdf
estefanimilenca50 visualizações
Fracciones Generatrices y Sumas Infinitas - Santiago Cruz Garcia por SantiagoCruzGarca
Fracciones Generatrices y  Sumas Infinitas - Santiago Cruz GarciaFracciones Generatrices y  Sumas Infinitas - Santiago Cruz Garcia
Fracciones Generatrices y Sumas Infinitas - Santiago Cruz Garcia
SantiagoCruzGarca115 visualizações
Ficha sesión discapacidad visual.doc por ricardo2010colegio
Ficha sesión discapacidad visual.docFicha sesión discapacidad visual.doc
Ficha sesión discapacidad visual.doc
ricardo2010colegio125 visualizações
Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda. por IvanLechuga
Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda. Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda.
Meta 1.3. Comparar las definiciones y caracterìsticas de la cultura sorda.
IvanLechuga65 visualizações
Tema 3-El átomo.pptx por fatimasilvacabral
Tema 3-El átomo.pptxTema 3-El átomo.pptx
Tema 3-El átomo.pptx
fatimasilvacabral59 visualizações
Discurso pedagógico .pdf por AnthonyAguilera11
Discurso pedagógico .pdfDiscurso pedagógico .pdf
Discurso pedagógico .pdf
AnthonyAguilera1145 visualizações
Discurso argumentativo por AnthonyAguilera11
Discurso argumentativoDiscurso argumentativo
Discurso argumentativo
AnthonyAguilera1146 visualizações

Poo 1

  • 1. LENGUAJE DE PROGRAMACIÓN II (ELEMENTOS BÁSICOS DEL LENGUAJE JAVA) ING. HOWARD PERNÍA
  • 2. Contenido Conceptos básicos • Clase • Objeto o instancia • Atributos • Métodos • Constructores • Visibilidad • Implementación en C++ y Java
  • 3. Paradigma OO Resultado de la evolución natural de la programación, devenido en metodología de programación de propósito general que simula la forma en que el hombre trabaja y cuya idea básica es que percibimos al mundo que nos rodea como una variedad de objetos.
  • 4. Ejemplo: Enviar flores a una persona de otra ciudad
  • 5. Conceptos básicos Un Objeto es una entidad con una estructura de datos interna bien definida, junto a un conjunto de acciones que describen su comportamiento. Es la unidad básica de la POO. Ejemplo: María la florista Perla la florista José el florista
  • 6. Conceptos básicos •Un objeto o instancia es una variable concreta de una clase con su propia copia de variables miembros. Un objeto tiene estado, comportamiento e identidad. • Tiene datos internos que le dan el estado. • Tiene métodos para producir comportamiento. • Cada objeto tiene una dirección única en memoria lo que le da identidad.
  • 7. Objeto Mensaje Cliente Servidor Emisor Receptor Objeto, Usuario, Aplicación Mensaje: Forma de solicitar una acción a un objeto. Conceptos básicos
  • 8. Conceptos básicos Una clase es: • una categoría de objetos con características comunes. • una plantilla que se usa para crear múltiples objetos con características similares. Las clases engloban las características de un conjunto particular de objetos. Cuando se escribe un programa en un lenguaje orientado a objetos no se definen objetos individuales sino clases de objetos. Ejemplo: Florista
  • 9. Conceptos básicos • Las clases son tipos de variables o tipos de datos creados por el usuario. • Se puede extender un lenguaje de programación adicionando nuevos tipos de datos específicos acorde a las necesidades del problema a resolver. • Las clases pueden estar formadas por variables miembros y funciones miembros.
  • 10. Implementación // En Java class Circulo { } class TCirculo { } Buenas Prácticas: • Nombrar las clases utilizando la notación Camell, comenzando o no con la letra T para indicar que es un tipo de datos. • Colocar la apertura de ambiente en la misma línea o en una línea aparte. // En C++ class Circulo { }; class TCirculo { };
  • 11. Implementación // Sintaxis en Java [<visibilidad>]class Circulo { [<miembros>] } // Sintaxis en C++ class <nombre de la clase> { private: [lista de miembros] protected: [lista de miembros] public: [lista de miembros] };
  • 12. Conceptos básicos Cada clase puede estar compuesta por: • Atributos: definen el estado de la clase. • atributos pasivos, • variables miembros, • campos. • Métodos: definen el comportamiento de la clase. • funciones miembros, • atributos activos, • operaciones, • comportamiento, • responsabilidades.
  • 13. Variables Miembros Funciones miembros Florista Nombre Salario Edad Vender flores Enviar flores a otra ciudad Ejemplos: Variables Miembros Funciones miembros Bombillo Consumo Enceder Apagar Aumentar Brillo Disminuir brillo Notación UML para representar una clase
  • 14. Los atributos son características, propiedades que hacen que un objeto se diferencie del otro. Pueden determinar apariencia, cualidades, estado, etc. Los atributos se definen por variables. Para cada variable se define su tipo. Tanto en Java como en C++ es posible definir: • Variables o atributos de clase • Variables o atributos de objeto o de instancia Atributos o variables miembros
  • 15. Sintaxis //en Java [visibilidad] [static] [final] [transient] [volatile] <Tipo> <nombreAtributo>; //en C++ Tipo nombreAtributo;
  • 16. Variables de clases • Define un atributo para toda la clase. • Aplica para la clase y para todas sus instancias. • Sólo almacena una copia con independencia de la cantidad de objetos. • Existe aunque no se haya creado ningún objeto de la clase. • Debe ser definida como static.
  • 17. Variables de objetos o de instancia • Define un atributo de un objeto en particular. • Cada instancia u objeto almacena su propia copia de variables de objeto. • Los atributos son por defecto de objetos o de instancia a menos que se califiquen como static (de clase).
  • 18. Ejemplos// en Java class Circulo { static int numCirculos = 0; double x, y, r; } // en C++ class Circulo { static int numCirculos = 0; double x, y, r; }; Las variables de clases son buenas para la comunicación entre diferentes objetos de la clase o para llevar un registro de información relativa a toda la clase. Ejemplo: el número total de círculos creados.
  • 19. Ejemplos // en Java class Circulo { static int numCirculos = 0; double x; // coordenada x double y; // coordenada y double r; // radio } // en C++ class Fecha { int d; int m; int a; static TDate defaultDate; }; Buenas prácticas Definir cada atributo en una línea independiente aunque sean del mismo tipo. Hace el código más legible y permite comentar mejor.
  • 20. Modificadores de atributos La palabra reservada final calificando a un atributo o variable sirve para declarar constantes. Si además es static, sólo se puede acceder a dicha constante anteponiendo el nombre de la clase, sin instanciarla. El valor de un atributo final tiene ser asignado en su declaración y no se puede modificar.
  • 21. Modificadores de atributos Los atributos de un objeto se consideran, por defecto, persistentes. Esto significa que al almacenar objetos en un fichero, los valores de dichos atributos deben almacenarse. Aquellos atributos que no forman parte del estado persistente del objeto porque almacenan estados transitorios o puntuales del objeto, se declaran como transient (transitorios).
  • 22. Modificadores de atributos Si una clase contiene atributos de objeto que son modificados asíncronamente por distintos threads (hilos) que se ejecutan concurrentemente, puede utilizar atributos volatile. Esto le indica a la máquina virtual Java que debe cargar el atributo desde memoria antes de utilizarlo y volver a almacenarlo en memoria después, para que cada hilo pueda “verlo” en un estado coherente.
  • 23. Métodos o funciones miembros El comportamiento de una clase se implementa a través de sus métodos o funciones miembros. Una clase o un objeto puede llamar métodos de otras clases para: • Indicar a otro objeto que cambie • Pedir a otro objeto que haga algo Es posible definir: • Métodos de instancia: aplican a cada objeto de la clase. • Métodos de clase (en Java).
  • 24. Métodos de clase • Están disponibles para cualquier instancia de la clase y para otras clases. • No se requiere una instancia de la clase para poder invocar a un método de clase. • Para definir los métodos de clase hay que anteponer a la definición del método la cláusula static.
  • 25. Tipos de funciones miembros • Funciones (procedimientos) • Constructores • Destructores En C++ y en Java todas son funciones, no existen procedimientos.
  • 26. Definiendo métodos • Cada objeto puede satisfacer sólo ciertos requerimientos. • Los requerimientos que puede resolver el objeto están definidos por su interfaz y los tipos que hay en ella. • Cuando se hace un requerimiento a un objeto un método es llamado.
  • 27. Definiendo métodos La definición básica de un método cuenta de: • Tipo de retorno (tipo de objeto o tipo primitivo) • Nombre del método • Lista de parámetros • Cuerpo del método <tipo-retorno/void> nombre([parámetros]) { //cuerpo del método } //en Java [<visibilidad>]<tipo-retorno/void> nombre([parámetros]) { //cuerpo del método } Las tres primeras partes se conocen como interfaz o firma del método.
  • 28. Definiendo métodos <tipo-retorno/void> nombre ([lista de parámetros]) { //cuerpo del método } Tipo-retorno Es el tipo primitivo o la clase del valor devuelto. void indica que no hay valor de retorno. Nombre Debe expresar claramente lo que se hace en el cuerpo del método.
  • 29. Definiendo métodos <tipo-retorno/void> nombre ([lista de parámetros]) { //cuerpo del método } Lista de parámetros Conjunto de declaraciones de variables (tipo-variables) separadas por coma que reciben valor al invocar al método. Aunque dos parámetros tengan el mismo tipo no se puede abreviar. Los párametros se convierten en variables locales en el cuerpo del método. Si un parámetro se declara const (en C++) o final (en Java) no se puede variar en el cuerpo del método.
  • 30. Definiendo métodos <tipo-retorno/void> nombre ([lista de parámetros]) { //cuerpo del método } Lista de parámetros Puede que un método no tenga parámetros. Los parámetros se inicializan en cada llamada al método al cual pertenecen con los valores especificados al llamarlos. En C++ se permite que los parámetros tengan valores por defecto.
  • 31. Parámetros-Valores por defecto • Una función miembro puede tener o no valores por defecto. • Si los tiene, a partir del primero que sea por defecto, el resto tiene que ser por defecto. • Los valores por defecto no pueden redeclararse. class Clase { void f(int = 1); void h(int); //error, 2do tiene que ser por defecto void g(int = 1, int, int =2); void m(int, int, int =2); // ok }; void Clase::f(int pP = 2) //error, no puede redeclararse
  • 32. Definiendo métodos <tipo-retorno/void> nombre ( [lista de parámetros] ) { //cuerpo del método } En el cuerpo del método se pueden definir: • Expresiones • Condicionales • Ciclos • Llamadas a métodos de otras clases, etc. A menos que aparezca como tipo de retorno void en el cuerpo del método hay que devolver la variable del tipo indicado en cualquier punto mediante la clásula return.
  • 33. Ejemplo en Java public class Circulo { static int numCirculos = 0; double x, y, r; //método de objeto para comparar círculos public Circulo elMayor(Circulo c) { if (r >= c.r) return this; else return c; } // método de clase para comparar círculos public static Circulo elMayor(Circulo c, Circulo d) { if (c.r >= d.r) return c; else return d; } }
  • 34. Ejemplo Utilizando los métodos de clase, Java ofrece entre otras la clase Math, donde define un conjunto de operaciones matemáticas. Así, desde cualquier método de una clase se puede invocar al método de clase sqrt definido en la clase Math: float raiz = Math.sqrt(345);
  • 35. Sobrecarga de métodos Tanto en Java como en C++ es posible definir varios métodos para la misma clase con el mismo nombre pero con diferencias en: En la lista de argumentos: • el número • el tipo de los argumentos • o ambos Esto se conoce como sobrecarga de métodos. Si se tratan de crear dos métodos con la misma interfaz y diferentes tipos de retorno, la clase no se compila.
  • 36. Definiendo clases En Java: • todo es una clase. No se pueden definir variables o funciones que no pertenezcan a una clase. • las clases se declaran y se implementan en el mismo fichero (<nombre>.java). En C++: • es posible definir variables y funciones que no pertenezcan a una clase. • las clases se declaran en un fichero <nombre>.h y se implementan sus métodos en un fichero <nombre>.cpp a menos que la función sea inline.
  • 37. Ejemplo en Java // en Java, fichero.java class Date { int d; public: int D() { return d; } }
  • 38. Ejemplo en C++ // en C++, fichero.h class Date { int d; public: //por defecto es inline int D(){return d;} }; // en C++, fichero.h class Date { int d; public: int D(); }; //En fichero.cpp inline int Date::D() { return d; } //otra variante int Date::D() { return d; }
  • 39. Funciones inline (C++) • Útil para funciones pequeñas y frecuentemente usadas. • El llamado a la función se sustituye por el código. • Su definición se replica en cada unit que incluya la unit en que fue definida.
  • 40. Métodos en Java [Visibilidad] [static] [abstract] [final] [native] [synchronized] TipoDevuelto NombreMétodo ([ ListaParámetros]) [throws ListaExcepciones] Los métodos abstract se declaran en las clases abstract y no se implementa su cuerpo. Un método declarado final no puede ser redefinido. Se comporta como una función inline en C++. Donde se llama se carga el código completo del método. El compilador puede decidir no cargarlo si el método es muy grande.
  • 41. Métodos en Java Los métodos native, son métodos que se encuentran escritos en otro lenguaje de programación . Los métodos synchronized son métodos especiales para cuando varios hilos pueden acceder concurrentemente a los mismos datos.
  • 42. Métodos constantes (C++) Una función miembro se declara constante (usando const) para indicar que no altera el estado de la clase. • Un parámetro también puede ser declarado constante. • El compilador alerta si la función fue declarada const y en su definición se trata de cambiar el estado de la clase. • El compilador alerta si el objeto fue declarado const y se trata de invocar un método no constante.
  • 43. Métodos constantes (C++) • Si el método se implementa fuera de la clase debe llevar el sufijo const en su interfaz. • Una función miembro const puede ser invocada por objetos constantes y no constantes. • Una función miembro no constante solo puede ser llamada por objetos no constantes.
  • 44. Métodos constantes (C++) class Fecha { private: int d; int m; public: int D() const {return d;} void IncDia(int); int M() const; }; int Fecha::M(){…} // error, falta const int Fecha::M() const {…} //ok int Fecha::M()const{//error return ++m; }
  • 45. Constructor • Su nombre coincide con el de la clase. • No tiene valor de retorno (ni void) • Una clase puede tener varios constructores (ejemplo típico de sobrecarga de funciones), pero la lista de parámetros tiene que variar. • Los constructores deben diferir en tipo y/o cantidad de parámetro. Es un tipo especial de método utilizado para crear objetos o instancias de una clase. Características
  • 46. Constructor • Si la clase tiene un constructor, todos los objetos de la clase deben ser inicializados invocándolo. • Si el constructor tiene parámetros al invocarlo hay que suministrarlos. • De no definirse un constructor para la clase, el compilador genera un constructor por defecto. • El constructor por defecto, no tiene parámetros e inicializa cada atributo con el valor nulo por defecto. • Si un constructor no tiene parámetros se considera el constructor por defecto. Características
  • 47. Constructores en C++ • Existe un tipo especial de constructor llamado constructor copia, cuyo parámetro es una referencia a una instancia de la clase. • El constructor copia debe copiar cada miembro de la clase. • No hay constructores virtuales ya que al construir se debe conocer el tipo exacto del objeto.
  • 48. Uso del this El this es un puntero (C++) o referencia (Java) al objeto. El programador no lo crea ni lo inicializa. Cuando se llama a una función miembro, el código oculto genera el this con la dirección del objeto y lo pasa como parámetro.
  • 49. Uso del this En el cuerpo de método se puede referir al objeto actual, desde donde fue llamado el método, utilizando el this. En Java, sólo se puede usar this dentro del cuerpo de la definición de un método de instancia, nunca en el cuerpo de un método de clase.
  • 50. Ejemplo en Java public class Circulo { static int numCirculos = 0; public static final double PI=3.14159265358979323846; public double x, y, r; public Circulo(double x, double y, double r) { this.x = x; this.y = y; this.r = r; numCirculos++; } public Circulo(double r) { this(0.0, 0.0, r); } public Circulo(Circulo c) { this(c.x, c.y, c.r); } public Circulo() { this(0.0, 0.0, 1.0); } public double Perimetro() {return 2.0 * PI * r;} public double Area() {return PI * r * r;} }
  • 51. Uso del this public class Rectangulo { private static int numRectangulos = 0; protected double x1, y1, x2, y2; public Rectangulo(double p1x, double p1y, double p2x, double p2y) { x1 = p1x; x2 = p2x; y1 = p1y; y2 = p2y; numRectangulos++; } public Rectangulo(){ this(0, 0, 1.0, 1.0); } } En Java, con this se invoca al constructor general desde otro constructor.
  • 52. Ejemplo en C++ class Fecha { private: int d; int m; int y; public: Fecha(); //constructor por defecto Fecha(int, int); //día y mes del año actual Fecha(int, int, int); Fecha(const TDate&) //constructor copia };
  • 53. Uso del this // en Java public Circulo(double pX, double pY, double pR) { this.x = pX; // x es un atributo this.y = pY; this.r = pR; numCirculos++; } // en C++ class Fecha { int d;… public: Fecha(int, int, int); Fecha& IncD(int); }; // en .cpp Fecha& Fecha::IncD(int pInc) { d += pInc; return *this; }
  • 54. Constructores (en C++) // Variante 1: inicialización de miembros // todo en el fichero .h class Fecha { private: int d; int m; int a; public: Fecha(int pD, int pM, int pY) : d(pD), m(pM), a(pA) {} };
  • 55. Constructores (en C++) // Variante 2: parte en el .h y otra en el .cpp // en el .h class Fecha { private: int d; … public: Fecha(int, int, int); }; //en .cpp Fecha::Fecha(int pD, int pM, int pA) { d = pD; m = pM; a = pA; } Sólo es preciso declarar la interfaz del método
  • 56. Constructor copia (en C++) <Nombre clase>(<Nombre clase>&<variable>) TDate(TDate&) Tiene que ser por referencia (&), porque si se pasa por valor se hace una copia en la pila y con ello se invoca al constructor copia recursivamente. Fecha::Fecha(Fecha& pFecha) { d = pFecha.d; m = pFecha.m; a = pFecha.a; }
  • 57. Creando una instancia en Java Circulo c = new Circulo(); // equivale a Circulo c; c = new Circulo(); Se crea una referencia llamada c a un objeto de la clase Circulo. Crear una referencia es como crear un “nombre” válido para referirse a un objeto de la clase Circulo. La referencia contiene la dirección de memoria donde se encuentra el objeto.
  • 58. Creando instancias en Java En Java solo se crean instancias de manera explícita urilizando el operador new. Circulo circulo = new Circulo(); El operador new crea una nueva instancia de la clase, reserva memoria para ella e invoca al constructor. La instrucción anterior además asigna a la referencia circulo el objeto creado. Nombre de la clase Referencia al objeto constructor
  • 59. Creando una instancia en C++ Hay dos formas de crear instancias en C++. • Objetos locales (Estática) • Objetos arbitrarios (Dinámica) Los objetos locales se crean y se destruyen automáticamente. TDate date(30,9,2000); Declara la variable date de tipo TDate (objeto) e invoca al constructor quien inicializa sus atributos con los valores pasados por parámetro.
  • 60. Creando una instancia en C++ Los arbitrarios (dinámicos) tienen duración arbitraria, los crea y los destruye el usuario con new y delete respectivamente. TDate* myBirthday = new TDate (30,9,2000); Se declara un puntero a la clase TDate (myBirthday) y se llama al operador new que calcula el tamaño del objeto, devuelve el tipo correcto de puntero, invoca al constructor de la clase y asigna la dirección al puntero.
  • 61. Composición de clases Cuando una instancia se construye deben construirse también todas sus instancias miembros. Circulo Punto class Circulo { Punto punto; float radio; }; Los atributos de una clase pueden ser instancias de otras clases. La relación tiene-un que se estable entre las clases se denomina composición.
  • 62. Ejemplo en C++ class Punto { private: int x; int y; public: int X() const {return x;} int Y() const {return y;} Punto(int pX = 0,int pY = 0): x(pX),y(pY) {} Punto(Punto& pPunto): x(pPunto.X()), y(pPunto.Y()) {} };
  • 63. Composición de clases class Circulo { Punto punto; float radio; public: Circulo(int pX=0,int pY=0,float pRadio=1): radio(pRadio), punto(pX,pY){} Circulo(Punto pPunto, float pRadio=1): radio(pRadio), punto(pPunto){} }; Circulo* circulo = new Circulo(1,2,3); Punto punto = Punto(2,4); Circulo* circulo2 = new Circulo(punto,8);
  • 64. Paso de parámetros en Java En Java, los parámetros pasan como siguen: • Los tipos básicos o primitivos se pasan por valor. • Los arreglos y los objetos se pasan por referencia por lo que si se modifican en el cuerpo del método al salir su valor queda alterado.
  • 65. Paso de parámetros en C++ Los parámetros se pueden pasar por: • Valor. • Referencia. • Puntero. En los dos últimos casos si se modifican en el cuerpo del método al salir su valor queda alterado. Cuando se pasa un objeto por referencia o por puntero y se quiere evitar lo anterior, se declara const. El pase por referencia o por puntero es más eficiente.
  • 66. Visibilidad en Java Controla el acceso a los miembros, tanto a atributos como a métodos. El acceso en C++ puede ser: • private, protected y public • El acceso es por defecto private. El acceso en Java puede ser: • private, protected, package y public • El acceso es por defecto package.
  • 67. Visibilidad en Java public: puede ser usada por cualquier clase. protected: puede ser usada por: • funciones miembros de la clase, • funciones miembros de las subclases. • funciones miembros de las clases del propio paquete. package: puede ser utilizada por todas las clases del paquete. private: sólo puede ser usado por las funciones miembros de la clase.
  • 68. Visibilidad en Java Cuando no se especifican permisos de acceso (public, private o protected) se supone la opción por defecto, que es package. Si no se ha definido ningún paquete, se utiliza el package por defecto que es el directorio donde están definidas las clases. Es preciso especificar la visibilidad de cada miembro ya sea atributo o método de forma independiente.
  • 69. Visibilidad en Java Visibilidad Acceso desde: Propia clase subclases paquete Todas las clases private X No No No protected X según X No public X X X X por defecto X No X No
  • 70. Funciones amigas (en C++) • No son miembros de la clase (disminuye el tamaño del objeto). • Una función amiga se define fuera del alcance de la clase pero tienen acceso a los miembros privados de la clase. • La amistad es independiente del control de acceso, por lo que se coloca en cualquier parte de la definición de la clase. • Coloque la palabra friend antes de la declaración de la función. • Las funciones amigas pueden definirse inline. • La amistad no es simétrica.
  • 71. Funciones amigas (en C++) • No funciona el this porque no es miembro de la clase. • No se puede declarar como amiga ni: - Constructor, - Destructor, - Funciones virtuales Stroutrup, sugiere usarlas: • Para evitar miembros de datos públicos • Una función amiga para más de una clase.
  • 72. Funciones amigas (en C++) class ClaseA { int a; public: ClaseA(int pA): a(pA){} int A(){return a;} friend int B(ClaseA&); int C(){return B(*this);} }; int B(ClaseA& pClaseA){ return pClaseA.a + 5; // ok, puede acceder a lo privado } ClaseA claseA(3); int i = claseA.A(); // i=3 i = claseA.B(claseA); // error, B no es miembro de TClaseA i = claseA.C(); // i=8 Las funciones amigas requieren la especificación de objeto para acceder a los miembros.
  • 73. Clases amigas (en C++) class ClaseB { int b; public: ClaseB(int pB){b = pB;} int B(ClaseA& pClaseA){return pClaseA.a;} char BB(ClaseA& pClaseA){return pClaseA.AA();} }; class ClaseB; class ClaseA { friend ClaseB; int a; char AA(){return a;} public: ClaseA(int pA){a = pA;} int A(){return a;} }; TClaseA declara a TClaseB como amiga. Esto permite que TClaseB acceda a todos los atributos y métodos de la clase TClaseA aunque sean privados.
  • 74. Visibilidad en C++ class TExample { private: [lista de miembros] protected: [lista de miembros] public: [lista de miembros] }; private: Utilizados por funciones miembros de la propia clase o por amigas de la clase. protected: Utilizados por funciones miembros o amigas de la propia clase y por funciones miembros y amigas de cualquier clase derivada. public: Utilizados por cualquier función pertenezca o no a la clase.
  • 75. Visibilidad en C++ Privados (private) Públicos (public) Protegidos (protected) Públicos Privados Métodos  Atributos Protegidos
  • 76. Encapsulamiento Es una de las propiedades de la POO que define que el objeto debe ser una cápsula o caja negra que encapsula su funcionamiento y estructura interna. Sólo se ven desde afuera los miembros (la interfaz para el caso de los métodos) con visibilidad pública. Buenas Prácticas: los atributos deben ser privados o protegidos y se debe acceder a ellos a través de los métodos que pueden ser públicos.
  • 77. Encapsulamiento instancia1 instancia2 CLASE INTERFAZ de la CLASE CLASE Datos y Funciones Miembros Privadas, Protegidas y de Paquete Atributos Públicos Métodos Públicos
  • 78. Encapsulamiento El encapsulamiento permite: • Ocultar detalles de implementación. • Simplificar el programa. • Minimizar el impacto del cambio. • Garantizar integridad de los datos.
  • 79. Referencias en Java Una referencia es un apuntador que se usa para indicar el valor de un objeto. Cuando se asigna un objeto a una variable o se pasa un objeto a un método como argumento no se usan objeto, ni copias de objetos sino referencias a los objetos. Ejemplo: Point pt1, pt2; pt1 = new Point (100, 100); pt2 = pt1; pt1.x= 200; pt1.x= 200; System.out.println(“Punto1: = ” + pt1.x + ”, “ + pt1.y); System.out.println(“Punto2: = ” + pt2.x + ”, “ + pt2.y); Punto1: 200, 200 Punto2: 200, 200
  • 80. Referencias en Java Punto1: 200, 200 Punto2: 200, 200 Punto p1; Punto p2; p1 = new Punto(100, 100); p2 = p1; p1.x = 200; p1.x = 200; System.out.println(“Punto1: = ” + p1.x + “, ” + p1.y); System.out.println(“Punto2: = ” + p2.x + “, ” + p2.y);
  • 81. Referencias en Java Punto p1; Punto p2; p1 = new Punto(100, 100); p2 = new Punto(300, 300); p2 = p1; p1.x = 200; p1.x = 200; System.out.println(“Punto1: = ” + p1.x + “, ” + p1.y); System.out.println(“Punto2: = ” + p2.x + “, ” + p2.y); Punto1: 200, 200 Punto2: 100, 100 Hay que probar esto
  • 82. Acceso a variables de instancia y método En Java Circulo c = new Circulo(2.0, 2.0, 4.0); System.out.println("Radio = “ + c.r + "unidades."); c.r = 5; // se cambia el valor del radio Para referirse a variables de instancias y métodos de objetos se puede usar la notación de punto: c: referencia al objeto + operador . + nombre de la variable miembro r (c.r). Estas expresiones de evalúan de izquierda a derecha.
  • 83. Acceso a variables de clase Circulo c = new Circulo(2.0, 2.0, 4.0); System.out.println(c.numCirculos + “ círculos creados."); Circulo.numCirculos = 5; // se cambia el valor Para accesar y cambiar las variables de clases se puede usar la notación de punto utilizando tanto el nombre de la instancia como de la clase a la izquierda del punto. Se sugiere usar el nombre de la clase, ya que el nombre de la instancia puede resultar confuso.
  • 84. Acceso a métodos Se pueden combinar llamadas de métodos anidados y referencias a variables de instancia. System.out.println(); Systems describe el comportamiento para el sistema en que se está ejecutando Java System.out es una variable de clase que contiene una instancia de la clase PrintStream. Este objeto de PrintStream representa la salida estándar del sistema. Los objetos PrintStream tienen un método println que envía una cadema al flujo de salida.
  • 85. Acceso a métodos public Circulo elMayor(Circulo c) { if (this.r>=c.r) return this; else return c; } public static Circulo elMayor(Circulo c, Circulo d) { if (c.r>=d.r) return c; else return d; } Circulo c = c1.elMayor(c2); Circulo c = Circulo.elMayor(c1, c2); Ambas funciones (sobrecargadas) retornan una referencia al objeto que constituye el mayor círculo.
  • 86. Acceso a variables y métodos en C++ En función de como se cree el objeto hay dos formas de acceder a los atributos y funciones miembros. 1- objeto.<atributo o función miembro> Fecha fecha(5,1,2000); fecha.IncA(4); 2- objeto-><atributo o función miembro> Fecha* miCumple = new Fecha(5,1,2000); miCumple->IncA(4);
  • 87. Alcance de variables En C++, existen variables: •Globales •Locales •Variables de instancia •Variables de clase En Java, existen variables: •Locales •Variables de instancia •Variables de clase En Java no existen variables globales.
  • 88. Alcance de variables Java busca primero una variable en el bloque actual, después en el método. Si la variable no es local, la busca como variable de instancia o variable de clase. Si no la encuentra, la busca en las superclases. Si una variable de instancia tiene el mismo nombre de una variable local (sum) y es preciso trabajar en el método con ambas: this.sum // se refiere a la variable de instancia sum // se refiere a la variable local Buenas prácticas Hay que ser muy cauteloso al nombrar todos los tipos de variables
  • 89. Alcance de variables int a = 1; // variable global class TClase { int a; public: TClase(int); }; TClase clase(5); TClase.a; // error, trata de encontrala en el // ámbito de TClase y es privada. En C++, las clases tienen su propio ámbito.
  • 90. C++ y Java La pila: Se ubica en el área de la memoria RAM y el almacenamiento en ella es extremadamente rápido y eficiente. El compilador de Java debe saber mientras crea el programa, el tamaño exacto y el tiempo de vida de todos los datos que se almacenan en la pila. Esto limita la flexibilidad de los programas, así que aun cuando algunos almacenamientos en Java son en la pila, en particular las referencias y los objetos en Java no son puestos en la pila.
  • 91. Bibliografia El heap: Es un área de propósito general ubicada en la memoria RAM y donde se almacenan todos los objetos en Java. El compilador no necesita saber cuanto espacio debe reservar en el heap, ni por cuanto tiempo. Sin embargo asignar espacio en el heap toma más tiempo que asignar espacio en la pila.
  • 92. Bibliografia • Centro de Estudio de Ingeniería de Sistemas (CEIS) Instituto Superior Politécnico “José Antonio Echeverría” (CUJAE) • An introduction to Object-Oriented Programming. Timothy Budd. Addison Wesley, 1991. • The C++ Programming Language. Third Edition. Bjarne Stroustrup. Addison Wesley, 1997. • Thinking in Java. Third Edition. Bruce Eckel, 2002.