Buscar

Princípio da Alta Coesão

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

Continue navegando