Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

<p>1. Descreva três benefícios da propriedade de projeto chamada ocultamento de</p><p>informação (information hiding)?</p><p>R: Desenvolvimento paralelo, considerando que fora</p><p>implementado um número de n classes, tendo suas informações principais</p><p>ocultadas, fica mais fácil implementá-las em paralelo, aumentando a velocidade</p><p>de desenvolvimento.</p><p>Flexibilidade a Mudanças, dada uma classe que esteja com</p><p>problemas de desempenho, mas tenha suas informações ocultadas, isso torna</p><p>mais fácil a troca dessa classe por outra que tenha um algoritmo melhor.</p><p>Facilidade de entendimento, dado o alto desacoplamento das classes,</p><p>não é necessário entender o sistema por inteiro a princípio, mas apenas as</p><p>classes das funcionalidades que você deseja trabalhar.</p><p>2. Classitis é o nome dado por John Ousterhout à proliferação de pequenas</p><p>classes em um sistema. Segundo ele, classitis pode resultar em classes que</p><p>individualmente são simples, mas que aumentam a complexidade total de um</p><p>sistema. Usando os conceitos de acoplamento e coesão, como podemos explicar</p><p>o problema causado por essa doença?</p><p>R: A coesão nos traz o conceito de uma para um serviço, ou seja, teremos</p><p>que ter seus métodos e atributos, destinados a um único serviço final. Ao</p><p>separarmos esse serviço em várias pequenas classes estaríamos ferindo esse</p><p>princípio, além disso aumento o acoplamento, já que provavelmente várias classes</p><p>teriam que acessar diversos métodos e atributos de outras classes, dificultando a</p><p>manutenção desse sistema.</p><p>3. Suponha um programa em que todo o código está implementado no método</p><p>main. Ele tem um problema de coesão ou acoplamento? Justifique.</p><p>R: Coesão, já que o mesmo tem um alto grau de responsabilidade em um</p><p>único módulo.</p><p>4. Qual princípio de projeto é violado pelo seguinte código? Como você poderia</p><p>alterar o código do método para atender a esse princípio?</p><p>void sendMail(ContaBancaria conta, String msg) {</p><p>Cliente cliente = conta.getCliente();</p><p>String endereco = cliente.getMailAddress();</p><p>"Envia mail"</p><p>}</p><p>O princípio violado foi o de information hidding (ocultação de informação), no</p><p>código, a classe ContaBancaria expõe o objeto Cliente ao fornecer um</p><p>método getCliente() violando o princípio.</p><p>Para melhorar o código e seguir o princípio, eu encapsularia mais os detalhes</p><p>da classe ContaBancaria e Cliente. Em vez de permitir o acesso direto ao</p><p>objeto Cliente, eu poderia criar um método na classe ContaBancaria que</p><p>fornece apenas a informação necessária, como o endereço de e-mail do</p><p>cliente.</p><p>5. O que é o SOLID, apresente exemplos.</p><p>Solid, são 5 princípios criados com o intuito de manter o código organizado,</p><p>legível e de fácil manutenção.</p><p>Single Responsability: um método console, que printa o texto que foi</p><p>passado como parâmetro, sua única responsabilidade é imprimir.</p><p>Open/Closed: Nos diz que as entidades de software (Classes, métodos,</p><p>módulos), devem estar abertos a extensões e fechados a modificações. Uma</p><p>classe calculaSalário, onde nela tem teremos um método para cada tipo de</p><p>funcionário.</p><p>Liskov Substitution Principle:</p><p>Interface segregation: As interfaces têm que ser coesas e específicas para</p><p>cada cliente. Uma interface principal funcionário e outras duas</p><p>funcionarioCLT e funcionarioPublico que extends a classe funcionario.</p><p>Dependency Inversion: Prefira interfaces a classes, criar a interface</p><p>primeiro para depois a classe.</p><p>6. Suponha uma classe base A. Suponha que queremos adicionar quatro</p><p>funcionalidades opcionais F1, F2, F3 e F4 em A. Essas funcionalidades podem</p><p>ser adicionadas em qualquer ordem, isto é, a ordem não é importante. Se</p><p>usarmos herança, quantas subclasses de A teremos que implementar? Se</p><p>optarmos por uma solução por meio de decoradores, quantas classes teremos</p><p>que implementar (sem contar a classe A). Justifique e explique sua resposta.</p><p>R: No primeiro caso teremos que gerar uma subclasse para cada</p><p>função e mais subclasses dessas subclasses envolvendo todos cenários</p><p>possíveis, dando o total de 4! + 1 = 25 subclasses. Com decoradores, teremos</p><p>uma classe para cada funcionalidade, onde cada decorador adicionaria a</p><p>funcionalidade à classe base A. Como cada classe é independente uma da outra,</p><p>podemos adicionar elas a classe A separadamente, sem precisar criar</p><p>combinações.</p><p>7. Cite um design pattern estrutural, comportamental e de criação.</p><p>R:Criação: Factory method. Estrutural: Facade. Comportamental: Iterator.</p><p>8. Por que a implementação de Singleton mostrada nos slides não funciona com</p><p>sistemas concorrentes (multi-thread)? Descreva um erro que pode ocorrer</p><p>quando ela é usada com esse tipo de sistema.</p><p>R: Pois criaremos somente um objeto por classe. Logo, ao</p><p>usarmos multi-thread, o mesmo objeto poderia tentar acessar o mesmo atributo</p><p>para métodos diferentes, criando assim a condição de corrida, onde</p><p>possivelmente, um método reescreveria o outro.</p><p>9. Como usar strategy e algoritmos de ordenação.</p><p>Criar uma classe abstrata(interface) que vai conter todas as classes que possuem</p><p>a mesma característica, ou seja, precisam utilizar o mesmo método</p><p>10.Uma equipe está realizando testes com o código-fonte de um sistema. Os testes</p><p>envolvem a verificação de diversos componentes individualmente, bem como das</p><p>interfaces entre eles. Essa equipe está realizando testes de:</p><p>unidade</p><p>aceitação</p><p>sistema e aceitação</p><p>integração e sistema</p><p>unidade e integração</p><p>11. Suponha o seguinte requisito: alunos recebem conceito A em uma disciplina se</p><p>tiverem nota maior ou igual a 90. Seja então a seguinte função que implementa</p><p>esse requisito:</p><p>boolean isConceitoA(int nota) {</p><p>if (nota > 90)</p><p>return true;</p><p>else return false;</p><p>}</p><p>O código dessa função possui três comandos, sendo um deles um if; logo,</p><p>ela possui dois branches. Responda agora às seguintes perguntas.</p><p>a. A implementação dessa função possui um bug? Se sim, quando esse</p><p>bug resulta em falha?</p><p>R: A condição do if, quando o aluno tiver a nota igual a 90, ele</p><p>retornará false, mesmo que o aluno tenha tirado a nota necessária</p><p>para passar.</p><p>b. Suponha que essa função — exatamente como ela está implementada</p><p>— seja testada com duas notas: 85 e 95. Qual a cobertura de</p><p>comandos desse teste? E a cobertura de branches?</p><p>R: 85 – 2/3 comandos e ½ branches e 95 – 3/3 comandos e 2/2</p><p>branches</p><p>c. Seja a seguinte afirmação: se um programa possui 100% de cobertura</p><p>de testes, em nível de comandos, ele está livre de bugs. Ela é</p><p>verdadeira ou falsa? Justifique.</p><p>R: Falso. Já que os testes podem não cobrir todos os casos possíveis,</p><p>podendo assim ainda ocorrerem bugs.</p><p>12.Complete os comandos assert nos trechos indicados.</p><p>public void test1() {</p><p>LinkedList list = mock(LinkedList.class);</p><p>when(list.size()).thenReturn(10);</p><p>assertEquals(list, 10);</p><p>}</p><p>public void test2() {</p><p>LinkedList list = mock(LinkedList.class);</p><p>when(list.get(0)).thenReturn("Engenharia");</p><p>when(list.get(1)).thenReturn("Software");</p><p>String result = list.get(0) + " " + list.get(1);</p><p>assertEquals(result, “Engenharia Software”);</p><p>}</p><p>13.Marque a alternativa FALSA:</p><p>a. refactorings melhoram o projeto de um sistema de software.</p><p>b. refactorings tornam o código de um sistema mais fácil de ser</p><p>entendido.</p><p>c. refactorings facilitam a localização e a correção de bugs futuros.</p><p>d. refactorings aceleram a implementação de novas funcionalidades.</p><p>e. refactorings melhoram o desempenho de um sistema, em termos de</p><p>tempo de execução.</p><p>14.O gráfico a seguir mostra o total acumulado de novas funcionalidades</p><p>implementadas em dois sistemas (A e B), de domínios semelhantes,</p><p>desenvolvidos por times semelhantes, usando as mesmas tecnologias. Em qual</p><p>dos dois sistemas você acha que refactorings foram realizados de forma</p><p>sistemática? Justifique a sua resposta.</p><p>R: Dado o gráfico, temos que o time que utilizou refactoring foi o time A, já que em</p><p>comparação ao B, ele teve um início mais demorado para o desenvolvimento de</p><p>novas funcionalidades, mas um desenvolvimento consistente ao decorrer do tempo.</p><p>Já o time B, sem refatoração, teve bons resultados no início, mas ao decorrer do</p><p>tempo, sem refatoração,</p><p>fica difícil de fazer a manutenção do código, adicionar</p><p>novas funcionalidades sem que gere erros.</p><p>15.Nos exemplos a seguir, extraia o código comentado com a palavra extrair para</p><p>um método g.</p><p>class A {</p><p>void f() {</p><p>int x = 10</p><p>x++;</p><p>print x; // extrair</p><p>}</p><p>}</p><p>Resposta:</p><p>public class A {</p><p>void f() {</p><p>int x = 10;</p><p>x++;</p><p>g(x); // extrair</p><p>}</p><p>void g(int x) {</p><p>System.out.println(x);</p><p>}</p><p>}</p><p>16.3. Descreva duas vantagens de um Sistema de Controle de Versões Distribuído</p><p>(DVCS), como o git.</p><p>R: Trabalhar offline e quando tiver acesso à rede de internet, basta enviar suas</p><p>atualizações ao repositório remoto. Várias pessoas podem trabalhar em um mesmo</p><p>projeto ao mesmo tempo e em versões diferentes desse mesmo projeto através das</p><p>branchs.</p><p>17.Descreva um problema (ou dificuldade) que surge quando usamos feature flags</p><p>para delimitar código que ainda não está pronto para entrar em produção.</p><p>Acúmulo de código condicional: À medida que você adiciona mais feature flags</p><p>ao código, pode haver um aumento significativo na quantidade de lógica</p><p>condicional no código-fonte. Isso pode tornar o código mais difícil de entender,</p><p>dar manutenção e depurar.</p><p>18.Defina (e diferencie) os seguintes termos: integração contínua (continuous</p><p>integration); entrega contínua (continuous delivery) e deployment contínuo</p><p>(continuous deployment).</p><p>R: Integração contínua: A branch remota tá sempre atualizada;</p><p>Continuous delivery: Entrega constantes de pacotes de atualizações;</p><p>Continuous Deployment: O cliente sempre com a versão mais atualizada.</p>

Mais conteúdos dessa disciplina