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.

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 ()) -
}
}

-Java-programação para-android-developers-2e-empregado
Pagar um empregado e um consultor.

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.

-Java-programação para-android-developers-2e interface
Uma interface atravessa a hierarquia de classes.

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.


Publicações relacionadas