Programación con java: mantener las cosas simples en su aplicación para android
La clave para tener éxito con la programación Java es que sea sencillo. La mayoría de los programas funcionan de forma totalmente en el mundo virtual. No tienen ladrillos, clavos o vigas. Puede escribir un programa bastante complicado en cuestión de minutos. Incluso sin el músculo y sin un equipo pesado, puede crear una estructura cuya complejidad rivaliza con la de muchas estructuras físicas complicadas. Usted, el desarrollador, tiene el poder de construir puentes, intrincados virtuales.
Uno de los objetivos de la programación es la gestión de la complejidad. Una buena aplicación no es simplemente útil o atractivo a la vista - el código de una buena aplicación está muy bien organizado, fácil de entender y fácil de modificar.
Ciertos lenguajes de programación, como C ++, soportan herencia múltiple, en el que una clase puede tener más de una clase padre. Por ejemplo, en C ++ se puede crear una Libro
clase a Material de enseñanza
clase, y una Libro de texto
clase. Puedes hacer Libro de texto
extender tanto Libro
y Material de enseñanza
. Esta característica hace que las jerarquías de clase bastante flexible, pero también hace que esas mismas jerarquías extremadamente complicado. Se necesitan reglas complicadas para decidir cómo heredar los métodos de movimiento tanto en el equipo de Ratón
clase y los de roedores Ratón
clase.
Para evitar toda esta complejidad, Java no soporta herencia múltiple. En Java, cada clase tiene una (y sólo una) superclase. Una clase puede tener cualquier número de subclases. Usted puede (y será) crear muchas subclases de Android AppCompatActivity
clase. Y otros desarrolladores crear sus propias subclases de Android AppCompatActivity
clase. Pero las clases no tienen múltiples personalidades. Una clase de Java puede tener sólo uno de los padres. los Ejecutivo
clase no se puede extender tanto el Empleado a tiempo completo
clase y la Empleado a tiempo parcial
clase.
La relación entre una clase y sus subclases es uno de herencia. En muchas familias de la vida real, un niño hereda activos de un padre. Esa es la forma en que funciona.
Pero tenga en cuenta la relación entre un editor y un autor. El editor dice, “la firma de este contrato, se compromete a presentar un manuscrito completo para el día quince de agosto.” A pesar de las excusas que el autor da antes de la fecha límite, la relación entre el editor y el autor es uno de obligación. El autor se compromete a asumir cierta responsabilidades- y, con el fin de seguir siendo un autor, el autor debe cumplir con esas responsabilidades. (Por cierto, no hay subtexto en este párrafo - ninguno en absoluto.)
Consideremos ahora Barry Burd. ¿Quien? Barry Burd - el tipo que escribe de programación Java para desarrolladores de Android para Dummies, segunda edición, y algunos otros libros Para Dummies (todos de Wiley Publishing). Él es un profesor de la universidad, y también es un autor. Que desea reflejar esta situación en un programa Java, pero Java no soporta herencia múltiple. No se puede hacer Barry extender tanto una Profesor
clase y una Autor
clase al mismo tiempo.
Afortunadamente para Barry, Java tiene interfaces. Una clase sólo puede ampliar una clase padre, sino una clase puede implementar muchas interfaces. Una clase padre es un montón de cosas que hereda una clase. Por otra parte, al igual que con la relación entre un editor y un autor, una interfaz es un montón de cosas que una clase está obligado a proporcionar.
He aquí otro ejemplo. Aunque una empresa puede contratar a consultores, asesores que trabajan para la empresa no son empleados. Los consultores son normalmente autónomos. Muestran de manera temporal para ayudar a las empresas a resolver los problemas y luego dejan a las empresas a trabajar en otro lugar. En los Estados Unidos, diferenciando entre un empleado y un consultor es importante: Tan graves son las leyes de retención de impuestos de Estados Unidos que el etiquetado de un consultor de un “empleado” de cualquier tipo sería someter a la Compañía a un considerable riesgo legal.
Para incluir consultores con los empleados en el código, que necesita una clase Consultor que está separado de su actual Empleado
jerarquía de clases. Por otra parte, los consultores tienen mucho en común con los empleados regulares de una empresa. Por ejemplo, cada consultor tiene una getPayString
método. Que desea representar esta comunidad en su código, por lo que se crea una interfaz. La interfaz obliga a una clase para dar significado al nombre del método getPayString
.paquete
com.allyourcode.company-
interfaz pública pagar {
Cadena getPayString pública () -
}
El elemento en el código anterior no es una clase - es una interfaz Java. Esto es lo que dice el código del anuncio:
Como una interfaz, el getPayString
método tiene una cabecera, pero ningún cuerpo. En esta interfaz, la getPayString
método no toma argumentos y devuelve un valor de tipo Cuerda
. Una clase que pretende implementar el Pagadero
interfaz debe proporcionar (directa o indirectamente) un cuerpo para el getPayString
método. Es decir, una clase que pretende poner en práctica Pagadero
debe, de una manera u otra, poner en práctica el getPayString
método.
Las siguientes dos secciones de código implementan el Pagadero
interfaz y proporcionar cuerpos para la getPayString
método.com.allyourcode.company- paquete
importación java.text.NumberFormat-
importación java.util.Locale-
Consultor clase pública implementa pagar {
Nombre cadena
doble hourlyFee-
int hoursWorked-
moneda NumberFormat estática = NumberFormat.getCurrencyInstance (Locale.US) -
Consultor pública () {
}
Consultor pública (String nombre, doble hourlyFee, int hoursWorked) {
this.name = Nombre
this.hourlyFee = hourlyFee-
this.hoursWorked = hoursWorked-
}
pagar el doble pública () {
volver hourlyFee * hoursWorked-
}
@Anular
Cadena getPayString pública () {
Nombre regresar + ", " + Currency.format (de pago ()) + "norte"-
}
}
Echa un vistazo a este código: Otra clase implementa la interfaz
com.allyourcode.company paquete;
Empleado clase pública implementa pagar {
Nombre cadena
cadena jobTitle-
int vacationDays-
doble taxWithheld-
empleado público() {
}
Empleado público (String nombre, cadena jobTitle) {
this.name = Nombre
this.jobTitle = jobTitle-
}
@Anular
Cadena getPayString pública () {
Nombre regresar + ", Pay no se conoce n"-
}
}
Ambos Consultor
y Empleado
clases implementan la Pagadero
interfaz - la interfaz que resume lo que significa ser pagado por la empresa. Con esto en mente, considere este código:com.allyourcode.a10_10- paquete
importación android.support.v7.app.AppCompatActivity-
importación android.os.Bundle-
importación android.widget.TextView-
importación com.allyourcode.company.Consultant-
importación com.allyourcode.company.Employee-
importación com.allyourcode.company.Payable-
MainActivity clase pública se extiende AppCompatActivity {
Vista de Texto textView-
@Anular
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState) -
setContentView (R.layout.activity_main) -
Textview = (TextView) findViewById (R.id.textView) -
empleado Empleado = new Empleado ("Barry", "Autor") -
consultor consultor = nuevo Consultor ("Colita", 100.00, 30) -
textView.setText ("") -
displayPay (empleado) -
displayPay (consultor) -
}
displayPay vacío (A pagar por pagar) {
textView.append (payable.getPayString ()) -
}
}
los displayPay
método no sabe nada acerca de Empleado
o clases Consultor
clases. Todos displayPay
Método sabe es que quiere que su parámetro para implementar el Pagadero
interfaz. Siempre y cuando el objeto se pasa a displayPay
implementa el Pagadero
interfaz, el displayPay
El cuerpo de método puede llamar de forma segura el getPayString
método.
Ambos Empleado
y Consultor
clases implementan la Pagadero
interfaz. Por lo tanto, se puede pasar un Empleado
oponerse a la displayPay
método, y pasar una Consultor
oponerse a la displayPay
método. Esa flexibilidad - la capacidad de pasar más de un tipo de objeto a un método - ilustra el poder de las interfaces de Java.
Dos clases no relacionadas (Empleado
y Consultor
) Tanto poner en práctica el Pagadero
interfaz.
La línea de puntos no es parte de la norma UML. Las personas que manejan el estándar tienen mucho mejores maneras de representar las interfaces.