Karteikarten
ASOF
Karten in diesem Stapel (92)
- 1O que é Arquitetura de Software?Estrutura e organização dos componentes de um software, o modo pelo qual esses componentes interagem e as estruturas de dados que são usadas pelos componentes.
- 2Porque a Arquitetura de Software é importante?- Facilita o entendimento e a comunicação dos envolvidos.
- Favorece o reuso de componentes
- Simplifica o gerenciamento (desenvolvimento, testes...) - 3O que um Arquiteto de Software faz?Toma decisões de alto nível: como o sistema de integra com outros, escolhe as tecnologias a serem usadas, como tratar e recuperar falhas, etc.
- 4Uma arquitetura pode sr evolutiva e sofrer modificações?Sim, desde que seu design e sua implementação permitam.
- 5Cite um desafio da arquitetura de software.Distinguir as fronteiras e as relações entre design, arquitetura e implementação.
- 6Quais as Representações de Arquitetura?- Estrutura Lógica: descreve o funcionamento conceitual do software, em termos de classes, funções, interfaces, variávies...
- Estrutura Física: descreve a organização concreta dos artefatos que compõem o software, como arquivos fontes, arquivos de dados, executaveis... - 7Quais são as 4+1 visões?- Visão Lógica
- Visão de Implementação
- Visão de Processos
- Visão de Implantação - 8Quais são os responsáveis, o que é verificado e os diagramas gerados na visão lógica?- Responsável: Stakeholders
- Verificado: Funcionalidade
- Diagramas: Classes, Sequência e Colaboração - 9Quais são os responsáveis, o que é verificado e os diagramas gerados na visão de implementação?- Responsável: Programadores
- Verificado: Gerenciamento de Configuração
- Diagramas: Pacotes e Componentes - 10Quais são os responsáveis, o que é verificado e os diagramas gerados na visão de processos?- Responsável: Integradores
- Verificado: Desempenho e Escalabilidade
- Diagramas: Atividade, Objetos Sequência e Colaboração - 11Quais são os responsáveis, o que é verificado e os diagramas gerados na visão de implantação?- Responsável: Engenheiros de Sistema
- Verificado: Topologia do Sistema e Comunicação
- Diagramas: Implantação - 12Quais as tarefas do Design da Arquitetura?- Decomposição do Sistema: subsistemas/componentes
- Identificação das Interações: tipo, conteúdo e visões
- Modelagem da Arquitetura: linguagens de descrição e visões - 13Quais são os princípios de design da Arquitetura O.O.?1 - Abstração: focar apenas nos detalhes essenciais de um objeto.
2 - Modularização: dividir o sistema em módulos independentes e coesos.
3 - Encapsulamento: esconder detalhes internos de um modulo.
4 - Reutilização: aproveitar componentes existentes em diferentes contextos.
5 - Generalização: capturar comportamentos em comum em entidades mais genéricas, permitindo herança ou composição. - 14Quais são as propriedades de "bons designs" de software?- Integridade Conceitual
- Ocultamento de Informação
- Coesão
- Acoplamento - 15O que é integridade conceitual? e onde pode ser aplicada?Integridade Conceitual é ter coerência e padronização no sistema.
Pode ser aplicada em funcionalidades, decisões de design (convenções de nomes, TADs, Frameworks...) e interfaces com o usuário. - 16O que é ocultamento de informação?É o principio de esconder detalhes internos do sistema, expondo apenas o necessário para o cliente.
- 17O que é coesão?É o princípio que diz que uma classe deve ter uma única função, isto é, oferecer um único serviço.
Também vale para outras unidades: funções, métodos, pacotes, etc. - 18Explique Acoplamento Aceitável (Bom)- Acoplamento Aceitável é quando uma classe A usa classe B e:
1 - B oferece um serviço útil para A.
2 - B possui uma interface estável.
3 - A somente chama métodos da interface de B. - 19Explique Acoplamento Ruim- Acoplamento Ruim é quando uma classe A usa classe B e:
- A interface de B é instável.
- Ou o uso não ocorre via interface de B. - 20Quais são os princípios SOLID?S - Single Responsability
O - Open-Closed Principle
L - Liskov Substitution
I - Iterface Segregation
D - Dependency Inversion - 21O que é o princípio de responsabilidade única? e por que ele é importante?- Uma classe deve ter apenas um motivo para mudar, ou seja, deve ter uma única responsabilidade.
Esse princípio é importante para reduzir o risco de efeitos colaterais ao realizar mudanças, deixa o código mais compreensível e reutilizável. - 22O que é o princípio Open/Closed? E por que ele é importante?- Entidades (classes, módulos, funções) devem estar abertas para extensão, mas fechadas para modificações.
Esse princípio é importante pois permite adicionar funcionalidades sem alterar código existente, evitando quebrar funcionalidades já testadas. - 23O que é o princípio da Substituição de Liskov? E por que ele é importante?- Objetos de uma classe pai devem poder ser substituídos por uma classe filha sem alterar o comportamento do programa.
Esse princípio é importante para garantir que a herança seja usada corretamente, evitando quebrar o programa. - 24O que é o princípio da Segregação de Interface? E por que ele é importante?- Interfaces devem ser pequenas, coesas e específicas para cada tipo de cliente. Clientes não devem ser obrigados a implementar métodos que não usam.
Esse princípio é importante porque reduz acoplamento e complexidade, cada classe implementa apenas o que precisa. - 25O que é o princípio de Inversão de Dependência? E por que ele é importante?- Em vez de depender de uma classe dependa de uma interface.
Esse princípio é importante porque facilita a troca de implementações, testes e desacoplamento. - 26Porque a herança é considerada uma reutilização caixa branca?Porque quando usamos herança, a classe filha tem acesso direto à implementação interna da classe pai (atributos protected, métodos herdados, etc.).
- 27Porque a composição é considerada uma reutilização caixa preta?Porque quando usamos composição, uma classe contém outra como dependência, mas só interage com ela pelos métodos públicos (interface).
- 28Como a composição funciona?Uma classe A reutiliza o comportamento da classe B.
– Usando uma variável de instância de B
– Delegando comportamento para ela - 29Quais as vantagens da composição (delegação)?A composição respeita o encapsulamento, reduz dependências de implementações e aumenta a coesão de classes.
Também torna fácil compor comportamentos em tempo de execução. - 30Quais as desvantagens da composição (delegação)?- Código mais difícil de compreender
- Ineficiências em tempo de execução. - 31Quais são as vantagens de programar para uma interface?- O encapsulamento é mantido
- Objetos clientes somente conhecem as classes abstratas que definem a interface. - 32O que são padrões de projeto?Um padrão é uma ideia que foi útil em um contexto prático e provavelmente vai ser útil em outros.
Ou seja, um padrão fornece uma solução para um problema dentro de um contexto. - 33O que são os padrões de análise?Os padrões de análise lidam com a modelagem conceitual. Eles capturam estruturas e comportamentos comuns em domínios de negócio.
- 34Para que servem os padrões de análise?Servem para agilizar a fase de análise, fornecendo modelos pré-definidos para determinados contextos, que já foram testados e adotados em outros projetos.
- 35Cite alguns padrões de análise- Party: representação do comportamento em comum a pessoas e organizações, usando herança entre classes.
- Hierarquia Organizacional: tem a finalidade de representar estruturas hierárquicas simples.
- Contrato: usado para descrever vários tipos de negócios.
- Quantidade: define um tipo de objeto que tem como parte números e unidades. - 36Para que servem padrões de análise GRASP?Padrões GASP indicam como atribuir responsabilidades às classes de um sistema.
- 37Cite alguns exemplos de padrões GASP.- Information Expert: classe que contém informação necessária para satisfazer a responsabilidade.
- Creator: um objeto deve ser criado por outro que o possua como parte (agregação) ou esteja fortemente associado a ele.
- High Coesion: a classe deve implementar apenas sua responsabilidade.
- Low Coupling: evitar muitas associações e dependências em outras classes.
- Controller: classe responsável pelo tratamento de um evento no sistema. - 38O que são Padrões de Design e para que servem?- Descrevem soluções para problemas recorrentes no desenvolvimento de sistemas de software.
- Eles servem para facilitar a reutilização de soluções para problemas de design, sem considerar reutilização de código. - 39Quais são os tipos de Padrões de Design? (Finalidade)- Criacionais: relacionados à criação de objetos.
- Estruturais: tratam das associações (composições) entre classes e objetos
- Comportamentais: tratam das interações e divisões de responsabilidade entre as classes ou objetos. - 40Quais são os tipos de Padrões de Design? (Escopo)- Para classes: relacionamento entre classes e subclasses, definidos através de herança e em tempo de compilação (estático).
- Para objetos (maioria): relacionamento entre objetos que podem ser mudados em tempo de execução (dinâmicos). - 41Cite todos os Padrões de Design Criacionais.- Abstract Factor
- Propotype
- Singleton
- Factory Method
- Builder - 42Cite todos os Padrões de Design Estruturais.- Bridge
- Facade
- Decorator
- Adapter
- Composite
- Proxy
- Flyweight - 43Cite todos os Padrões de Design com escopo de classe.- Factory Method
- Adapter (presente nos dois). - 44Explique o Padrão Factory MethordO padrão Facroty Method sugere que você substitua chamadas diretas de construção de objetos por chamadas de um método fábrica especial. Define uma interface para criar objetos em uma superclasse, mas permitindo que as subclasses alterem o tipo de objetos que serão criados.
- 45Quando o Padrão Factory Method deve ser usado?- Quando não souber de antemão os tipos e dependências exatas dos objetos com os quais seu código deve funcionar.
- Quando desejar fornecer aos usuários de sua biblioteca ou framework uma maneira de estender seus comportamentos internos.
- Quando quiser economizar recursos do sistema reutilizando objetos em vez de recriá-los sempre. - 46Quais são os prós do Factory Method?- Evita o acoplamento firme entre o criador e os produtos concretos.
- É possível mover o código de criação do produto para um único local do programa, facilitando a manutenção do código.
- Poder introduzir novos tipos de produtos no programa sem quebrar o código cliente existente. - 47Qual é o ponto negativo do Factory Method?- O código pode se tornar mais complicado, pois é necessário criar muitas subclasses novas para implementar o padrão.
- 48Explique o Padrão Abstract Factory- Primeiro declaramos explicitamente interfaces ou classes abstratas para cada produto distinto da família de produtos. Então todas as variantes desse produto implementam essa interface/classe.
Depois declaramos uma fábrica abstrata, uma interface com uma lista de métodos de criação para todos os produtos que fazem parte da família de produtos. E então para cada variante dessa família criamos uma nova fábrica separada. - 49Quando o Padrão Abstract Factory deve ser usado?- Quando seu código precisa trabalhar com diversas famílias de produtos relacionados, mas que você não quer depender de classes concretas desses produtos ou você quer permitir permitir uma futura escalabilidade.
- Quando você tem uma classe com um conjunto de métodos fábrica que desfoquem sua responsabilidade principal. - 50Quais são os prós do Abstract Factory.- Você pode ter certeza que os produtos que você obtêm de uma fábrica são compatíveis entre si.
- Evita um vinculo forte entre os produtos concretos e o código cliente.
- Você pode extrair o código de criação de produtos para um lugar separado, facilitando a manutenção do código.
- Você pode adicionar novas variantes de produtos existentes sem quebrar o código cliente existente. - 51Qual o ponto negativo do Padrão Abstract Factory.- O código pode se tornar mais complexo do que o necessário, uma vez que muitas novas interfaces e classes são adicionados junto com o padrão.
- 52Explique o Padrão Builder.- O Builder permite construir objetos complexos passo a passo. Permite produzir diferentes tipos e representações de um objeto com o mesmo código de construção.
- Sugere que você extraia o código de construção de um objeto para fora de sua própria classe e mova ele para uma um objetos separados chamado "builders". - 53Quando o Padrão Builder deve ser usado?- Para se livrar de um construtor telescópico.
- Quando você quer que seu código seja capaz de criar diferentes representações do mesmo produto.
- Quando você quer construir árvores composite ou outros objetos complexos. - 54Quais são os prós do Builder?- Constroi objetos passo a passo, adiar etapas da construção e construir partes recursivamente.
- Reutiliza o mesmo código de construção quando construindo várias representações de produtos.
- Isola um código de construção complexo da lógica de negócio do produto. - 55Qual é o ponto negativo do Builder?- A complexidade geral do código aumenta uma vez que o padrão exige criar múltiplas classes novas.
- 56Explique o Padrão Prototype.- O padrão prototype permite copiar objetos existentes sem fazer seu código ficar dependente de suas classes.
- Ele delega o processo para o próprio objeto que está sendo clonado. O padrão declara uma interface comum para todos os objetos que suportam clonagem. - 57Quando o Padrão Prototype deve ser usado?- Quando seu código não deve depender de classes concretas de objetos que você precisa copiar.
- Quando você precisa reduzir o número de subclasses que somente diferem na forma que inicializam seus respectivos objetos. - 58Quais são os prós do Prototype?- Clonar objetos sem acoplá-los a suas classes concretas.
- Você pode se livrar de códigos de inicialização repetidos em troca de clonar protótipos pré-construídos.
- Produzir objetos complexos mais convenientemente.
- Você tem uma alternativa para herança quando lidar com configurações pré-determinadas para objetos complexos. - 59Qual é o ponto negativo do Prototype?- Clonar objetos complexos que têm referências circulares pode ser bem complicado.
- 60Explique o Padrão Singleton.- O Singleton é um padrão que permite garantir que uma classe tenha apenas uma instância, enquanto você provê um ponto de acesso global para uma instância.
- O Construtor da classe é privado e um método construtor é criado para que apenas uma instância seja criada e depois só retornada caso necessária. - 61Por que o Singleton é considerado um anti-pattern?- Pois ele fere o princípio de responsabilidade única. Ele é responsável por gerenciar sua própria instância e também por implementar a sua lógica principal.
- 62Quando o Singleton deve ser usado?- Quando uma classe em seu programa deve ter apenas uma instância disponível para todos os clientes; por exemplo, um objeto de base de dados.
- Quando é necessário ter um controle mais estrito das variáveis globais. - 63Quais são os Prós do Singleton?- Ter certeza que uma classe terá apenas uma instância.
- Ganhar um ponto de acesso global para aquela instância.
- O objeto Singleton é iniciado apenas na primeira vez que for pedido. - 64Quais são os contras do Singleton?- Viola o princípio de responsabilidade única (S do Solid).
- Pode mascarar um design ruim, por exemplo, quando os componentes de um programa sabem muito sobre cada um.
- O padrão requer tratamento especial em ambiente multithread.
- Pode ser difícil realizar testes unitários do código cliente do SIngleton, framworks de testes usam herança então não podem usar o construtor privado e nem podem sobrescrever o método estático construtor. - 65Explique o Padrão Adapter.- O Adapter é um padrão que permite objetos com interfaces incompatíveis colaborem entre si.
- Um Adaptador encobre um dos objetos para esconder a complexidade da conversão. O objeto encoberto nem fica ciente do adaptador. - 66Quando o Adapter deve ser usado?- Quando for necessário usar uma classe existente, mas sua interface não for compatível com o resto do seu código.
- Quando você quer reutilizar diversas subclasses existentes que não possuam alguma funcionalidade comum que não possa ser adicionada a superclasse. - 67Quais são os prós do Adapter?- Responsabilidade única: você pode separar a conversão de interface ou de dados da lógica primária do negócio do programa.
- Open/Closed: você pode introduzir novos tipos de adaptadores no programa sem quebrar o código cliente existente. - 68Qual o ponto negativo do Adapter?- A complexidade geral do código aumenta, porque você precisa introduzir um conjunto de novas interfaces e classes.
- 69Explique o Padrão Bridge.-O Bridge é um padrão que permite que você divida uma classe grande ou um conjunto de classes intimamente ligadas em duas hierarquias separadas -- abstração e implementação -- que podem ser desenvolvidas de forma independente.
- 70Quando o Bridge deve ser usado?- Quando você quer dividir e organizar uma classe monolítica que tem diversas variantes da mesma funcionalidade.
- Quando você precisa dividir uma classe em diversas dimensões independentes.
- Quando você precisa ser capaz de trocar implementações durante o momento de execução. - 71Quais são os prós do Bridge?- Você pode criar classes e aplicações independentes de plataforma.
- O código cliente trabalha com abstrações em alto nível. Ele não fica exposto a detalhes de plataforma.
- Você pode introduzir novas abstrações e implementações independentemente umas das outras.
- Você pode focar na lógica de alto nível na abstração e em detalhes de plataforma na implementação. - 72Qual é ponto negativo do Bridge?- O código pode ficar mais complicado ao aplicar o padrão em uma classe altamente coesa.
- 73Explique o Padrão Composite- O Composite é um padrão que permite que você componha objetos em estruturas de árvores e então trabalhe com essas estruturas como se elas fossem objetos individuais.
- 74Quando se deve usar o Composite?- Quando você tem que implementar uma estrutura de objetos tipo árvore.
- Quando você quer que o código cliente trate tanto os objetos simples como os compostos de forma uniforme. - 75Quais são os prós do Composite?- Você pode trabalhar com estruturas de árvore complexas mais convenientemente.
- Você pode introduzir novos tipos de elementos na aplicação em quebrar o código existente. - 76Qual é o ponto negativo do Composite?- Pode ser difícil providenciar uma interface comum para classes cuja funcionalidade difere muito.
- 77Explique o Padrão Decorator.- O padrão Decorator é um padrão que permite que você acople novos comportamentos para objetos ao coloca-los dentro de invólucros de objetos que contém os comportamentos.
- 78Quando o padrão Decorator deve ser usado?- Quando você precisa ser capaz de projetar novos comportamentos
- 79Quais são os prós do Decorator?- Estender o comportamento de um objeto sem fazer uma nova subclasse.
- Adicionar ou remover responsabilidades deum objeto em tempo de execução.
- Combinar diversos comportamentos ao envolver o objeto com multiplos decoradores.
- Dividir uma classe monolitica que implementa muitas variantes de um comportamento em diversas classes menores. - 80Quais são os contras do Decorator?- É difícil remover um invólucro de uma pilha de invóluvros.
- É difícil implementar um decorador que não dependa da ordem da pilha de decoradores.
- A configuração inicial do código de camadas pode ficar bastante feia. - 81Explique o Padrão Facade- O Padrão Facade fornece uma interface simplificada uma biblioteca, framework ou qualquer conjunto complexo de classes.
- 82Quando o Facade deve ser usado?- Quando você precisa ter uma interface limitada mas simples para subsistema complexo.
- Quando você quer estruturar um subsistema em camadas. - 83Qual é o ponto positivo do Facade?- Você pode isolar seu código da complexidade de um subsistema.
- 84Qual é o ponto negativo do Facade?- Uma fachada pode se torna um objeto Deus acoplado a todas as classes do sistema.
- 85Explique o Padrão Flyweight.- O Flyweight é um padrão que permite a você colocar mais objetos na quantidade de RAM disponível ao compartilhar partes comuns de estado entre os multiplos bjetos ao invés de manter todos os dados em cada objeto.
- 86Quando o Flyweight deve ser usado?- Apenas quando seu programa deve suportar um grande número de objetos que mal cabem na memória RAM disponível.
- 87Qual é o ponto positivo do Flyweight?- Você pode economizar muita RAM, desde que seu programa tenha muitos objetos similares.
- 88Quais são os contras do Flyweight?- Você pode acabar trocando RAM por ciclos de CPU quando parte dos dados de contexto precisam ser recalculados cada vez que algué chamar um método Flyweight.
- O código fica muito mais complexo. - 89Explique o Padrão Proxy- O proxy permite que você forneça um substituto ou um espaço reservado para outro objeto. Um Proxy controla o acesso ao objeto original, permitindo que vocçe faça algo antes ou depois do pedido chegar no objeto original.
- 90Quando o Proxy deve ser usado?- Quando você quer fazer uma inicialização preguiçosa de um objeto peso-pesado.
- Quando você quer restringir quem pode acessar o objeto de serviço.
- Quando você quer executar se forma "local" um objeto remoto, o Proxy toma conta da comunicação.
- Quando você quer manter um registro de pedidos.
- Quando você quer armazenar em cache os pedidos mais recorrentes.
- Quando você precisa ser capaz de se livrar de um objeto peso-pesado quando não há mais clientes o utilizando. - 91Quais são os prós do Proxy?- Controlar o objeto de serviço sem que os clientes saibam.
- Gerenciar o ciclo de vida do objeto de serviço, quando ele vai ser criado e destruído.
- O proxy trabalha até mesmo se o objeto aubda não está pronto ou disponível.
- Você pode introduzir novos proxies sem mudar o serviço ou clientes. - 92Quais são os contras do Proxy?- O código pode ficar mais complicado, uma vez que é precisa introduzir uma série de novas classes.
- A resposta de um serviço pode sofrer atrasos.
Informationen
- Beschreibung
- Computação Karteikarten am ASOF, erstellt von Gabriel Zoéga am 11/09/2025.
- Erstellt von
- Gabriel Zoéga
- Aufrufe
- 8
- Bewertung