viernes, 7 de agosto de 2009

Declare Interfaces (Exam Objectives 1.1 and 1.2)

Declare Interfaces (Exam Objectives 1.1 and 1.2)
Declaring an Interface


public interface Bounceable{
public abstract void bounce( );
public abstract void setBounceFactor(int bf); }

Class Tire implements Bounceable {
public void bounce( ){...}
public void setBounceFactor(int bf){ } }
  • Todos los interface methods son implícitamente public and abstract.
  • Todas las variables definidas en una interface debe ser public, static, and final - las interfaces sólo puede declarar constantes, no instance variables.Interface methods no debe ser static.
  • Dado que los interface methods son abstract, no pueden ser final, strictfp, o native.
  • Una interfaz puede extender uno o más interfaces.
  • Una interfaz no puede extender otra interfaz.
  • Una interfaz no puede implementar otra interfaz o clase.
  • Una interfaz debe declararse con la palabra clave interface.
  • Un Interfaz puede ser usado en polimorfismo.
Las interfaces son implicitamente public y abstract asi que estas dos interfaces son lo mismo:
public interface Bounceable {
public abstract void bounce();
public abstract void setBounceFactor(int bf);
}

public interface Bounceable {
void bounce(); // No modifiers
void setBounceFactor(int bf); // No modifiers
}

Por ejemplo, las siguientes cinco method declarations, si es declarado dentro de sus propias interfaces, son legales e identicas.
void bounce();
public void bounce();
abstract void bounce();
public abstract void bounce();
abstract public void bounce();

Los siguientes interface method declarations no compilan:
final void bounce(); // final and abstract can never be used - together, and abstract is implied
static void bounce(); // interfaces define instance methods
private void bounce(); // interface methods are always public
protected void bounce(); // (same as above)

Declaring Interface Constants
Usted puede poner constantes en una interface.Con esto garantiza que la implementacion de la interfaz tendra acceso a la misma constante, como si la clase que había heredado. 
Las 
key rule for interface constants son: 
final public static 

El siguiente codigo no compila:
interface Foo {
int BAR = 42;
void go();
}
class Zap implements Foo {
public void go() {
BAR = 27;
}
}
Usted no puede cambiar el valor de una constante! Una vez que el valor ha sido asignado, el valor no puede ser modificado.

EXERCISE 1-1 Creating an Abstract Superclass and Concrete Subclass

EXERCISE 1-1
Creating an Abstract Superclass and Concrete Subclass
El siguiente ejercicio pondrá a prueba su conocimiento de public, default, final y abstract classes. Crear un abstract superclass llamado fruit y concrete subclass llamado Apple. La superclass debe pertenecer a un paquete llamado food y la subclass, pueden formar parte del paquete por defecto. Hacer pública la superclass y la subclass default access.

1. Crear la siguiente superclass:
package food;
public abstract class Fruit {
protected String nombre = "Fruit";
public void eat() {
System.out.println("Fruit.eat()");
}
public String toString() {
return nombre;
}
}
2. Crear la subclass en el default:
class Apple extends Fruit {
public Apple() {
nombre = "Apple";
}
public void eat() {
System.out.println("Apple.eat()");
}
public static void main(String[] args) {
Apple a = new Apple();
System.out.println("a: " + a.toString());
a.eat();
}
}
3. Create a directory called food off the directory in your class path setting.
4. Attempt to compile the two files. If you want to use the Apple class, make
sure you place the Fruit.class file in the food subdirectory.
Compilando:
a: Apple
Fruit.eat()

Bueno este es el ejercicio 1.1. como veran nada del otro mundo.

1. Declarations and Access Control . 1.2 Declare Classes (Exam Objective 1.1)

1.2 Declare Classes (Exam Objective 1.1)
Cuando escribimos código en java, lo que estamos escribiendo es justamente clases o interfaces, dentro de estas clases como conocemos pueden haber variables y métodos(y algunas otras cosas más), la forma en la que declaramos las clases, métodos y variables afecta en forma sustancial el comportamiento del código, por ejemplo un método público puede ser accedido desde código ejecutandose en cualquier lugar en tu aplicación, haciendo el método privado lo oculta a cualquier posible llamada(excepto a la clase en la cuál fué declarada).

Source File Declaration Rules - Reglas de declaración de archivos fuente


1. Solo puede haber una clase pública por archivo fuente.
2. Los comentarios pueden aparecer al inicio o al fin de cualquier línea en el archivo de código fuente.
3. Si es que hay una clase pública el nombre del archivo debe de coincidir con el nombre de la clase, por ejemplo si hay una clase declarada public Casa entonces el nombre del archivo deberá ser Casa.java
4. Si la clase es parte de un paquete, la declaración del paquete debe ser la primera línea en el archivo de código fuente, antes de cualquier declaración de importacion import que pueda estar presente.
5. Si hay declaraciones de importacion import, estas declaraciones deben de ir entre la declaración del paquete(si es que lo hubiera) y la declaración de la clase.
6. Declaraciones de importación import y de paquetes package aplican a todas las clases dentro de un archivo de código fuente, en otras palabras, no hay manera para declarar multiples clases en un archivo y tenerlos en diferentes paquetes o usar diferentes importaciones.
7. Un archivo puede tener más de una clase no pública.
8. Archivos con clases no públicas pueden tener un nombre que no coincide con cualquiera de las clases en el archivo.

Class Declarations and Modifiers -Declaraciones de clases y modificadores

1. Modificadores de acceso: public, protected, private
2. Modificadores de no-acceso: strictfp, final y abstract

Class Access - Acceso de Clase
Que es lo que significa acceder a una clase?, cuando decimos que el código de una clase(class A) a accedido a otra clase(class B) esto significa que la clase A puede hacer cualquiera de las 3 siguientes acciones:

Crear una instancia de la clase B.
class A{
B b = new B( );
}


Extender la clase B.
class A extends B{ }

Accesar ciertos métodos y variables de la clase B, dependiendo del control de acceso de estos métodos y variables.
class A{
B b = new B( );
A(){
b.method();
}
}


Default Access - Acceso por Defecto.

Una clase con default access no tiene un modificador de acceso que le precede en su declaración, es decir tiene la forma class X{ } y no public class X { } este es el control de acceso que se obtiene cuando no escribimos el modificador en la declaración, las clases con default access pueden ser vistas como clases con nivel de acceso a nivel de paquete, porque una clase con default access puede ser vista solo por clases dentro del mismo paquete. Por ejemplo si tenemos una clase llamada Persona en el paquete miempresa.core declarada de la siguiente manera:

package cert;
class Beverage { }


Usando la clase anterior pero en otro paquete:

package exam.stuff;
import cert.Beverage;
class Tea extends Beverage { }


al compilar la clase Beverage : no hay problema.
al compilar la clase Tea: sal el mensaje.
Can't access class cert.Beverage. Class or interface must be
public, in same package, or an accessible member class.
import cert.Beverage;


Public Access - Acceso Público.
Una declaración de clase con la palabra clave public da a todas las clases de todos los paquetes acceso a esta clase pública.
package cert;
public class Beverage { }

entonces esta clase puede ser accedida desde cualquier clase en cualquier paquete desde mi aplicación. Si tratamos de usar la clase pública desde otro paquete entonces debemos de importar dicha clase con la palabra clave import

Other (Nonaccess) Class Modifiers - Otros Modificadores de Clase que no son de Acceso.
Podemos modificar la declaración de una clase con las palabras clave final, abstract, or strictfp
Final Classes - Clases Finales.
Cuando es usada en la declaración de una clase, la palabra clave final significa que la clase no puede ser extendida, en otras palabras ninguna clase puede heredar o extender una clase declarada final si intentamos hacerlo en compilador nos retornará un error.

Vamos a modificar nuestro ejemplo class Beverage poniendo la palabra clave final.

package cert;
public final class Beverage {
public void importantMethod() { }
}


Ahora,compilamos Tea subclass:
package exam.stuff;
import cert.Beverage;
class Tea extends Beverage { }

Muestra el error:
Can't subclass final classes: class
cert.Beverage class Tea extends Beverage{
1 error


Abstract Classes - Clases Abstractas.
Una clase abstracta no puede nunca ser instanciada, su único proposito es ser extendida.
public abstract class Car{ }

no podemos hacer esto:
Car p = new Car();
sale el error:
AnotherClass.java:7: class Car is an abstract
class. It can't be instantiated.
Car x = new Car();
1 error


lo correcto:
public class Toyota extends Car{ }

Bueno este es parte del primer capitulo conforme siga leyendo el libro tratare de repasar y creando mas post.

1 Declarations and Access Control 1.1 Identifiers & JavaBeans (Objectives 1.3 and 1.4)

1.1 Identifiers & JavaBeans (Objectives 1.3 and 1.4)
1. Legal Identifiers

Los identificadores deben comenzar con una letra, un carácter de moneda ($), o una conexión
tales como el carácter de subrayado (_). Identificadores no pueden empezar con un número.
Después de que el primer carácter, los identificadores pueden contener cualquier combinación de letras o números.
En la práctica, no hay límite del número de caracteres que un identificador puede tener.
No se puede utilizar una palabra clave de Java como un identificador. Tabla 1-1 enumera todos los Java palabras entre ellos uno para un nuevo 5.0, enum.
Los identificadores en Java son case-sensitive(sensibles..se recienten...jajaja) asi que distinguen entre mayúsculas y minúsculas; foo y FOO son dos identificadores diferentes.


Ejemplo identificadores legales:
int _a;
int $c;

int ______2_w;

int _$;

int this_is_a_very_detailed_name_for_an_identifier;


Ejemplo identificadores ilegales(los bandalos):
int :b;
int -d;

int e#;
int .f;
int 7g;

2. Sun's Java Code Conventions

Classes and interfaces:
Clases: La primera letra debe ser mayúscula, y si varios palabras están unidas entre sí para formar el nombre, la primera letra de la palabra interior debe ser mayúscula (un formato que a veces llamado "CamelCase"). Para
clases, los nombres que suelen ser los sustantivos. Por ejemplo:
Dog
Account
PrintWriter
Para interfaces, los nombres son tipicamente adjetivos:
Runnable
Serializable
Methods :La primera letra debe ser minúscula, luego en intermedio inicia con mayuscula. Además, los nombres que suelen ser pares verbo-sustantivo.Por ejemplo:
getBalance
doCalculation
setCustomerName
Variables de los métodos, la CamelCase formato se debe utilizar, a partir de una letra minúscula. Sun recomienda a corto, nombres significativos, que los sonidos buena para nosotros.
buttonWidth
accountBalance
myString
Constantes Java: para variables estáticas y final. Ellos deben nombrarse con letras mayúsculas con un separador(_):
MIN_HEIGHT

3. JavaBeans Standards

Ejemplo de metodos validos de JavaBean:
public void setMyValue(int v)
public int getMyValue()
public boolean isMyStatus()
public void addMyListener(MyListener m)
public void removeMyListener(MyListener m)
Ejemplos invalidos.
void setCustomerName(String s) // must be public
public void modifyMyValue(int v) // can't use 'modify'
public void addXListener(MyListener m) // listener type mismatch

sábado, 1 de agosto de 2009

Microblogging ideas de Negocios

Buscando en mis horas de vagaciones, me puse a revisar mi twitter y a buscar alternativas y encontre que existen muchas variantes e interesantes opciones en este negocio.
Enlaces referidos a twitter en los negocios.
http://blogs.alianzo.com/redessociales/2008/12/12/modelos-negocio-twitter/
http://www.ducttapemarketing.com/TwitterparalosNegocios.pdf
microblog que fomenta la colaboracion dentro de la empresa:
https://www.yammer.com/
https://presentlyapp.com/
http://coopapp.com/
compartir imagenes con twitter:
http://twitpic.com/
microblog con video.
http://qik.com/
http://beta.twiddeo.com/
http://www.tweetube.com/

Envio de mensaje de twitter a determinado grupo de amigos:
http://grouptweet.com/
Buscador de tag twitter, facilitar y organizar los mensajes mas recientes: http://www.twitag.com/
Herramienta que te ayuda a organizar tweetup.
http://twtvite.com/