Programação com java: manter as coisas simples em seu aplicativo android
A chave para o sucesso com a programação Java é mantê-lo simples. A maioria dos programas funcionam inteiramente no reino virtual. Eles não têm tijolos, pregos, ou vigas. Você pode digitar um programa bastante complicada em minutos. Mesmo sem muscular e nenhum equipamento pesado, você pode criar uma estrutura cuja complexidade rivaliza com a de muitas estruturas físicas complicadas. Você, o desenvolvedor, tem o poder de construir intrincados, pontes virtuais.
Conteúdo
Um dos objetivos da programação é para gerenciar a complexidade. Um bom aplicativo simplesmente não é útil ou visualmente atraente - código de um bom aplicativo é muito bem organizado, fácil de entender e fácil de modificar.
Certas linguagens de programação, como C ++, suporta herança múltipla, em que uma classe pode ter mais de uma classe pai. Por exemplo, em C ++ você pode criar um Livro
classe A Material de ensino
classe, e uma Livro didático
classe. Você pode fazer Livro didático
prolongará tanto Livro
e Material de ensino
. Esta característica faz com hierarquias de classe bastante flexível, mas também faz as mesmas hierarquias extremamente complicado. Você precisa de regras complicadas para decidir como herdam os métodos de movimentação tanto do computador de Rato
classe e os roedores do Rato
classe.
Para evitar toda esta complexidade, Java não suporta herança múltipla. Em Java, cada classe tem um (e apenas um) superclasse. Uma classe pode ter qualquer número de subclasses. Você pode (e vai) criar muitas subclasses de Android do AppCompatActivity
classe. E outros desenvolvedores criem suas próprias subclasses de Android do AppCompatActivity
classe. Mas as classes não têm múltiplas personalidades. Uma classe Java pode ter apenas um pai. o Executivo
classe não pode se estender tanto o Empregado em tempo integral
classe eo PartTimeEmployee
classe.
A relação entre uma classe e subclasse sua é um de herança. Em muitas famílias da vida real, uma criança herda ativos de um dos pais. Essa é a forma como ele funciona.
Mas considerar a relação entre um editor e um autor. O editor diz: “Ao assinar este contrato, você concorda em submeter um manuscrito concluído até o décimo quinto de agosto.” Apesar de todas as desculpas que o autor dá antes do prazo final, a relação entre o editor eo autor é um dos obrigação. O autor concorda em assumir certa responsibilities- e, a fim de continuar a ser um autor, o autor deve cumprir essas responsabilidades. (By the way, não há subtexto neste parágrafo - nenhum.)
Agora considere Barry Burd. Quem? Barry Burd - aquele cara que escreve Programação Java para Desenvolvedores Android For Dummies, 2nd Edition, e alguns outros livros Para Dummies (todos da Wiley Publishing). Ele é um professor universitário, e ele também é um autor. Você deseja espelhar esta situação em um programa Java, mas Java não suporta herança múltipla. Você não pode fazer Barry estender tanto um Professor
classe e um Autor
classe, ao mesmo tempo.
Felizmente para Barry, Java tem interfaces. Uma classe pode estender apenas uma classe pai, mas uma classe pode implementar várias interfaces. A classe pai é um monte de coisas que uma classe herda. Por outro lado, como acontece com a relação entre um editor e um autor, uma interface é um monte de coisas que uma classe é obrigada a fornecer.
Aqui está outro exemplo. Embora uma empresa pode contratar consultores, consultores que trabalham para a empresa não são funcionários. Consultores são normalmente independente. Eles mostram-se temporariamente para ajudar as empresas a resolver problemas e, em seguida, deixar as empresas para se trabalhar em outro lugar. Nos Estados Unidos, a diferenciação entre um funcionário e um consultor é importante: Tão grave são as leis de retenção de impostos dos Estados Unidos que rotular um consultor de um “empregado” de qualquer tipo que sujeitam a empresa a riscos legais consideráveis.
Para incluir consultores com funcionários em seu código, você precisa de uma classe Consultant que é separado de sua já existente Empregado
hierarquia de classes. Por outro lado, os consultores têm muito em comum com empregados regulares da empresa. Por exemplo, cada consultor tem um getPayString
método. Você deseja representar essa semelhança em seu código, para que criar uma interface. A interface obriga uma classe para dar significado ao nome do método getPayString
.pacote
com.allyourcode.company-
interface pública a pagar {
Cordas getPayString pública () -
}
O elemento no código acima não é uma classe - é uma interface Java. Aqui está o que o código da lista diz:
Como uma interface, o getPayString
método tem um cabeçalho, mas nenhum corpo. Nesta interface, o getPayString
método não tem argumentos e retorna um valor do tipo Corda
. Uma classe que pretende implementar a A pagar
interface deve fornecer (directa ou indirectamente) um corpo para o getPayString
método. Ou seja, uma classe que pretende implementar A pagar
deve, de uma forma ou de outra, implementar o getPayString
método.
As próximas duas seções de código implementar o A pagar
interface e fornecer corpos para o getPayString
método.com.allyourcode.company- pacote
Video: Writing your first Android app – everything you need to know
importação java.text.NumberFormat-
importação java.util.Locale-
Consultor classe pública implementa a pagar {
nome- corda
double hourlyFee-
int hoursWorked-
moeda NumberFormat estática = NumberFormat.getCurrencyInstance (Locale.US) -
Video: Java (Android Studio) Tutorial - Calendar, SimpleDateFormat -
Consultor pública () {
}
Consultor pública (String nome, double hourlyFee, int hoursWorked) {
this.name = nome-
this.hourlyFee = hourlyFee-
this.hoursWorked = hoursWorked-
}
pagamento em dobro pública () {
voltar hourlyFee * hoursWorked-
}
@Sobrepor
Cordas getPayString pública () {
Nome retornar + ", " + Currency.format (pay ()) + " n"-
}
}
Confira este código: Outra classe implementa a interface
com.allyourcode.company pacote;
Employee public class implementa a pagar {
nome- corda
Cordas jobTitle-
int vacationDays-
double taxWithheld-
Funcionário público () {
}
Funcionário público (String nome, String jobTitle) {
this.name = nome-
this.jobTitle = jobTitle-
}
@Sobrepor
Cordas getPayString pública () {
Nome retornar + ", N Pay não conhecido"-
}
}
tanto o Consultor
e Empregado
aulas de implementar o A pagar
Interface - a interface que resume o que significa ser pago pela empresa. Com isto em mente, considere o seguinte código:com.allyourcode.a10_10- pacote
importação android.support.v7.app.AppCompatActivity-
importação android.os.Bundle-
importação android.widget.TextView-
importação com.allyourcode.company.Consultant-
importação com.allyourcode.company.Employee-
importação com.allyourcode.company.Payable-
classe pública MainActivity estende AppCompatActivity {
TextView textView-
@Sobrepor
protected void onCreate (Bundle savedInstanceState) {
super.onCreate (savedInstanceState) -
setContentView (R.layout.activity_main) -
textView = (TextView) findViewById (R.id.textView) -
Empregado empregado = new Employee ("Barry", "Autor") -
consultor consultor = new Consultant ("Willy", 100,00, 30) -
textView.setText ("") -
displayPay (empregado) -
displayPay (consultor) -
}
vazio displayPay (pago a pagar) {
textView.append (payable.getPayString ()) -
}
}
o displayPay
método não sabe nada sobre Empregado
aulas ou Consultor
classes. Todos displayPay
Método sabe é que ele quer que seu parâmetro para implementar o A pagar
interface. Enquanto o objeto que você passa para displayPay
implementa o A pagar
interface, o displayPay
O corpo de método pode chamar com segurança o getPayString
método.
tanto o Empregado
e Consultor
aulas de implementar o A pagar
interface. Assim, você pode passar um Empregado
opor-se a displayPay
método, e passar um Consultor
opor-se a displayPay
método. Essa flexibilidade - a capacidade de passar mais de um tipo de objeto para um método - ilustra o poder das interfaces do Java.
Duas classes de outra forma não relacionados (Empregado
e Consultor
) Tanto a implementar A pagar
interface.
A linha pontilhada não faz parte da UML padrão. As pessoas que administram o padrão tem maneiras muito melhores para representar interfaces.