1. PROGRAMACIÓN
ORIENTADA A
OBJETOS
Curso de programación orientada a objetos con java
Universidad Técnica Particular de Loja – Ecuador
Daniel Irene – pdirene@gmail.com
2. AGENDA
üQue es programación orientada a
objetos (Clases, Objetos, métodos y variables de instancia).
üAtributos (primitivos/por referencia), niveles de
acceso (public, private, protected, static) e
inicialización (final, this)
üMétodos, propiedades (set, get),
constructores y sobrecarga.
üEncapsulamiento, ocultamiento y
paquetes.
3. Traduce a todo el mundo real, invisible o
invisible como un objeto, el cual tiene
atributos que lo describen, métodos
(acciones) que le dan un sentido y
mensajes para comunicarse de un
objeto a otro; todo ello de manera
abstraída en una clase.
PARADIGMA DE LA
PROGRAMACIÓN
ORIENTADA A
OBJETOS
http://www.howdesign.com/web-design-resources-technology/how-to-present-creative-ideas-to-clients/
7. Una clase es el molde para crear
objetos, abstrae los datos (atributos) y
operaciones (métodos) de un objeto a
modo de caja negra (ejemplo en libro base:
conducción de un vehículo).
PROGRAMACIÓN
ORIENTADA A OBJETOS
¿QUE ES UNA CLASE?
10. CLASES
CLASE = Empresa Publica CLASE = Empresa Privada
CLASE = Empresa
otras
publica
privada
11. Gráficamente una clase en UML es un
rectángulo dividido en tres partes
donde la (1) es el nombre de la clase;
(2) los atributos con niveles de acceso
+publico -privado y #protegido y (3)
son los métodos con niveles de acceso
+publico -privado y #protegido.
NOMENCLATURA
UML DE UNA CLASE
1
2
3
12. 1
2
3
public class Personas {
//Atributos ó campos
public String sexo;
protected double edad;
public double estatura;
private double peso;
protected int numIdentidad;
public String estado;
//Métodos (void), funciones (return)
public void respirar() {
estado = "respirando";
}
protected void caminar() {
estado = "caminando";
}
private void alimentar() {
estado = "alimentando";
}
public String investigar() {
estado = "investigando";
return estado;
}
}
1
2
3
13. public class Personas {
//Atributos ó campos
public String sexo;
protected double edad;
public double estatura;
private double peso;
protected int numIdentidad;
public String estado;
//Métodos (void), funciones (return)
public void respirar() {
estado = "respirando";
}
protected void caminar() {
estado = "caminando";
}
private void alimentar() {
estado = "alimentando";
}
public String investigar() {
estado = "investigando";
return estado;
}
}
class TestPersona{
public static void main(String[] args) {
Personas personaA = new Personas();
Personas personaB = new Personas();
Personas personaC = new Personas();
personaA.sexo = "Masculino";
personaA.caminar();
System.out.println("personaA d sexo <"
+personaA.sexo+"> esta <"
+personaA.estado+">");
}
}
Output - NomProyecto (run)
C:>cd C:FolderMisJava
C:FolderMisJava>javac Personas.java
C:FolderMisJava>java TestPersona
personaA d sexo <Masculino> esta <caminando>
C:FolderMisJava>
14. public class Personas {
//Atributos ó campos
public String sexo;
protected double edad;
public double estatura;
private double peso;
protected int numIdentidad;
public String estado;
//Métodos (void), funciones (return)
public void respirar() {
estado = "respirando";
}
protected void caminar() {
estado = "caminando";
}
private void alimentar() {
estado = "alimentando";
}
public String investigar() {
estado = "investigando";
return estado;
}
}
class TestPersona{
public static void main(String[] args) {
Personas personaA = new Personas();
Personas personaB = new Personas();
Personas personaC = new Personas();
personaA.sexo = "Masculino";
personaA.caminar();
System.out.println("personaA d sexo <"
+personaA.sexo+"> esta <"
+personaA.estado+">");
}
}
Personas personaA = new Personas();
Personas personaB = new Personas();
Personas personaC = new Personas();
Nombre
de la clase
Nombre
del objeto
Invoca al
constructor
Nombre del
constructor
15. Lo +public: es accesibles dentro/fuera
de la clase, a través del objeto que la
instancia; lo -private: es accesibles
solo dentro de la misma clase
(ocultamiento de información) y lo
#protected: dentro de la clase y otras
que pertenezcan al mismo paquete.
NIVELES O
MODIFICADORES DE
ACCESO
16. public class Personas {
//Atributos ó campos
public String sexo;
protected double edad;
public double estatura;
private double peso;
protected int numIdentidad;
public String estado;
//Métodos (void), funciones (return)
public void respirar() {
estado = "respirando";
}
protected void caminar() {
estado = "caminando";
}
private void alimentar() {
estado = "alimentando";
}
public String investigar() {
estado = "investigando";
return estado;
}
}
class TestPersona{
public static void main(String[] args) {
Personas personaA = new Personas();
Personas personaB = new Personas();
Personas personaC = new Personas();
personaA.sexo = "Masculino";
personaA.caminar();
System.out.println("personaA d sexo <"
+personaA.sexo+"> esta <"
+personaA.estado+">");
}
}
ü personaA.estatura = 175.5;
ü personaA.numIdentidad = 1105467862;
× personaA.peso = 70;
+
-
#
17. Existen dos tipo (nombres) de métodos genéricos para
inicializar los valores de lo cada atributo de una
clase:
ü set: para inicializar los atributos con un valor
determinado
ü get: para obtener dichos valores.
El constructor de la clase: método especial que
inicializa todos (o algunos de) sus atributos. Si la clase
que no tiene uno, el compilador crea uno vacío por
defecto; si ya se especifica uno, no se crea el vacío
por defecto.
CONSTRUCTOR Y
MÉTODOS DE
ACCESO A
ATRIBUTOS DE LA
CLASE
18. Output - NomProyecto (run)
Peso de PersonaA <70.0>
Peso de PersonaB <75.0>
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
}
class TestPersona{
public static void main(String[] args) {
Persona personaA = new Persona();
Persona personaB = new Persona("M",34,170,
75,1105678432,"Activo");
personaA.setPeso(70);
System.out.println("Peso de PersonaA "
+ "<"+personaA.getPeso()+">");
System.out.println("Peso de PersonaB "
+ "<"+personaB.getPeso()+">");
}
}
public class Persona {
//Atributos ó campos
public String sexo;
protected double edad;
public double estatura;
private double peso;
protected int numIdentidad;
public String estado;
//Constructores
public Persona() { }
public Persona(String sexo, double edad,
double estatura, double peso,
int numIdentidad, String estado) {
this.sexo = sexo;
this.edad = edad;
this.estatura = estatura;
this.peso = peso;
this.numIdentidad = numIdentidad;
this.estado = estado;
}
//Métodos SET (void), funciones GET (return)
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
19. Las variables que se
declaran en el cuerpo
de un método
específico se conocen
como variables
locales, y sólo se
pueden utilizar en
ese método.
Los
atributos/campos
de la clase se
conocen como
variables globales, y
son accesibles en
todo el cuerpo de la
clase.
Por lo general los
valores de los
atributos de una
clase se inicializan
dentro del
constructor de la
clase.
“
”
20. Tipos primitivos de
datos: boolean, byte,
char, short, int, long,
float y double
Tipos de datos por
referencia: String, o
cualquier otro
objetivo que apunte
a una clase, son
tipos de dato no
primitivos.
Toda clase
que usted
declara
representa
un nuevo
tipo en Java.
“
”
21. public class Persona {
//Atributos ó campos
public String sexo;
protected double edad;
public double estatura;
private double peso;
protected int numIdentidad;
public String estado;
//Constructores
public Persona() { }
public Persona(String sexo, double edad,
double estatura, double peso,
int numIdentidad, String estado) {
this.sexo = sexo;
this.edad = edad;
this.estatura = estatura;
this.peso = peso;
this.numIdentidad = numIdentidad;
this.estado = estado;
}
//Métodos SET (void), funciones GET (return)
public String getSexo() {
return sexo;
}
public void setSexo(String sexo) {
this.sexo = sexo;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
}
class TestPersona{
public static void main(String[] args) {
Persona personaA = new Persona();
Persona personaB = new Persona("M",34,170,
75,1105678432,"Activo");
personaA.setPeso(70);
System.out.println("Peso de PersonaA "
+ "<"+personaA.getPeso()+">");
System.out.println("Peso de PersonaB "
+ "<"+personaB.getPeso()+">");
}
}
# datos primitivo: 4
# datos por referencia: 4
# nuevos tipos: 1
22. Si un método contiene una variable
local con el mismo nombre que uno
de los campos de su clase, la
variable local oculta el campo en el
alcance del método. El método
puede usar la referencia this para
hacer referencia al campo oculto en
forma explícita.
PREFIJO THIS
PARA INSTANCIAR
23. public class Personas {
//Atributos ó campos
public String sexo;
protected double edad;
public double estatura;
private double peso;
protected int numIdentidad;
public String estado;
//Constructores
public Personas() { }
//Métodos SET (void), funciones GET (return)
public double calcularEdad(int anioNacimiento){
int edad;
edad = 2015 - anioNacimiento;
this.edad = edad; //setEdad(edad);
return edad;
}
public double getEdad() {
return edad;
}
public void setEdad(double edad) {
this.edad = edad;
}
class TestPersonas{
public static void main(String[] args) {
Personas personaA = new Personas();
personaA.calcularEdad(1970);
System.out.println("Edad de personaA <"
+personaA.getEdad()+"> anios");
}
}
Output - NomProyecto (run)
Edad de personaA <45.0> anios
24. Los constructores
sobrecargados
permiten
inicializar los
objetos de una
clase de varias
formas distintas.
CONSTRUCTORES
SOBRECARGADOS
public class Personas {
//Atributos ó campos
public String sexo;
protected double edad;
public double estatura;
private double peso;
protected int numIdentidad;
public String estado;
//Constructores
public Personas() { }
public Personas(double edad, double peso,
int numIdentidad) {
this.edad = edad;
this.peso = peso;
this.numIdentidad = numIdentidad;
}
public Personas(String sexo, double edad,
double estatura, double peso,
int numIdentidad, String estado) {
this.sexo = sexo;
this.edad = edad;
this.estatura = estatura;
this.peso = peso;
this.numIdentidad = numIdentidad;
this.estado = estado;
}
//Métodos SET (void), funciones GET (return)
25. Una variable
static
representa la
información a
nivel de clase
que se
comparte
entre todos los
objetos de la
clase.
Las variables
static tienen
alcance en toda
la clase. Se
puede tener
acceso a los
miembros
public static de
una clase a
través de una
referencia a
cualquier objeto
de la clase.
Los miembros
de clase static
existen aun
cuando no
existan
objetos de la
clase; están
disponibles
tan pronto
como se carga
la clase en
memoria, en
tiempo de
ejecución.
“
”
Un método que se
declara como static
no puede acceder a
los miembros de
clase que no son
static, ya que un
método static puede
llamarse incluso
aunque no se hayan
creado instancias de
objetos de la clase.
26. public class PersonasV4 {
//Atributos ó campos
public static String nombreEmpresa;
public String sexo;
public int edad;
//Constructores
public PersonasV4() { }
public PersonasV4(String sexo, int edad) {
nombreEmpresa = "UTPL";
this.sexo = sexo;
this.edad = edad;
}
//Métodos estaticos y no estaticos
public static double calcularEdad(int anioNacimiento){
int edad = 2015 - anioNacimiento;
return edad;
}
public String getNombreEmpresa(){
return nombreEmpresa;
}
}
class TestPersonasV4{
public static void main(String[] args) {
System.out.println("Nombre de empresa de Personas <"+PersonasV4.nombreEmpresa+">");
PersonasV4 personaA = new PersonasV4("M",4);
System.out.println("Nombre de empresa de Personas <"+PersonasV4.nombreEmpresa+">");
PersonasV4 personaB = new PersonasV4();
System.out.println("Nombre de empresa de Personas <"+personaB.getNombreEmpresa()+">");
}
}
Output - NomProyecto (run)
Nombre de empresa de Personas <null>
Nombre de empresa de Personas <UTPL>
Nombre de empresa de Personas <UTPL>
27. ü Un Paquete en Java es un contenedor de clases
que permite agrupar las distintas partes de un
programa cuya funcionalidad tienen elementos
comunes.
ü Antes de poder importar una clase en varias
aplicaciones, ésta debe colocarse en un paquete.
Sólo puede haber una declaración package en
cada archivo de código fuente de Java
nomClase.java
QUE ES UN PAQUETE
28. Cada clase en la API de Java
pertenece a un paquete que
contiene un grupo de clases
relacionadas. Los paquetes ayudan a
administrar la complejidad de los
componentes de una aplicación y
facilitan la reutilización de software.
PAQUETE EN JAVA
http://docs.oracle.com/javase/7/docs/api/
29. No se requiere de import cuando se
desea usar una clase que esta
dentro de un mismo paquete, o si
accedemos a sus miembros
directamente con el nombre de la
clase.
IMPORTAR CLASES
30. package PaqueteA;
public class ClasesA1 {
public int atributoA;
public int getAtributoA() {
return atributoA;
}
}
package PaqueteA;
import PaqueteB.*;
public class ClasesA2 {
ClasesA1 objetoA = new ClasesA1();
ClasesB1 objetoB = new ClasesB1();
}
package PaqueteB;
public class ClasesB1 {
ClasesA1 objeto = new ClasesA1();
}
31. Al compilar una clase en un paquete, la opción -d de línea de comandos de javac especifica en dónde se debe
almacenar el paquete, y hace que el compilador cree los directorios del paquete, en caso de que no existan.
La ruta de clases para el compilador y la JVM se puede especificar proporcionando la opción –classpath al
comando javac o java, o estableciendo la variable de entorno CLASSPATH.
La ruta de clases para la JVM también se puede especificar mediante la opción -cp de línea de comandos. Si las
clases deben cargarse del directorio actual, incluya un punto (.) en la ruta de clases.
Un Paquete en Java es un contenedor de clases que permite agrupar las distintas partes de un programa cuya
funcionalidad tienen elementos comunes.
IMPORTAR CLASES