Baixe o app para aproveitar ainda mais
Prévia do material em texto
E-Book - Apostila 3-Uma coisa de cada veze cada coisa no seu lugar (DL) E-Book - Apostila Esse arquivoé uma versão estática. Para melhor experiência, acesse esse conteúdo pela m ídia interativa. ca COÍ ga E-Book - Apostila Como bons desenvolvedores que somos, não podemos nospreocupar somente como correto funcionamento dos sistemas computacionais que desenvolvemos.O desenvolvimento de um sistema tem seu custo iniciale seu custo de manutenção ao longo do tempo. Sabe-se queo custo para se manter um sistema em funcionamento ao longo do tempoé muito mais alto do que o custo de sua implementação inicial. É justamente essaa razão pela qual estamos preocupados em desenvolver sistemas cujo código-fonte seja facilmente legível, bem organizado, fácil de se alterar quando fornecessário entre outros muitos aspectos fundamentais. Em particular, trataremos de um princípio chamado alta coesão, segundoo qualé de interesse implementar componentes de software que possuam uma única razão de ser, que resolvam somente um problema. Demonstra-se que, quando bem aplicado, esse princípio dá origema componentes de alto nível de reusabilidade, o queé excelente, já que podemos escrever uma solução uma única veze aplicá-la diversas outras vezes. Em outras palavras, evitamosa reinvenção da roda! Um métodoé um componente de software capaz de realizar uma tarefa. Métodos "conversam" entre si, promovendoo funcionamento do sistema.É comum queum método peça ajudaa outro para cumprira sua missão. Quando esse pedido de ajuda ocorre,é comum queexistam dadosa serem trocados entre eles, por meio de sua lista de parâmetrose tipo de retorno, mecanismos estes intimamente relacionados com o nível de reusabilidade dos métodos e, portanto, com o princípio da alta coesão. Reflexão 2-20 E-Book - Apostila Roberta recebeua tarefa de implementar um sistema simples, que realizasse instruções de entradae saída de dadose alguns cálculos. Dadaa simplicidade do problema, Roberta decidiu estruturar todaa solução no escopo central do seu programa, no main.A solução foi sendo desenvolvidae demonstrou-se mais complexa do queo esperado. Ç|uando atingiu um escopo muito grande,a produtividade de Roberta caiu consideravelmentee começoua ficar muito difícil seguir na resolução do problema.A solução estava desorganizadae difícil de ser expandida, levandoa programadoraa cogitara possibilidade de iniciara implementação do zero. Será que organizandoa solução em blocos, buscando uma reutilização de trechos de códigoe fragmentação dos problemas, Roberta não teria melhores possibilidades de expandira sua solução? Vamos estudar procedimentos, funçõese novas possibilidade de expandir, organizare reaproveitaro nosso código? Ao final deste conteúdo, você será capaz de: 3 - 20 E-Book - Apostila • Compreender asformas de estruturar soluções computacionaisa partir de procedimentose funções; • Estruturar procedimentose funções utilizando parâmetros de diferentes tipos; • Desenvolver blocos de códigos com entrada dados, através de parâmetros,e retorno de dados, através do comando return. Neste nosso estudo, veremos como um sistema computacional tem seu funcionamento caracterizado por meio da interação realizada entre métodos. O princípio da alta coesão Utilizaremosa palavra componente de maneira genérica para fazer referênciaa partes em geral de um sistema computacional, considerandoo seu código-fonte. Um componente pode seruma simples variável, uma classe, um objeto, um método entre muitas outras coisas que dependem, inclusive, da linguagem de programação escolhida. Quando desenvolvemos software, há princípiose boas práticas que fazem sentidoe que promovem muitos benefícios independentemente do ambiente escolhido, linguagem, aspectos técnicos etc. U m dos mais importantes chama-se alta coesão. Um componente altamente coesoé aquele que possui uma única razão de ser, um único propósito, uma única finalidade, que resolve somente um problema. O princípio da alta coesão se aplicaa inúmeros casos, veja. 4 - 20 E-Book - Apostila Um dos recursos mais simples com que lidamos quando começamosa aprendera implementar sistemas computacionaisé o uso de variáveis. Quando declaramos uma variável temos naturalmentea intenção de utilizá-la para resolver algum problema. ldealmente, escolhemos um nome apropriado para ela, que deixe bem claroo seu propósito, pois isso facilitaa leitura do código por outros desenvolvedores.É claro que uma variável declarada pode serutilizada para resolver diversos problemas simultaneamente ou ao longo do código. Essa, porém, nãoé considerada uma boa prática justamente pelo fato de isso comprometera legibilidade de códigoe de dificultara sua manutenção. Quando declaramos uma variável que serve para resolver somente um problema, que tem um único propósito (controlar uma estrutura de repetição, armazenara idade de um aluno etc.) dizemos que elaé altamente coesa. Ü/ ATENÇÃO Uma estrutura de repetiçãoé uma construção disponibilizada pelo compilador que permite que nós, desenvolvedores, especifiquemos um bloco de código uma única vez que deve serexecutado repetidamente. Ou seja, automatizamosa repetição do código ao invés de fazer isso manualmente. Considere um programa em que você deve obter as notas de uma quantidade muito grande de alunos (usando um diálogo, por exemplo)a fim de calculara média delase também exibir qual das notasé a maior. Tecnicamenteé possível resolver os três problemas de uma única vez, utilizando uma única estrutura de repetição. Porém, fazê-lo tendea comprometero nível de reusabilidade do código escrito no seguinte sentido.O cálculo de médiaé uma operação matemática elementar que pode serútil em diferentes contextos. Uma vez implementada,é desejável poder reutilizaro código pronto ao invés de reescrevê-lo. Porém, os dados utilizados parao cálculo da média não necessariamente serão obtidos usando um diálogo. Talvez seja de interesse obtê-los de um arquivo, fazendo uma requisiçãoa um servidor externo entre muitas outras possibilidades.O mesmo se aplica paraa funcionalidade que encontrao maior valor dentro de uma coleção de valores. Elaé uma operação de interesse gerale que pode serutilizada em contextos em quea coleção não necessariamenteé obtida utilizando-se um diálogo. Assim, resolver os três problemas utilizando-se uma única estrutura de repetição tendea fazer com que o desenvolvedor escreva novamente soluções previamente escritas. Note que isso tem tudoa vercomo princípio da alta coesão. Caso sejam escritas estruturas de repetição separadas, independentes (altamente coesas) cada qual com a sua responsabilidade (a primeira somente obtém osvalores,a segunda somente calculaa médiae a terceira somente encontrao maior valor) elas poderão ser facilmente reutilizadas sem ter de reescrevê-las. 5-20 E-Book - Apostila Conforme avançamos em nossos estudos, aprendemos sobre os conhecidos paradigmas de linguagens de programação. Alguns dos mais importantes são conhecidos como: Programação Orientadaa Objetose programação funcional.O uso de todos eles tem a ver com boas práticas de programaçãoe com reusabilidade e, portanto,o princípio da alta coesão se aplicaa cada um. No caso da Programação Orientadaa Objetos, aprendemos sobre classes, métodos, objetose muitos outros recursos. Todos eles podeme devem serdesenvolvidos com o princípio da alta coesão em mente! Escreva seus componentes sempre garantindo que cada um deles tem um único propósito! Saiba Mais As classes da API da linguagem Java são excelentes exemplos de componentes altamente coesos.A classe Math possui métodos que implementam asoperações matemáticas mais elementares de que grande parte dos programas de computador precisam, como operações aritméticas básicase funções trigonométricas. Método main, tipo de retorno, lista de parâmetros Essencialmente, um programa de computadoré uma sequência de instruções. Cabe ao desenvolvedor especificar qual delasé a primeira, ou seja,ondeo programa começa. Em Java, isso é feito especificando-se um método chamado main, veja. 6-20 E-Book - Apostila public class ExemploMetodoMain { public static void main(String[] args) { System.out.println('Método main executando... '); É comum escrever pequenos programas inteiros utilizando somenteo método main. Porém, conformea sua complexidade aumenta, devidoa fatores como reusabilidadee manutenabilidade,é muito mais interessante escrever os programas utilizando métodos. Um métodoé um bloco de código que possui: tipo de retorno, nome, lista de parâmetrose corpo. Além dasquatro partes que caracterizam um método, há diversos outros modificadores (como static, abstract, final etc.) que podem seraplicadosa eles.O modificador staticé específico da linguagem Java (outras linguagens também utilizam essa palavra, eventualmente com semântica diferente)e serve para indicar que o método em questão pode sercolocado em execução sem que uma instância da classe em que foi definido necessariamente exista. Em geral, métodos static são usados para implementar funcionalidades utilitárias e, do ponto de vista da orientaçãoa objetos,o seu uso deve ser moderado. FIGURA1 - Multitarefa 7-20 public class ExemploMetodoMain { public static void main(String[] args) { System.out.println('Método main executando...'); } } TNSTTTUCIONAL, 2020 E-Book - Apostila A seguir, vemosa definição de um método que exibe uma mensagem simples. Notea existência de duas partes muito importantes.A definição do métodoe o momento em queeleé colocado em execução (muitas vezes isso levao nome dechamada do método. Ou seja, chamar um método significa colocá-lo em execução). 8 - 20 E-Book - Apostila public class Hei{oWorldMetodos { static void olaMetodos (){ System.out.println ('Sou um novo método! '); public static void main(String[] args) { programa. '); programa. '); System.out.println ('ComeSando a execusão do olaMetodos(); System.out.println ('Terminando a execusâo do Um programa que utiliza métodos tem seufuncionamento controlado por meio do uso de uma estrutura chamada pilha. Ela funciona de maneira análoga ao que conhecemos como uma pilha de pratos. Em uma pilha de pratos,o mais naturalé que um novo prato seja adicionado no topo, nãoé mesmo?E sevocê forretirar um prato da pilha, geralmente você tira de onde? Do topo também! Ou seja,o último pratoa ser colocado na pilhaé o primeiroa ser retirado. Trazendoa analogia parao desenvolvimento de sistemas computacionais, dizemos queo último métodoa sercolocado em execuçãoé o primeiroa terminar. Essa estruturaé controlada pelo sistema operacional,o desenvolvedor fica blindado de terde lidar com ela diretamente, embora seja fundamental saber de sua existênciae sobre os detalhes de seu funcionamento. É importante entender que, quando um métodoé chamado, há um desvio no fluxo de execução de programa. Eledesvia paraa primeira instrução do métodoe prossegue executando uma a uma, até alcançaro final dele. Quando isso ocorre,o fluxo de execução volta paraa linha em que o método foi chamadoe prosseguea execução dali, instrução por instrução, em sequência. Veja: 9-20 public class HelloWorldMetodos { static void olaMetodos (){ System.out.println ('Sou um novo método!'); } public static void main(String[] args) { System.out.println ('Começando a execução do programa.'); olaMetodos(); System.out.println ('Terminando a execução do programa.'); } } E-Book - Apostila FIGURA2 - Chamada deum método AUTOR,2020 Na Figura2 vemos como ocorrea chamada de um método.À esquerda, um retângulo representao método maine contém assuas três linhas de código.À direita, um retângulo representao método olaMetodose contéma sua única linha de código. Há uma seta saindo da linha do método main em queo método olaMetodosé chamado, indicandoo desvio na execução. Ao final do método olaMetodos, logo abaixo do retângulo queo representa, há uma seta saindo dali que aponta paraa linha no método main em queo método olaMetodos foi chamado, indicando quea execução prosseguea partir dali. Estudo Guiado Métodos sempre pertencema classese a sua chamada deve ser precedida pelo operador ponto. Além disso,o que precedeo operador ponto pode sertantoo próprio nome daclasse quantoo nome deuma instância. Aprenda mais nas páginas de 157a 160. 10-20 Clique no link e leiao livro E-Book - Apostila DEITEL, P.; DE IT EL, H. J ava: como programar. 10.ed. Sáo Paulo: Pearson Education do Brasil, 2017. Repare no uso dos parênteses, tanto na definição do método quanto em sua chamada, que caracterizama sua lista de parâmetros. Ali podemos especificar uma coleção de variáveis, cada qual com o seu tipo, que servirão de entrada para queo método realizea sua tarefa em função delas: uma criança que vai ao mercadoa pedido da mãe para comprar um litro de leite não pode fazê-loa menos queelalheentregueo dinheiro para pagar pelo produto (Figura 3). FIGURA3 - Quando faltou parâmetro No exemploa seguir,o método soma possui, em sua lista de parâmetros, duas variáveis inteiras.O método que desejar utilizá-lo (neste caso,o main) deverá entregara ele dois valores que serão atribuídosa essas variáveis. Ele se encarrega de fazera sua somae exibiro resultado na tela. 11-20 https://plataforma.bvirtual.com.br/Acervo/Publicacao/39590 E-Book - Apostila import javax.swing.J0ptionPane; public class ListaDeParametros { public static void main(String[] args) { int x = 2, y = 3; s oma(x , y ); public static void soma(int a, int b) { int resultado = a + b; JOptionPane. showMessageDialog(null, resultado); Vejaa forma como osvalores são passados de um métodoa outro: Método que utilizaa sua lista de parâmetros 1.A eXecuçBo do programa começa aqui, r›o método main Método main AUTORES, 2020 2.O fluso de ewcução dem4a para o méX•do s<•me. Os valores2 e 3 são envla‹Ioaa ele pelo mdtodo malic A variávela vale2 e a varlãrelb voe 3 Método soma (a= 2,b = 3) i t e u Itdão b yOptionPan e.showMessageDialog(nu II,r esultado)f 2 O nÜ utwlo quandotermina o fluxo de eXecuç8o retorna paraa Ikiha em que foi chamado. 12 - 20 import javax.swing.JOptionPane; public class ListaDeParametros { public static void main(String[] args) { int x = 2, y = 3; soma(x, y); } public static void soma(int a, int b) { int resultado = a + b; JOptionPane.showMessageDialog(null, resultado); } } E-Book - Apostila A Figura4 mostra um método que utilizaa sua lista de parâmetros para receber dois números inteiros. Do lado esquerdo há um retângulo que representao método maine contém assuas instruções. Há uma seta saindo da linha em que o método somaé chamado. Elaaponta parao retânguloà direita, que representao método soma. Ele contémo código do método somae uma seta saindo da parte inferior dela indica que, quando eleacaba,o fluxo de execução volta parao método main, logo apósa linha em que o método soma foi chamado.A ideiaé mostrar comoo método main envia valores parao método soma quesãorecebidos por ele na sua lista de parâmetros. Estudo Guiado Quando passamosa utilizar métodos, tendemosa cometer erros muito simples que podem nosdesmotivare nos tirar do caminho do sucesso. Aprenda mais sobre elese sobre como evitá-los nas páginas de 161a 175. Cl1que no linke leiao livro DEITEL, P.; DEITEL, H.J ava: como programar. 10.ed. São Paulo: Pearson Education do Brasil, 2017. 13-20 https://plataforma.bvirtual.com.br/Acervo/Publicacao/39590 E-Book - Apostila Há uma característica muito importante sobreo funcionamento do método soma quefoi ilustrado. Ele realizaa tarefa que lhe foi solicitada pelo método main: somar osvalores que lhe foram entregues por meio da sua lista de parâmetros. Porém, quando termina de fazera operação aritmética,o próprio método soma decideo que fazer com o resultado! Ele decide queo que deve serfeitocom o resultadoé exibir em um diálogo. Mas e o método main? Será que ele não pediu que a soma fosse realizada por estar interessado no resultado para, possivelmente, utilizá-lo em outras operações? Analogamente, no mundo real, quando uma criança vai ao mercado buscar um litro de leite paraa mãe não pode simplesmente compraro produtoe tomar tudo. Provavelmentea mãe espera queo seu filho resolvao problema (compraro leite)e lhe entregueo resultado (o leite comprado) para que ela possa fazer algo com ele. FIGURA5 - Agora os parâmetros foram passados adequadamente... ELABORAÇÃO DO AUTOR, 2020. lsso nos leva ao estudo do mecanismo conhecido como tipo de retorno. Além de realizar tarefas, um método pode também devolver resultados eventualmente calculados por ele. No caso do método soma,o que elepoderia devolveré evidente:o resultado da soma realizada utilizando como operandos os seus parâmetros. O uso do tipo de retorno de um métodoé muito simples. Quando desejamos que um método devolva algo,o primeiro passoé identificar qualo tipo do que vai ser devolvido:é um inteiro?É um número real? Uma girafa? (calma, isso vai fazer sentido quando conversamos sobre orientaçãoa objetos). Uma vez identificadoo tipo do dadoa serdevolvido pelo método, trocamosa palavra void pelo tipo. Por exemplo, seo valora ser devolvidoé um número inteiro, entãoa palavra void deve ser substituída por int. No exemploa seguir,o método somaé utilizado duas vezes, com valores diferentes. Ao invés de simplesmente exibir cada resultado, ele devolve cada um deles parao método main que, por sua vez, decide exibi-los no console. 14 - 20 Curiosidade E-Book - Apostila public c1ass TipoDeReto rno ( pub\ic static void main( String[] a rgs) ( int x = 2, y = 3, w = 4, z = 5; int resultadol = soma(x, y); int resultado2 = soma(w, z); System.out. println( resultadol); System.out. println( resultado2); static int soma(int a, int b) { int resultado = a + b; return resultado; Repare no uso da palavra-chave return. Elaé usada pelo método soma para especificaro que ele deseja entregar parao método main quando terminaa sua execução. Neste caso, ele deseja entregaro valor que está armazenado na variável resultado. Note queo seu tipo de retornoé inte que essa palavra tomouo lugar da palavra void.É importante quea expressão que apareceà frente da palavra return (resultado, neste caso) resulte em um valor compatível com o tipo de retorno do método. Por exemplo, um método cujo tipo de retornoé int não pode devolver uma String (muito menos uma girafa). 15-20 public class TipoDeRetorno { public static void main(String[] args) { int x = 2, y = 3, w = 4, z = 5; int resultado1 = soma(x, y); int resultado2 = soma(w, z); System.out.println(resultado1); System.out.println(resultado2); } static int soma(int a, int b) { int resultado = a + b; return resultado; } } Veja E-Book - Apostila Em Java, toda expressão tem um tipo determinado em tempo de compilação. Em particular, issoé verdade paraa expressão que aparece logoà frente da palavra return eventualmente utilizada por um método.O compilador se encarrega de verificar sea expressão devolvida pelo métodoé compatível com o seu tipo de retorno. Por exemplo, um método que promete devolver um valor inteiro, pode devolver somente valores inteiros. Um método que promete devolver um valor real, pode devolver somente valores reaiso que, evidentemente, inclui valores inteiros. Um método que promete devolver uma girafa pode devolver somente uma girafa ou qualquer subtipo de girafa.É aí que fica caracterizadoo significado da palavra compatível:o tipo da expressão devolvida não precisa ser igual ao tipo de retorno, basta que seja compatível. como funciona esse programa graficamente: FIGURA6 - Método com tipo de retornoe listra de parâmetro 16 - 20 AUTORES, 2020 E-Book - Apostila A Figura6 mostra um método com tipo de retornoe listra de parâmetros.À esquerda, um retângulo representao método maine contémo seu código.À direita, há dois retângulos, um abaixo do outro. Ambos contêmo código do método somae representam uma chamadaa ele. Há uma seta que aponta da chamada ao método soma feita pelo método main que aponta parao retângulo da direita superior. Os valores dea e b são iguaisa 2 e 3, respectivamente. Há uma seta que sai da parte inferior delee aponta paraa linha em que o método soma foi chamado pela primeira vez pelo método main. Há uma seta que aponta parao segundo retânguloà direita, que fica na parte inferior. Neste caso, os valores dea e b são iguaisa 4 e 5, respectivamente. Uma seta representao retorno do método soma parao método main, paraa linha em que ele foi chamado.A ideiaé mostrara forma como um método pode chamaro outro entregando-lhe valorese recebendo resultados. Estudo Guiado 17-20 E-Book - Apostila A interação entre métodosé também chamada detroca de mensagens. Veja mais detalhes sobre seu funcionamento nas páginas de 473a 481. DEITEL, P.; DE IT EL, H. J ava: com o programar. 10.ed. Sáo Paulo: Pearson Educationdo Brasil, 2017. No mundo real,o resultado dessa interação será um bolo prontinho para ser degustado! O texto acima (que fala que o bolo estará pronto) explicaa relação do quadrinho como conteúdo. Após mostraro funcionamento técnico de métodos fazemos uma analogia com a compra de leite. Pense que agorao processo de compra do leitee a produção do bolo ocorreram conformeo planejado. Qualo resultado? Resultado 18-20 https://plataforma.bvirtual.com.br/Acervo/Publicacao/39590 AUTORES, 2020 E-Book - Apostila Finalizamosa unidade como estudo de procedimentose funções ou métodos. Diversos conceitos estudados sãoe serão essenciais para estruturarmos soluções computacionais da maneira adequada. Dentro os principais conceitos que estudamos, são elencados: 19-20 Refe i ti E-Book - Apostila DEITEL, P.; DE ITEL, H. Java: como programar. 10.ed. São Paulo: Pearson Education do Brasil, 2017. 20 - 20
Compartilhar