Está en la página 1de 38

Programación Orientada

a Objetos (Object
Oriented Programming)
Parte 1

Por: Vicente Aguilera Pérez


¿POO o OOP?

El sistema programación orientada a objetos (OOPS en inglés ), es un


paradigma de la programación que vienen a innovar la forma de obtener
resultados. Los objetos manipulan los datos de entrada para la obtención de
datos de salida específicos, donde cada objeto ofrece una funcionalidad
especial.

Está basada en varias técnicas que nos permiten desarrollar y mantener mucho
más fácil programas de una gran complejidad, incluyendo herencia, cohesión,
abstracción, polimorfismo, acoplamiento y encapsulamiento.

Conjunto de reglas a seguir para hacernos la tarea de programar más sencilla.


Su uso se popularizó en la década de 1990.

Grandy Booch (Promotor del UML)

En resumen Object-Oriented Programming es una metodología o paradigma


para diseñar un programa usando clases y objetos. Simplifica el desarrollo de
software y mantenimiento.

Simula: es un lenguaje de programación, el cual es considerado el primer


lenguaje de programación orientado a objetos. El paradigma de la programación
donde todo es representado como un objeto es conocido como un verdadero
lenguaje de programación orientado a objetos.

Smalltalk: es considerado el primer el primer verdadero lenguaje de


programación orientado a objetos.

Los populares lenguajes de programación orientado a objetos son : Java, C#,


PHP, Python, C++, etc.

El principal objetivo de la programación orientado a objetos es para


implementar entidades del mundo real, por ejemplo: objetos, clases abstracción,
herencia, polimorfismo, etc.

Por: Vicente Aguilera Pérez


En grandes rasgos podemos decir:

1. Orientada a objetos de la vida real (tangibles o intangibles).


2. Se basa en la naturaleza de los objetos de la vida real.

1. Estado: modo o manera en la que está.


2. Atributos: características o propiedades
3. Comportamiento: acciones o funciones.
4. Identidad: nombre o idenficador

3. Todo el código se puede realizar en varios ficheros en unidades


denominadas clases.
4. Modularización (dividir por partes).
5. Herencia (reutilizar).
6. Abstracción (obtener solo una generalización del objeto de acuerdo a mis
necesidades).
7. Encapsulamiento (niveles de visibilidad).
8. Polimorfismo (Que un elemento tenga varias formas).
9. Tratamiento de excepciones (si existe un fallo continua funcionando).

Por: Vicente Aguilera Pérez


Objeto

Un objeto lo podemos definir como:


• Ejemplar de una clase o unidad de clase que hereda los atributos y
comportamientos de la plantilla (clase).

• Un objeto es una encapsulación genérica de datos y de los procedimientos


para manipularlos. Al igual que los objetos del mundo real, los objetos de
software tienen un estado, un comportamiento y una identidad.

• An entity that has state and behavior is known as an object e.g., chair, bike,
marker, pen, table,    car, etc.
• It can be physical or logical (tangible and intangible).
• The example of an intangible object is the banking system.

Por: Vicente Aguilera Pérez


Características de un objeto:

• El estado de los objetos se determina a partir de una o más variables


(atributos)
• El comportamiento con la implementación de métodos.
• La identidad es implementada típicamente por un ID único (nombre
del objeto).

An object has three characteristics:

• State: represents the data (value) of an object.

• Behavior:  represents the behavior (functionality) of an object such as


deposit, withdraw, etc.

• Identity: An object identity is typically implemented via a unique ID. The value
of the ID is not visible to the external user. However, it is used internally by
the JVM to identify each object uniquely.

Por: Vicente Aguilera Pérez


Por ejemplo, Lapicero es un objeto. Su nombre es Reynolds; color white,
conocido como su estado. Es usado para escribir, entonces escribir es su
comportamiento.

Un objeto es una instancia de una clase. Una clase es una plantilla o un plano
desde el cual los objetos son creados. Entonces un objeto es la
instancia(resultado) de una clase.

Una instancia de una clase: es la acción de crear un objeto de una clase.

Definición de objetos:

• Un objeto es una entidad del mundo real.

• Un objeto es una entidad en tiempo de ejecución.

• El objeto es una entidad la cual tiene un identidad, estado y comportamiento.

• El objeto es una instancia de una clase.

Operador NEW

La palabra reservada new es usada para decir que se alojará un espacio en


memoria en la ejecución. Todos los objetos obtienen memoria en una área de
esta.

Person myObj = new Person();


Patrón básico para declarar un objeto
Class identity = new Class();

Por: Vicente Aguilera Pérez


Clase

• Una clase podríamos decir que es un molde con el cual podemos crear
infinidad de objetos con características parecidas.

• Colección de objetos es llamada clase. La clase es una entidad lógica. Una


clase puede también ser definida como un blueprint (plano) desde la cual tu
puedes crear un objeto individual. Una clase no consume espacio o memoria.

• Una clase es un plano, contenedor o plantilla que crea objetos de tipos


específicos. Los objetos son también llamados instancias de la clase.

• Las clases son encapsulaciones de datos (campos/ variables/ constantes) y


comportamientos (métodos) en una unidad única.

Por ejemplo, concibiendo una clase como un molde podríamos definir la clase

Coche:

• Esta clase será la plantilla o molde para crear nuevos coches.

Por: Vicente Aguilera Pérez


• Tendrá atributos o propiedades (lo que conocíamos como variables) y

digamos que estos serán cada una de las piezas o características del

coche, por ejemplo: nombre, color, modelo, plazas, caballaje, velocidad,

etc.

• Tendrá métodos (lo que conocíamos como funciones), estos serán

las acciones que es capaz de hacer el coche, por ejemplo podríamos tener

los métodos: arrancar, acelerar, frenar, encenderLuces, cambiarColor, etc.

Con los métodos interactuamos con los atributos y si es necesario

cambiamos los valores que tienen.

Otras definiciones de clases

• Una clase está formada por los métodos y las variables que definen las
características comunes a todos los objetos de esa clase. Precisamente la
clave de la OOP está en abstraer los métodos y los datos comunes a un
conjunto de objetos y almacenarlos en una clase.

Una clase equivale a la generalización de un tipo específico de objetos.


Una instancia es la concreción de una clase.

• A class is a group of objects which have common properties. It is a template


or blueprint from which objects are created. It is a logical entity. It can't be
physical.

Por: Vicente Aguilera Pérez


A class in Java can contain: Fields, Methods, Constructors, Blocks,
Nested class and interface.

Una clase en java es:

◦ Fields
◦ Methods
◦ Constructors
◦ Blocks
◦ Nested class and interface

class <class_name> extends classes implements interfaces


{    

     Fields;

Methods;

Constructors;

Blocks;

Por: Vicente Aguilera Pérez


Tipos de clases

Clases abstractas
  
1. No pueden ser instanciadas.  
2. Usadas solamente como superclases.  
3. Organizan características comunes a algunas clases y especifican una
interfaz común para todas sus subclases.  
4. Pueden tener métodos abstractos (métodos sin implementación).  

Clases concretas o comunes 


 
1. Pueden ser instanciadas.  
2. Tiene un comportamiento específico. 
3. Implementan los métodos abstractos que heredan de las clases abstractas. 

 Clases finales  

1. Clases especiales que no pueden tener descendencia.  


2. únicamente permiten instanciar objetos.
3. Tiene un comportamiento específico.

Cabe decir que en un inicio solo se verá el tema de clases concretas o comunes
y a medida del curso de irán viendo cada una de ellas

Por: Vicente Aguilera Pérez


Atributos

Son los datos asociado al objeto, propiedades, características o campos


definidos en una clase.

• Describen el estado de un objeto.


• También llamados datos o variables miembro, son porciones de
información que un objeto posee o conoce de sí mismo.
• Nos permiten diferenciar objetos, agregando características distintas para
cada uno.

Consta de 3 partes: tipo de dato, identificador y valor. 

Por ejemplo:

• Los atributos de un auto podrían ser color, peso, largo, ancho, tipo de
motor; etc.

Comportamientos

Se refiere a lo relacionado con las operaciones, funcionalidades o acciones que


pueden realizar o las que puede responder ante mensajes enviados por otros
objetos (Estos pueden ser métodos, funciones o procedimientos).

Es el conjunto de cada acción o transformación que el objeto ejecuta. Estos


pueden ser procedimientos o funciones y formar parte de la clase. Conjunto de
acciones o funciones que realiza un objeto .

Los comportamientos, permiten la reutilización del código y la optimización.

Por ejemplo:

▪ Una persona puede Caminar, saltar, gatear, trepar, hablar, gritar, etc.
▪ Un auto puede Arrancar, frenar, acelerar, girar, apagarse, etc.
▪ Un ordenador puede encenderse, apagarse, hibernar.

Por: Vicente Aguilera Pérez


▪ Una impresora puede imprimir, copiar, escanear, etc.
▪ Una televisión puede encenderse, apagarse, subir el vol., bajar el
vol., cambiar de canal, etc.

Un comportamiento puede ser (Procedimiento, función o método)

Procedimiento: conjunto de instrucciones que realizan una tarea determinada


pero no revuelve ningún valor.

class <class_name>

{    

    public void <nombre_procedimiento>(/*parametros*/)

//sentencias

Función: conjunto de instrucciones que realizan una tarea determinada pero


revuelve un valor de cualquier tipo de dato.

class <class_name>

{    

public (int|byte|short|long|…|Objeto) <nombre_función>(/*parametros*/)

//sentencias

return int|byte|short|long|…|Objeto;

Método: puede ser un procedimiento o una función, pero este pertenece a una
clase, además que estos pueden acceder a los atributos y cambiar los estados e
los objetos.

Por: Vicente Aguilera Pérez


class <class_name>

{    

    public void <nombre_procedimiento>(/*parametros*/)

//sentencias

public (int|byte|short|long|…|Objeto) <nombre_funcón>(*parametros*/)

//sentencias

return value;

Por: Vicente Aguilera Pérez


Programación Orientada
a Objetos (Object
Oriented Programming)
Parte 2

Por: Vicente Aguilera Pérez


Métodos
Como ya lo vimos en la parte anterior, los métodos son funciones o acciones
que tienen ese nombre porque pertenecen a una clase, y es una forma de que la
clase realice una tarea o actividad específica. Estos proveen la reutilidad del
código.

Una definición más formal de un método es la siguiente:

Bloque de código o colección de sentencias o conjunto agrupado de


sentencias que permiten realizar una determinada tarea u operación.

Se usan para lograr la reutilizaron de código. Estos se pueden escribir una vez y
usarse muchas veces. Esto permite que el código no se tenga que escribir cada
vez que se tenga que usar. También provee una fácil modificación y legibilidad
agregando o eliminando un fragmento de código.

La declaración del método provee información sobre los atributos del método,
visibilidad, tipo de retorno nombre y argumentos.
Estas partes juntas son conocidas como el method header.

Method signature: es una parte de la declaración del método y este incluye el


nombre y la lista de parámetros.

Por: Vicente Aguilera Pérez


Access specifier: el especificador o modificador de acceso es el tipo de acceso
del método. Especifica la visibilidad del método. Java proporciona cuatro tipos
de especificador de acceso:

• public: el método es accesible para todas las clases cuando usamos un


especificador público en nuestra aplicación.

• private: cuando usamos un especificador de acceso privado, el método es


accesible solo en las clases en las que está definido.

• protected: cuando usamos un especificador de acceso protegido, el método


es accesible dentro del mismo paquete o subclases en un paquete diferente.

• default: cuando no usamos ningún especificador de acceso en la declaración


del método, Java usa el especificador de acceso predeterminado de forma
predeterminada. Solo es visible desde el mismo paquete.

Return Type: el tipo de retorno es un tipo de datos que devuelve el método.


Puede tener un tipo de datos primitivo, objeto, colección, void, etc. Si el método
no devuelve nada, usamos la palabra clave void.

Method name: es un nombre único que se utiliza para definir el nombre de un


método. Debe corresponder a la funcionalidad del método. Supongamos que, si
estamos creando un método para restar dos números, el nombre del método
debe ser resta (). Un método se invoca por su nombre.

Parameters List: Es la lista de parámetros separados por una coma y


encerrados entre paréntesis. Contiene el tipo de datos y el nombre de la
variable. Si el método no tiene parámetro, deje el paréntesis en blanco.

Body method: es parte de la declaración del método. Contiene todas las


acciones a realizar. Está encerrado dentro del par de llaves.

Nombramiento de métodos

Al definir un método, recuerde que el nombre del método debe ser un verbo y
comenzar con una letra minúscula. Si el nombre del método tiene más de dos
palabras, el primer nombre debe ser un verbo seguido de adjetivo o sustantivo.
En el nombre del método de varias palabras, la primera letra de cada palabra
debe estar en mayúsculas, excepto la primera palabra.

Por: Vicente Aguilera Pérez


Por ejemplo:

Single-word method name: sum(), area()


Multi-word method name: areaOfCircle(), stringComparision()

Métodos Get (Accessor Method) y Set (Mutator Method)

Los métodos get y set son métodos de una clase los cuales permiten retornar o
asignar un nuevo valor a una variable con la finalidad de modificar sus estados,
dado que por la encapsulación, los datos sensibles estén ocultos de los
usuarios el uso de estos es esencial por:

Las clases declaran sus atributos(constantes o variables) con el modificador de


acceso private. Y al ser un atributo privado, no se puede acceder a este desde
otra clase únicamente a través de métodos GET y asignarle un nuevo valor a
través de métodos SET.

Por ello el uso de los get y set.

• Los métodos GET retorna el valor de una variable.

• Los métodos SET toman un parámetro (newName) y lo asignan al atributo al


cual ese SET pertenece. Además cabe decir que los método que no son set
sino que tiene otras funcionalidades y modifican uno o varios valores de los
atributos, siguen el mismo patrón que los SET.

El Paso de parámetros o argumentos al método es un mecanismo que


permite dar un estado inicial a los atributos un estado relacionado con
las operaciones y que estén listos para usarse en una situación
específica y al modificarse se modifique la situación ocasionando un
“efecto colateral” en el estado del objeto y sus atributos.

Por: Vicente Aguilera Pérez


Ejemplo de get y set

public class Person {


private String name; // private = restricted access

// Getter
public String getName() {
return name;
}

// Setter
public void setName(String newName) {
this.name = newName;
}
}

En los método set es recurrente utilizar el keyword this como en el


ejemplo anterior, el cual se usa para referirnos al objeto actual.

Por: Vicente Aguilera Pérez


This: autoreferencia del objeto

Es usado cuando nos vamos a referir a una variable del objeto en este caso
serían las variables (que denominamos atributos).

Se usa para:

• Hacer referencia a atributos de mismo objeto (atributos de instancia) y evitar


la colisión de identificadores.

public class Person


{
private String name; // private = restricted access

// Setter
public void setName(String name)
{
this.name = name;
}
}

En el ejemplo anterior, referenciamos a la variable “name” con this para


especificar que estamos llamando a la variable del objeto y no a la variable
“name” que es el parámetro que le enviamos por medio del set para que la
variable del objeto this.name tome ese valor.

Por: Vicente Aguilera Pérez


• También es usado para devolver el mismo objeto que le llamo, de esta
manera se pueden hacer llamadas en cascada a métodos de la misma clase.
(Esto es mandar llamar otros valores o incluso constructores “que los
definiremos más adelante” en la misma clase).

Otros usos:

• Se puede usar para obtener el objeto actual.


• Se puede utilizar para invocar el método del objeto actual.
• Se puede utilizar para invocar el constructor de la clase actual
• Se puede pasar como parámetro a una llamada a un método.
• Se puede pasar como parámetro a un constructor.
• Se puede usar para devolver el objeto actual del método.

Por: Vicente Aguilera Pérez


Tipos de métodos

• main: Es aquel método que inicia la entrada al programa. Este método se sitúa
en la clase cuyo nombre dio a la JVM. Y es static ya que es llamada por la
JVM en tiempo de ejecución justo antes que se cree cualquier objeto.

Tiene la siguiente estructura:

public: Es un modificador de acceso. Se usa public antes del método


main así la JVM puede identificar el punto de ejecución del programa. Si
usamos private o protected o default antes del método este no será
visible para la JVM.

static:  Tu puedes hacer un método estático por el uso del keyword static.
Esto nos permite no crear un objeto para mandarlo llamar. Static methods
son métodos los cuales se invocan sin crear los objetos, así no se
necesita algún objeto para llamarlo.

void: En Java, cada método retorna un tipo de dato. Void keyword


reconoce o indica al compilador qué main main() no retorna algún valor.

main(): Es la firma por defecto el cual está predefinido en la JVM. Es


llamado por la JVM para ejecutar un programa linea por linea y al finaliza
la ejecución después de completar este método. Se puede sobreescribir el
método.

String args[]: El método main, permite aceptar datos del usuario. Acepta
un grupo de strings, los cuales es llamando un array de strings. Es usado
para contener los argumentos desde la línea de comandos en forma de
valores string.

Por: Vicente Aguilera Pérez


Cabe señalar, que es necesario que el método main exista para que el
programa pueda correr o arrancar ya que si no está no hay forma de correrlo.

Se puede declarar de distintas formas:

1. public static void main(String args[])  
2. static public void main(String args[])  
3. static public void main(String[] x)  
4. static public void main(String []x)  
5. static public void main(String...args) 

Sobrecarga del main.

class OverloadMain  

{  

public static void main(int a)  //overloaded main method  

{  

System.out.println(a);  

}  

public static void main(String args[])  

{     

System.out.println("main method incoked");  

main(6);  

}  

}  

• Clase: Son aquellos métodos, que compartes todos los objetos que se
instancia de una clase ya que esa actividad es común en todos.También son
llamados static methods.

• No necesitas crear instancias para llamarlos.


• Se llaman vía nombre de clase

Un método que tiene un static keyword es conocido como static method o


método de clase. En otras palabras, un método que pertenece a una clase en
lugar de a una instancia de una clase se conoce como method static o método
de clase. Podemos también crear un método por uso del keyword static antes
del nombre del método.

Por: Vicente Aguilera Pérez


La ventaja principal de un static method es que puede llamarse sin crear un
objeto. Puede ser acceder a miembros de datos estáticos y también cambiar su
valor. Puede ser usado para crear un método de instancia. Es invocado usando
el nombre de la clase. El mejor ejemplo de un método de clase o static es el
método main().

De esa misma manera existen los métodos de clase existen las variables de
clase cuyo funcionamiento es parecido a los métodos en el sentido de
llamarlas.

class StaticMethodClass  

{  

private static int a;

public static void staticMethod(int a)  //overloaded main method  

{  

StaticMethodClass.a=a;

System.out.println(StaticMethodClass.a);  

}  

class Main  

{  

public static void main(String … args)  //overloaded main method  

{  

StaticMethodClass.staticMethod(6);  

}  

Por: Vicente Aguilera Pérez


OBJECTOCIRCULO_1 OBJECTOCIRCULO_2
En este caso, pensemos
que cada recuadro es
una representación de un
radio radio objeto de la clase Circulo
en memoria Ram, todos
los método, variable y
getArea() getArea constantes que existen
son de instancia dado
que en cada uno de ellos
setRadio(radio) setRadio(radio) existe una copia por lo
cual los valores que
tenga cada objeto, son
getRadio() getRadio() independientes de otros.

A excepción de PI, este


es un atributo de clase
dado que se comparte el
mismo valor para todos
PI=3.1416927 los objetos.

Una variable o constante de clase es compartida por todos los


objetos instanciados de la clase.

Los Atributos de clase  son aquellos que son comunes en todas las instancias
de la clase y solo se inician una vez.

[modificador de acceso] [static] [tipo de dato] [nombre]= [valor];


[modificador de acceso] [static] [tipo de dato] [nombre];

Estos, tanto los de clase como de instancia pueden ser variables o constantes,
para estas últimas se necesita agregar la keyword final antes del [tipo de dato].
Una constante por convención es public static final.

Cabe señalar que los métodos de clase se pueden relacionar con variables de
clase únicamente. Pero los métodos de instancia, pueden relacionarse con
métodos de clase, variables de clase y variables de instancia.

• Instancia

Son aquellos métodos que se definen en una clase y no son estáticos. Estos a
diferencia de los de clase, deben ser invocados con un objeto de esa clase.

[modificador de acceso] [tipo de dato] [nombre](){};

Por: Vicente Aguilera Pérez


Los Atributos de instancia son aquellos que determinan los estados de los
objetos o instancias y cada objeto reserva espacio en memoria para estas.

[modificador de acceso] [tipo de dato] [nombre]=[valor];

[modificador de acceso] [tipo de dato] [nombre];

public class InstanceMethodExample  
{  
public static void main(String [] args)  
{  
//Creating an object of the class  
InstanceMethodExample obj = new InstanceMethodExample();
  
//invoking instance method   
System.out.println("The sum is: "+obj.add(12, 13));  
}  
int s;  
//user-defined method because we have not used static keyword  
public int add(int a, int b)  
{  
s = a+b;  
//returning the sum  
return s;  
}  
}  

OBJECTOCIRCULO_1 OBJECTOCIRCULO_2 En este caso, pensemos


que cada recuadro es
una representación de un
radio radio objeto de la clase Circulo
en memoria Ram, todos
los método, variable y
getArea() getArea constantes que existen
son de instancia dado
que en cada uno de ellos
existe una copia por lo
setRadio(radio) setRadio(radio) cual los valores que
tenga cada objeto, son
independientes de otros.
getRadio() getRadio()

PI=3.1416927 PI=3.1416927

Por: Vicente Aguilera Pérez


Cabe señalar que los métodos de instancia pueden llamar variables de
instancia, métodos de instancia y variables y métodos de clase.

• Finales

Son aquellos, que no pueden ser sobreescribir en otra clase derivada (se verá
más a fondo en herencia). Y su principal intención es que el contenido no sea
cambio por alguien externo.

public class FinalMethodExample {


public final void display(){
System.out.println("Hello welcome!”);
}
public static void main(String args[]){
new FinalMethodExample().display();
}
class Sample extends FinalMethodExample{
public void display(){
System.out.println("hi");
}
}
}

El ejemplo anterior al ejecutarlo marcara un error :

FinalMethodExample.java:12: error: display() in


FinalMethodExample.Sample cannot override display() in
FinalMethodExample
public void display(){
^
overridden method is final

Lo que significa que display() no se puede sobreescribir por ser final.

De la misma manera existen variables finales, las cuales son las que
denominamos constantes y estos indican que el valor asignado no cambiará a
lo largo de la ejecución del programa. Y por convención los identificadores se
escriben con mayúscula.

public final double PI=3.1415927;

Por: Vicente Aguilera Pérez


• Abstractos

En un contexto de una jerarquía de clases , específicamente de generalización /


especialización se definen cómo abstractos a aquellos métodos definidos en
clases para imponer una funcionalidad a las clases hijas. (se verá más a fondo
en herencia).

Estos métodos no tienen cuerpo y se conocen cómo abstractos por solo tener
un header, En otras palabras, no tienen implementación. Siempre son
declarados en clases abstractas, lo que significa que que las clases por sí
mismas deben ser abstractas si tiene al menos un método abstracto.

modifier abstract return_type method_name(parameters list);

Además de lo anterior, otra definición valida es que los métodos abstractos son
aquellos que necesitan una clase abstracta para existir y representan una
acción, función o proceso común en todas las clase que deriven de ella.

• Factory method

Es un método que retorna un objeto de la clase el cual pertenece. Todos los


método factory son estáticos

NumberFormat obj =NumberFormat.getNumberInstance();

Por: Vicente Aguilera Pérez


Maneras para crear un objeto

1. New keyword

Class obj = new Class();

Por: Vicente Aguilera Pérez


2. New Instance

public class ClassDemo {

public static void main(String[] args) {

try {
// date object
Date d = new Date();
Class cls = d.getClass();
System.out.println("Time = " + d.toString());

/* creates a new instance of the class


represented by this
Class object cls */
Object obj = cls.newInstance();
System.out.println("Time = " + obj);
} catch(InstantiationException e) {
System.out.println(e.toString());
} catch(IllegalAccessException e) {
System.out.println(e.toString());
}
}
}

3. Clone

Crea una copia exacta del un objeto, crea una nueva instancia de la clase a
partir del objeto e inicializa todos los campos igual que el objeto clonado
correspondiente.

implements Cloneable para poder clonar si se quiere


sobreescribir el método en la clase (no necesario).

Class obj = new Class();


Class obj2 = obj.clone();

Por: Vicente Aguilera Pérez


4. Deserialization

5. Factory method (diseño de patrones)

Maneras para inicializar un Objeto.

1. Por referencia de variable (cuando son publicas)


Student s1=new Student();  

s1.id=101;  

s1.name="Sonoo";  

2. Por método (cuando son privadas)


Student s1=new Student();  

  Student s2=new Student();  

  s1.insertRecord(111,"Karan");  

  s2.insertRecord(222,"Aryan");  

  s1.displayInformation();  

  s2.displayInformation(); 

3. Constructor

Por: Vicente Aguilera Pérez


Constructores
Un constructor es un bloque de código similar a un método. Es llamado cuando
una instancia se la clase es creada. Al tiempo de llamar al constructor, la
memoria que requiere el objeto es alojada en memoria.
Es un tipo de método especial el cual inicializa el objeto. Cada vez que un objeto
es creado cuando se usa el new keyword, al menos un constructor es llamado.

Se llama constructor por defecto si no hay un constructor disponible en la clase.


En ese caso, el compilador de java provee un default constructor por defecto.

Existen dos tipos de constructores en java: sin argumentos constructor y


constructor parametrizado.

El constructor es llamado así porque construye los valores al tiempo de la


creación del objeto. No es necesario escribir un constructor para la clase. En
ese caso el compilador de Java crea un default constructor si la clase no tiene
alguno.

Reglas para crear un constructor


1. El nombre del constructor debe ser el mismo que su clase.

2. Un constructor no debe tener tipo de dato explícito.

3. El constructor en Java no puede ser abstract, static, final y synchronized.

4. Podemos usar modificadores de acceso para controlar la creación del objeto


(private, public, protected o default).

Por: Vicente Aguilera Pérez


Tipos de constructor
Hay dos tipos de constructores en Java:

• Default constructor (no-arg constructor): Es aquel que no tiene ningún


parámetro.

<class_name>(){}

Regla: Si no hay un constructor en la clase el compilador automáticamente crea


un default constructor.

¿Cuál es el propósito del default constructor?.


El default constructor es usado para proporcionar valores iniciales a los objetos
o variables de instancia, como 0 para números, null para strings, true para
boolean, etc, depende del tipo de dato.

Por: Vicente Aguilera Pérez


• Parameterized constructor

Es un constructor, el cual tiene un numero especifico de parámetros.

¿Por qué se usa el Parameterized constructor?

Es usado para proveer diferentes valores a diferentes objetos. Sin embargo, se


puede proveer los mismo valores también.

class Student4

{  

    int id;  

    String name;  

    //creating a parameterized constructor  

    Student4(int i,String n)

{  

    id = i;  

    name = n;  

    }  

    //method to display the values  

    void display()

System.out.println(id+" “+name);

}  

Por: Vicente Aguilera Pérez


Diferencias entre constructor y método

Java Constructor Java Method

Es usado para inicializar un objeto Es usado para exponer el comportamiento

de un objeto.

Un constructor no debe tener un tipo de dato Debe tener un tipo de dato o void keyword

Se invoca implícitamente Se invoca explicítamente.

EL compilador provee un default constructor su no tiene Los métodos no son proporcionados por el

constructor la clase. compilador en ningún caso

Tiene el mismo nombre que la clase Puede o no tener el mismo nombre que la

clase.

Por: Vicente Aguilera Pérez


Sobrecarga de constructores y métodos
Si una clase tiene multiples métodos que tienen el mismo nombre pero diferente
cantidad y/o tipos de datos, es conocido como Method Overloading.

Ejemplo:

Supongamos que tienes que realizar la suma de dos numero dados pero
puede haber cualquier numero de argumentos, si escribes el método como

a(int x, int y) pada dos parametros y b(int x, int y, int z) para tres
parametros entonces puede ser difícil para ti como para otros
programadores entender el comportamiento de cada método por que sus
nombres dos diferentes.

Entonces, realizamos una sobrecarga de métodos para descubrir el programa


rápidamente.

Ventaja de la sobrecarga de métodos

La sobrecarga de métodos aumenta la legibilidad del programa.

Diferentes formas de sobrecargar el método.

Hay dos formas de sobrecargar el método en java.

• Cambiando el número de argumentos

class Adder

{  

static int add(int a,int b)

return a+b;

}  

static int add(int a,int b,int c)

return a+b+c;

}  

Por: Vicente Aguilera Pérez


• Cambiando el tipo de datos

class Adder

{  

static int add(int a, int b)

return a+b;

}  

static int add(double a, double b)

return a+b+c;

}  

Cabe señalar que todos los métodos sobrecargados, deben arrojar el mismo
tipo de dato.

Sobrecarga de métodos y promoción de tipos

Un tipo se promueve implícitamente a otro si no se encuentra ningún tipo de


datos coincidente. Entendamos el concepto por la figura que se muestra a
continuación:

Por: Vicente Aguilera Pérez


class OverloadingCalculation1

{  

   void sum(int a,long b)

System.out.println(a+b);

}  

   void sum(int a,int b,int c)

System.out.println(a+b+c);

}  

  

  public static void main(String args[])

{  

   OverloadingCalculation1 obj=new OverloadingCalculation1();  

   obj.sum(20,20);//ahora el segundo int literal debe ser promovido a long  

   obj.sum(20,20,20);  

  

  }  

Si hay argumentos de tipo coincidentes en el método, no se realiza la promoción


de tipo.

class OverloadingCalculation1

{  

   void sum(int a, int b)

System.out.println("int arg method invoked");

}  

   void sum(long a, long b)

System.out.println("long arg method invoked");

}  

  

  public static void main(String args[])

{  

   OverloadingCalculation1 obj=new OverloadingCalculation1();  

   obj.sum(20,20);//now int arg sum() method gets invoked

  }  

Output:int arg method invoked

Por: Vicente Aguilera Pérez


Si no hay argumentos de tipo coincidente en el método, y cada método
promueve un número similar de argumentos, habrá ambigüedad.

class OverloadingCalculation1

{  

   void sum(long a, int b)

System.out.println("a arg method invoked");

}  

   void sum(long a, int b)

System.out.println(“b arg method invoked");

}  

  

  public static void main(String args[])

{  

   OverloadingCalculation1 obj=new OverloadingCalculation1();  

   obj.sum(20,20);//now int arg sum() method gets invoked

  }  

Output:Compile Time Error

Por: Vicente Aguilera Pérez

También podría gustarte