Programación orientada a objetos

Anuncio
Programación orientada a
objetos
Resumen de Temas
Unidad 4: Sobrecarga
4.1 Conversión de tipos(1)
Conversiones implícitas:
„
La conversión entre tipos primitivos se realizan de
modo automático de un tipo a otro de más
precisión, por ejemplo de int a long, de float a
double, etc.
„
Estas conversiones se hacen al mezclar variables
de distintos tipos en expresiones matemáticas o al
ejecutar sentencias de asignación en las que el
miembro izquierdo tiene un tipo distinto (más
amplio) que el resultado de evaluar el miembro
derecho.
4.1 Conversión de tipos(2)
Conversiones explícitas:
„
Las conversiones de un tipo de mayor a otro de menor precisión
requieren una orden explícita del programador, pues son
conversiones inseguras que pueden dar lugar a errores (por
ejemplo, para pasar a short un número almacenado como int,
hay que estar seguro de que puede ser representado con el
número de cifras binarias de short).
„
A estas conversiones explícitas de tipo se les llama cast. El cast
se hace poniendo el tipo al que se desea transformar entre
paréntesis, como por ejemplo:
long result;
result = (long) (a/(b+c));
„
A diferencia de C/C++, en Java no se puede convertir un tipo
numérico a boolean.
4.1.1 Conversiones seguras
El tamaño de los tipos que queremos convertir es muy importante. No
todos los tipos se convertirán de forma segura. Por ejemplo, al convertir
un long en un int, el compilador corta los 32 bits superiores del long(de 64
bits), de forma que encajen en los 32 bits del int, con lo que si contienen
información útil, esta se perderá.
Por ello se establece la norma de que "en las conversiones el tipo destino
siempre debe ser igual o mayor que el tipo fuente":
4.1.2 Conversiones entre tipos primitivos y cadenas1
„
Las clases wrapper contiene útiles métodos y constantes muy
utilizados en conversión de tipos, y para el manejo de sistemas
bases de números, hexadecimal ,octal, binario, etc.
Operación
Sintaxis
boolean to String
String s = theBoolean ? “true”: “false”;
String s = “” + TheBoolean;
byte, short, char,int to
String
String s = Byte.toString(theByte);
String s = Short.toString(theShort);
String s = Integer.toString(theNumber);
byte, short, char,
int to String
String s = Integer.toString(theNumber, base);
String s = Integer.toBinaryString(theNumber);
String s = Intefer.toOctalString(theNumber);
String s = Integer.toHexString(theNumber);
String s = String.valueOf(theNumber), Strin s =
""+theNumber;
4.1.2 Conversiones entre tipos primitivos y cadenas2
Operación
Sintaxis
long to String
String s = Long.toString(theLong);
String s = Long.toString(theLong , base);
String s = Long.toBinaryString(theLong);
String s = Long.toOctalString(theLong);
String s = Long.toHexString(theLong);
String s = String.valueOf(theLong);
String s = "" + theLong
float to String
String s = Float.toString(theFloat);
String s = String.valueOf(theFloat);
String s = “”+theFloat;
double to String
String s = Double.toString(theDouble):
String s = "" + TheDouble
String to boolean
booelan b= Boolean.getBoolean(theString);
4.1.2 Conversiones entre tipos primitivos y cadenas3
Operación
Sintaxis
String to byte
byte b = Byte.parseByte(theString);
byte b = Byte.parseByte(theString , base);
String to short
short s = Short.parseShort(theString);
short s = Short.parseShort(theString , base);
String to int
int ¡ = Integer.parseInt(theString);
int ¡ = Integer.parseInt(theString , base);
String to long
long x= Long.parseLong(theString);
long x= Long.parseLong(theString , base);
String to char
char c= (char)integer.parseInt(theString);
char c = (char)integer.parseInt(theString , base);
String to float
float f= Float.parseFloat(theString);
String to double
double d = Double.parseDouble(theString)
4.1.3 Literales
En Java hay una forma de especificar un valor determinado a una variable o
constante, mediante una literal, que es una expresión constante utilizada para
expresar un valor:
Notaciones literales
Tipo
Formato
int
Decimal dígitos 0-9 ejemplo: (1234)
Octal cero (0) seguido de los dígitos 0-7 ejemplo: (01234)
Hexadecimal 0x o 0X seguido de los dígitos 0-9, A-F ejemplo: (0x1234)
long
Añade l o L al final del término literal int ejemplo: 0xDECADAL
float
Añade f o F al final del término literal double y sustituye a d/D en caso de existir por
ejemplo: 3.14f , 3.14E+15F
double
Notación científica como en 1.345e+10, donde el exponente puede expresarse con una e o
una E; puede encontrarse una d o D al final del elemento literal double
char
Un único caracter o secuencia de escape entre comillas sencillas, por ejemplo: 'X', 'r'.
String
Varios caracteres o secuencias de escape entre comillas dobles. .
boolean
verdadero, falso
Null
nulo
4.1.4 Secuencias de escape de caracter
Son caracteres que pueden utilizarse en los flujos o en el método
System.out.println() para control de la salida que el programador desea, y siempre
tienen como prefijo la diagonal invertida o back slash:
Escape
Significado
\n
nueva línea
\t
tabulador
\b
espacio en blanco
\r
retorno de carro
\f
formfeed
\\
back slash, para comentarios
\'
comilla simple
\"
comillas
\ddd
número en octal (ejemplo: \231 )
\xdd
número en hexadecimal (ejemplo: \x12 )
\udddd
caracter UNICODE (ejemplo: \u1914 )
4.1.5 Valores por defecto
Cuando datos de tipo primitivo son miembros de una clase, se garantiza que por
omisión toman estos valores de inicialización:
Cuando las variables son referencias a un objeto y no son instanciadas, se
garantiza que su valor tendrá un valor constante Null ( nulo ).
4.2 Sobrecarga de métodos
„
„
„
„
Java permite métodos sobrecargados (overloaded), es
decir, métodos distintos que tienen el mismo nombre,
pero que se diferencian por el número y/o tipo de los
argumentos.
Se pueden sobrecargar los constructores de una clase
al igual que otros métodos.
Se puede llamar a un constructor desde otro
constructor usando la palabra this.
Diferente de la sobrecarga de métodos es la
redefinición. Una clase puede redefinir(override) un
método heredado de una superclase. Redefinir un
método es dar una nueva definición. En este caso el
método debe tener exactamente los mismos
argumentos en tipo y número que el método
redefinido.
4.2.1 Proceso en la llamada de un método sobrecargado
1.
2.
3.
4.
Si existe el método cuyos argumentos se ajustan
exactamente al tipo de los argumentos de la llamada
(argumentos actuales), se llama ese método.
Si no existe un método que se ajuste exactamente, se intenta
promover los argumentos actuales al tipo inmediatamente
superior (por ejemplo char a int, int a long, float a double,etc.)
y se llama el método correspondiente.
Si sólo existen métodos con argumentos de un tipo más
restringido (por ejemplo, int en vez de long), el programador
debe hacer un cast explícito en la llamada,
responsabilizándose de esta manera de lo que pueda ocurrir.
El valor de retorno no influye en la elección del método
sobrecargado. En realidad es imposible saber desde el
propio método lo que se va a hacer con él. No es posible
crear dos métodos sobrecargados, es decir con el mismo
nombre, que sólo difieran en el valor de retorno.
4.2.3 Ejemplo de sobrecarga de métodos
public class Circulo {
static int numCirculos = 0;
Propiedades
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++; }
Sobrecarga de
public Circulo(double r) { this(0.0, 0.0, r); }
constructores
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; }
Sobrecarga de Métodos
public double area() { return PI * r * r; }
// método de objeto para comparar círculos
public Circulo elMayor(Circulo c) {if (this.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;}
} // fin de la clase Circulo
4.3 Sobrecarga de operadores
„ La
sobrecarga de operadores a diferencia
de C++ en JAVA No existe.
„ Solo
en los objetos String el operador + y
+= se permiten para la concatenación de
cadenas.
Descargar