martes, 25 de noviembre de 2008

Acoplamiento y Cohecion.

Acoplamiento se refiere a el grado en que una clase conoce datos acerca de los miembros de otra clase.
Un bajo acomplamieto es deseable, puesto que las otras clases solo deben de saber cosas que realmente le interezan y los datos deben estar encapsulados.
Cohesion se refiere al hecho de que las clases haces una funcion especifica.
El hecho de que las clases hagan una sola y simple funcion aumenta la mantenibilidad del codigo.

Static

Los metodos estaticos(Static) se usan cuando queremos hacer cosas que no afectan el funcionamiento de ninguna instancia en especifico.
Las clases estaticas se usan para guardar valores que pertenecen a la clase, no a una instancia en especifico.
Todos los metodos estaticos pertenecen a las clases, no a las isntancias.
Un metodo estatico no puede acceder a una variable de instancia directamente.
Se puede acceder a una miembro estatico utilizando el nombre de la clase( Class.Metodo()), pero recuerda que acceder a una variale de estatica utilizando una instancia es una trampa, en realidad la variable sigue sin pertenecer a la instancia sino a la clase.
Los metodos estaticos no pueden ser sobreescritos, pero pueden ser redefinidos.

Constructores e instansacion

Un costructor siempre es invocado cuando un objeto es creado.
Cada una de las superclases en un arbol de herencia tiene a un constructor llamado.
Todas las clases, incluso las clases abstractas tienen por lo meos un constructor.
Los constructores deben tener el mismo nombre de la clase.
Los constructores no tienen tipo alguno de retorno, si ves a un "cosntructor" con un tipo de retorno, no es un constructor es un metodo.
LA forma en que funcionan los contructores es la siguente:
-->Un cosntructor llama al costructor de su clase padre, este a su vez llama al costructor de su clase padre y asi sucesivamente.
-->El super super super (el ultimo padre) costructor se executa, luego continua el que lo halla llamado y asi sucesivamente.
Los constructores pueden usar cualquier modificador de acceso(incluso privado)
El compilador te crea un cosntructor por default si tu no creas ningun constructor explicitamente.
El constructor que se crea por default es un cosntructos sin argumentos, con una llamada a super();
La primera sentencia de un cosntructor debe de ser o this() (un constructor sobrecargado) o super().
Solo podemos acceder a los miembros de instancia luego de que el constructor se halla executado.
Las clases abstractas tienen constructores que son llamados cuando la primer subclase concreta los llama.
Las interfaces no tienen constructores.
Los constructores nunca son heredados, por los tanto no pueden ser sobreescritos.
Si una superclase no tiene un constructor sin argumentos entonces tenemos que poner un llamado a super() con argumentos a webos.
Un constructor solo puede ser llamado dentro de otro costructor usando las palabras this() o super().
Cosas que debemos hacer para llamar correctamente a this()
-->Deben aparecer solo en la primera sentencia del constructor.
-->La lista de argumentos nos dice cual constructor sobrecargado es llamado.
-->Constructores pueden llamar a constructores, que pueden llamar a cosntructores ya asi hasta que se te de la gana, pero al final alguno de ellos tiene que hacer un llamado al super() o el Universo Java como lo conocemos implocionaria(ok, solo se acaban los recursos de tu compu y se bloqueria(tal vez eso es peor :P))
-->llamados a this() y super() no pueden ir en el mismo constructor, puede poner cualquiera de los dos, pero no los dos al mismo tiempo.

-->

martes, 18 de noviembre de 2008

Tipos de retorno

Los metodos sobrecargados pueden cambiar su tipo de retorno, los metodos sobreescritos no pueden exceptuando los retornos covariantes(Hijos del tipo de retorno original)
Los metodos que retornen un objeto, pueden retornar tambien null, si lo desean
Array es un tipo de retorno valido.
Para metodos con tipos de retorno primitivos, cualquier cosa que se pueda convertir implicitamente el tipo de retorno deseado es valido.
Nada puede ser rettornado en un tipo de retorno void, pero pueder regresar nada, es decir puesdes escribir return; sollito.
Los metodos que retornen una referencia a un objeto pueden retornar un subtipo.
Metodos que retoenen una interfaz, pueden retornar cualquier implementacion de esta.

miércoles, 12 de noviembre de 2008

Implemento de interfaces

Implementar una interface.
Cuando implementas una interface, estas firmando un contrato.
Implementas una interface al sobreescribirla propia y correctamente en todos los metodos que son definidos por la interface.
Una sola clase puede implementar multiples interfaces

Casting

Casting para variables de referencia
Hay dos tipos de casting para variable de referencia, el downcasting y el upCasting.
Downcating: Si se tiene una variable de reque refiera a un subtipo del objeto,puedes asignarlo a una variable de referencia del suptipo en especifico.Se debe de hacer un casting especifico para poder hacer esto y el resultado es que puede acceder al nuevo subtivo con la nueva ariable de referencia
Upcasting: Puedes asignar una variable de referencia a un supertipo de de otra variable de referencia ya sea de forma implicita o explicita. Esta es una operacion segura, por que la superclase contiene todas las cosas que tiene la subclase..

Metodos sobrecargados(Overloaded)

Un metodo sobrecargado significa que se va a reusar el nombre del metodo, pero con argumentos diferentes.
caracteristicas de los Metodos sobrecargados:
-->Deben de tener una lista de argumentos diferente.
-->Pueden tener diferentes tipos de retorno, si la lista de argumentos es tambien diferente.
-->Pueden tener diferentes modificadores de acceso.
-->Metodos de usa superclase pueden ser sobrecargados en una subclase.
El polimosfismo aplica a metodos sobreescritos, pero no a sobrecargados.
El tipo de referencia determina cual metodo sobre cargado va a ser llamado en tiempo de compilacion.

Metodos sobreescritos(Overriding)

Los metodos pueden ser sobreescritos o sobrecargados, los constructores pueden ser sobrecargados pero no sobreescritos.
Los metodos estaticos deben(obligatoriamente) ser sobreescritos por la primera clase concreta no abstracta.
Caracteristicas de los metodos sobreescritos:
-->Deben tener la misma lista de argumentos.
-->Deben tener el mismo tipo de retornos, excepto por que apartir de java 5 , el tipo de retorno puede ser una subclase,esto es conocido como retorno covariante.
-->No debe de tener un tipo de acceso mas restrictivo.
-->No bede de lanzar nuevas excepciones o excepcionnes que no sean las excepciones ya lansadas o sus sublcases.
-->Puede lanzar nuevas excepciones que sea subclases de las excepciones ya lanzadas o cualquier unchecked exception(excepciones en tiempo de ejecucion)

Los metodos finales no pueden ser sobreescritos.
Solo los metodos heredados pueden ser sobreescritos, y recuerda que los metodos privados no son sobreescritos.
una subclase una la sintaxis super.nombreDelMetodoSobreescrito() para llamar a la version de la superclase del metodo.
El tipo de objeto(no la variable de referencia), determina cual tipo de metodo sobreescrito es llamado en tiepo de ejecucion.

Polimorfismo

Polimorfismo significa muchas formas.
Una refrencia a una variable, es siempre unica, nos se le puede cambiar el tipo, pero puede referir a un subtipo del objeto que declaro.

Un solo objeto puede ser referiado por muchas variables de referencia de muchos tipos diferente.. siempre y cuando sean del mismo tipo o supertipo del objeto.

La variable de referencia(no en objeto en si mismo), determina a que metodo se tiene que llamar.
En compilador solo sabe que variable de referencia se esta usando, pero al momento de que el objeto se ejecuta ya se sabe que objeto es.
LA invocacion polimorfica de los metodos aplica solo a metodos de instancia sobreescritos, no a variables estaticas ni a variables, solo a metodos que puedan llamarce a travez de una instancia.

Herencia

Las herencia permite a una clase ser una subcalse de una superclase, y por lo tanto heredar las variables public y protected y los metodos de la superclase
Herencia es el concepto principal para entender IS-A, polimorfismo, sobreescritura, sobrecargado, y casting.

Encapsulacion IS-A HAS-A

LA encapsulacion ayuda a esconder la implementacion detras de una interface
El codigo encapsulado tiene dos caracteristicas:
Las variables de instancia se mantienen protegidas
Los metodos getter y setter proveen acceso a las variables de instancia.
IS-A se refuere a herencia o iplementacion
IS-A se expresa con la palabra reservada extends.
IS-A "hereda de" y "es un subtipo de" significan lo mismo.
HAS-A significa que una instancia de una clase "tiene una(HAS-A)" referencia a una instancia de otra clase u otra instancia de la misma clase.

domingo, 2 de noviembre de 2008

Enumeradores(enums)

  • Un enum especifica una lista de constantes que son asignadas a un tipo de valor.

  • Un enum no es ni un entero ni un String, los enums tiene su propio tipo de objetos

  • Un enum puede ser declarado fuera o dentro de una clase pero nunca dentro de un metodo

  • Un enum declarado fuera de una clase no puede ser static final, abstract private o protected

  • Los enumeradores pueden incluir constructores, metodos, variables y las constantes pueden contener cuerpos

  • Los constructores amndan argumentos al constructor de elnumerado con la sintaxis GRANDE(8) donde el 8 es el valor que se manda a el constructor y grande el nombre de un valor del enumerador

  • Los contructores de los enumeradoress pueden tener a rgumentos y pueden ser sobrecargados

  • Los contructores de los enumeradores NUNCA se llaman directamente en el codigo, estos son invocados cuando el enumerador es inizializado

  • el punto y coma al final de un enumerado es opcional, podemos poner:
    --> enum Numeros{UNO,DOS,TRES} o
    --> enum Numeros{UNO,DOS,TRES}

  • myEnum.values() nos regresa un arreglo con el valor de todos los enumeradores
  • Variables y metodos estaticos

  • Las variables estaticas no perteneces a ninguna instancia de las clases

  • No se necesita tener una instancia a las clases para poder usar los miembros estaticos de esta

  • Solo existe una copia de las variables estaticas y todas las instancias la comparten

  • Los metodos estaticos no tienen acceso a miembros no estaticos
  • Declaracion de arreglos

  • Los arreglos pueden contener objetos primitivos, pero el arreglo en si mismo es un objeto

  • Cuando declaras un arreglo los corchetes pueden ir en el lado derecho o izquerdo del nombre del arreglo, en inclusive puede ir en ambos lados si es un arreglo multidimencional

  • No es legal incluir el tamaño del arreglo en la declaracion

  • Un arreglo de objetos puede contener cualquier objeto que pase la prueba IS-A con respecto al tipo de objeto declarado
  • Declaracion de variables

  • Las variables de instancia pueden
    -->Tener cualquier tipo de control de acceso
    -->Ser transient , final o volatile

  • Es legal declara a una variable local con el mismo nombre de una variable de instancia esto es llamado como "shadowing"

  • Las variables finales tienen las siguentes propiedades
    -->No pueden ser reinicializadas una ves que se les asigna un valor
    -->No pueden referir a otro objeto una ves que han sido asignadas a un objeto
    -->Las variables de referencia fginal deben de ser inicializadas antes de que el contructor se complete

  • No existe cosa alguna como un objeto final, el hecho de que la referencia a un objeto no se pueda modificar no sgnifica que el objeto en si mismo no pueda modificarse

  • Las variables transient y volatile solo aplican a variables de instancia
  • Metodos con var-args

  • En java 5 se agrego una nueva forma de argumentos que acepta de cero a muchos argumentos y se llaman var-args

  • Un var ar se declara con el tipo, depues 3 puntos y el nombre ... por ejemplo hasAlgo(int... cont){}

  • un metodo solo puede tener un parametro var arg y este tiene que ir siempre el ultimo de los parametros
  • Otros modificadores para miembros

  • Los metodos finales no deben de ser sobreescritos

  • Los metidos abstractos son declarados con nombre, argumentos y valor de retorno pero no son implementados, terminan con ";"

  • Hay tres formas de darnos cuenta que un metodo no es abstracto
    -->El metodo no esta marcado como abstracto
    -->El metodo tiene llaves "{}"
    -->El metodo tiene codigo entre las llaves

  • La primera clase no abstracta(concreta) debe implementar todos los metodos abstractos de sus padres

  • El modificador synchronized puede utilizarse solo con metodos y bloques de codigo

  • los metodos sincronizados pueden tener cualquier control de acceso y tambien pueden marcarse como final

  • Los metodos abstractos deben de ser implementados por una subclase, por eso:
    -->Los metodos abstractos no pueden ser private
    -->los metodos abstractos no pueden ser final

  • El modificador native aplica solo a metodos

  • El modificador strictfp aplica solo a clases y metodos
  • Variable Locales

  • Las variable locales no pueden tener modificadores de acceso

  • final es el unico modificador permitido para variables locales

  • Las variables locales no obtienen valores por default, por lo que tienen que ser inicializadas antes de usarse
  • Modificadores de acceso de miembros

  • Metodos y variables de instancia(no locales) son llamadas miembros

  • Los miembros pueden usar los 4 niveles de acceso (public, private, protected y default)

  • El acceso a miembros viene en 2 formas.
    -->Codigo en una clase puede aceder por medio de una instancia al codigo de otra clase.
    -->El codigo de una clase puede acceder al codigo de otra mediante herencia

  • Si una clase no puede ser accesada sus miembros tampoco pueden serlo

  • Determina la visibilidad de las clases antes de determinar la visibilidad de los metodos

  • Los miembros publicos pueden ser accedidos por otras clases, aunque esten en otros paquetes

  • Si el miembro de la superclases es publica, cualquier clase que herede esta clase tambien heredara a sus miembros publicos

  • Los metodos que no se accesan mediante el operador punto (".") se accesan mediante herencia o pertenecer a la misma clase

  • this. siempre se refiee al metodo actual

  • this.aMethod es exactamente lo mismo que escribir aMethod

  • Los miembros privados solo se pueden acceder por clases en el mismo paquete

  • Los miembros privados no son vistos por las subclases, por lo tanto no pueden ser heredados

  • Los miembros default y protected difieren solo cuando hablamos de subclases
    -->Los miembros default solo pueden ser accedidos por clases del mismo paquete
    -->Los miembros protected pueden ser accedidos por clases del mismo paquete y por medio de herencia por miembros de otras clases no importando en que paquete esten
    -->protected = paquete + hijos (subclases)
    -->Fuera del paquete un miembro protected SOLO puede ser accedido por medio de herencia y una ves que se eredan los miembros se vuelven privados para todas las demas clases

    -->



  • Implementacion de interfaces.

  • Las interfaces son contratos que te dicen que hacer, pero no te dicen nada acerca de como las clases deben de hacerlo

  • Las interfaces pueden ser implementadas por cualquier clase de cualquier arbol de herencia

  • Una interfas es como una clase 100% abstracta, es implicitamente abstracta aunque escribas explicitamente la palabra "abstract" o no

  • LAs interfaces solo pueden tener metodos abstractos, no son permitidos los metodos concretos

  • Las interfaces son por default public y abstract, no es necesario que escribamos los modificadores para que sea asi

  • LAs interfaces pueden tener constantes, las cuales son implicitamente public, final y static

  • Escribir las palabras public, static o abstract e las constantes de las interfaces es opcional y se pueden escribir en cualquier orden

  • La primera clase no abstracta que implemente legalmente a la interfaz debe de tener las siguentes caracteristicas:
    -->Provee una implementacion concreta para los metodos de la interface
    -->Debe de seguir todas las reglas para osbreescribir los metodos que implementa
    -->No debe de declarar ninguna otra "Checked exception" de un metodo implementado
    -->Puede declarar Runtime Exception(Errores en tiempo de ejecucion.
    -->Mantener la misma sintaxis, incluyendo argumentos y tipos de retorno.

  • Una clase implementado una interfaz puede ser en si misma abstracta

  • Una clase abstracta no tiene por que implementar los metodos de una interface(pero la primera subcalase concreta si)

  • Una clase puede extender solo una clase pero implementar varias interfaces

  • Una interface puede extender varias interfaces

  • Las interfaces no pueden extender clases ni implementar clases ni interfaces

  • En el examen debemos de verificar que las clases e interfaces esten bien usadas antes de verificar el codigo en si
  • Otros modificadores de clases .

  • Las clases solo pudente tener otros 3 tipos de acceso
    -->final
    -->strictfp
    -->abstract

  • Una clase no puede ser final y abstract al mismo tiempo

  • Una clase final no puede ser extendida

  • Una clase abstracta no puede ser instanciada

  • Si se tiene un solo metodo abstracto dentro de una clase, la clase completa debe de ser abstracta

  • Una clase abstracta puede tener tanto metodos abstractos como no abstractos

  • la primera clase concreta en extenbder una clase abstracta debe de implemetar todos los metodos abstractos
  • Modificadores de acceso de clases

  • Existen 3 modificadores de acceso
    -->public
    -->private
    -->protected


  • Existen 4 tipos de niveles de acceso
    -->public
    -->private
    -->protected
    -->default


  • las clases solo pueden tener acceso publico o default

  • Una clase con un acceso default solo puede ser visto por las clases dentro del mismo paquete

  • Una clase con acceso public puede ser visto por cualquier clase en cualquier paquete

  • La visibilidad nos indica que la clase puede con respecto a la otra:
    -->Crear una instancia de otra clase
    -->Extender (ser una subclase) seotra clase
    -->Acceder a los metodos y variables de la otra clase
  • Reglas de declaracion.

  • Un archivo de codigo puede tener solo una clase publica

  • Si el archivo de codigo contiene una clase publica, debe esta debe de ser la misma que la de el archivo de codigo

  • Un archivo solo puede tener una sentencia "package" pero multiples "import"s

  • La sentencia del package debe de ir al principio del archivo

  • los imports deben de ir despues del package pero antes de la eclaracion de las clases

  • El package y los imports aplican para todas las clases del archivo

  • Los comentarios son de chocolate :D, pueden ir en cualquier parte

  • Un archivo puede tener mas de una clase no publica

  • Los archivos que no contienen ninguna clase publica se pueden llamar como quieran
  • Identificadores

  • Las variables deben de empezar con una letra, un signos de "$" o un "_" despues se pueden utilizar los mismos símbolos y números

  • Las clases y las interfaces deben empezar con Mayúscula

  • Los métodos y las variables deben de escribirse con "camelCase" (primero minúscula y después mayuscula al inicio de las demás palabras)

  • Las constantes deben de ser final y static y estar COMPLETAMENTE_EN_MAYUSCULAS