Buscar

Abstração em Engenharia de Software

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Em engenharia de software e ciência da computação, abstração é: o processo de remoção de detalhes ou atributos físicos, espaciais ou temporais no estudo de objetos ou sistemas para focar a atenção em detalhes de maior importância; 
E de natureza semelhante ao processo de generalização; a criação de conceitos abstratos - objetos por meio do espelhamento de características ou atributos comuns de vários objetos ou sistemas de estudo não abstratos - o resultado do processo de abstração. 
Abstração, em geral, é um conceito fundamental em ciência da computação e desenvolvimento de software
O processo de abstração também pode ser referido como modelagem e está intimamente relacionado aos conceitos de teoria e design. Os modelos também podem ser considerados tipos de abstrações por sua generalização de aspectos da realidade. A abstração na ciência da computação está intimamente relacionada à abstração na matemática devido ao seu foco comum na construção de abstrações como objetos, mas também está relacionada a outras noções de abstração usadas em outros campos, como a arte. Abstrações também podem se referir a objetos e sistemas do mundo real, regras de sistemas computacionais ou regras de linguagens de programação que carregam ou utilizam recursos de abstração em si, como:
O uso de tipos de dados para realizar abstração de dados para separar o uso de representações de trabalho de estruturas de dados dentro de programas; 
O conceito de procedimentos, funções ou sub-rotinas que representam um fluxo de controle de implementação específico em programas;
 As regras comumente chamadas de "abstração" que generalizam expressões usando variáveis ​​livres e associadas nas várias versões do cálculo lambda;
 O uso de expressões S como abstração de estruturas de dados e programas na linguagem de programação Lisp; 
O processo de reorganizar o comportamento comum de classes não abstratas em "classes abstratas" usando herança para abstrair subclasses como visto nas linguagens de programação C ++ e Java orientadas a objetos. 
Utilidade
Abstração é especialmente útil para resolver problemas complexos ela permite ao indivíduo pensar em termos conceituais da ideia ao invés de considerar os detalhes do elemento analisado. Você é capaz de trabalhar com um conceito mais enxuto,  simplificado. Mais fácil de lembrar e manipular.
Abstração em software
“O processo de abstração pode ser visto como uma aplicação de mapeamento muitos para um. Ela nos permite esquecer informações e, consequentemente, tratar coisas que são diferentes, como se fossem a mesma coisa. Fazemos isso na esperança de simplificar nossa análise separando atributos que são relevantes daqueles que não são. É crucial lembrar-se que relevância frequentemente depende de contexto.”
Liskov e Guttag apresentam diferentes tipos de abstrações relevantes ao desenvolvimento de programas. Algumas delas são:
Procedural abstraction nos permite introduzir novas operações.
Data abstraction nos permite introduzir novos tipos de objetos.
Iteration abstraction nos permite iterar sobre itens em coleções sem revelar os detalhes de como os itens são obtidos
Type hierachy nos permite abstrair a partir de data types específicos para famílias de Type relacionados (basicamente herança e generalização).
Classes
Java é uma linguagem baseada em classes e estas são uma aplicação do conceito de abstração (Mais especificamente de Abstract Data Types). Classes são as representações do “mundo real” em nossa aplicação. Quando abstraímos conceitos do “mundo real” para modelá-los em Java, podemos depositar a abstração em forma de uma classe que servirá de molde para objetos. Importante salientar que:
Classes não precisam ser apenas elementos “concretos do mundo real”, podem ser conceitos relacionados à programação mesmo ou processos de negócio. Por exemplo, classes DAO, Exceptions, etc.
Método
·Os Método (o comportamento de um objeto) são outro exemplo
Quando críamos um algoritmo para realizar uma determinada tarefa o encapsulamos dentro de uma unidade – na linguagem Java chamamos está unidade de método. Desta forma podemos utilizá-lo frequentemente sem ter que reescrever a lógica novamente.
Um método torna-se o comportamento de um objeto. Ele encapsula uma determinada lógica.
 Quando um objeto é instanciado ele deveria ser uma unidade que possui seu estado (variáveis) encapsulado, podendo ser alterado através de seus comportamentos (métodos).
Um método abstrai a complexidade de termos de entender um algorítmo. Desta forma, para nos referirmos à determinada lógica precisamos apenas lembrar o nome do método. Por exemplo:
public int menorValor(int[] algunsNumerosAleatorios){
//sua lógica vai aqui.
}
O método acima basicamente percorre um array de inteiros que devolve o menor valor nele.
Princípio da Abstração
 É o processo de identificar os aspectos importantes do produto/processo, ignorando-se os detalhes (Princípio de Pareto). 
• Modelos são abstração da realidade.
 • O sistema de informação é uma abstração do processo real. 
• Linguagens de programação abstraem ao programador, detalhes da máquina e da solução (algoritmo em baixo nível) 
• O encapsulamento é uma técnica de abstração para diminuir a complexidade e melhorar a reusabilidade dos objetos.
A generalização é também uma forma de abstração, buscando-se as características comuns e esquecendo-se as características específicas dos itens a serem generalizados. Uma solução mais genérica tem maior potencialidade de ser reutilizada (reusabilidade e generalização dos componentes). A generalização é o processo inverso da decomposição (generalização e especialização em OO). Custo do desenvolvimento voltado à generalização versus benefício da reutilização.
Além da complexidade da lógica que foi abstraída,  pode ocorrer também uma generalização da resolução do problema. Considere o seguinte método.
public void chutarBolaDeFutebol(BolaDeFutebol bola){
//sua lógica vai aqui.
}
public void chutarBolaDeFutebolAmericano(BolaDeFutebolAmericano bola){
//sua lógica vai aqui.
}
Caso uma aplicação que utiliza-se estes dois métodos quisesse generalizar a ação de chutar uma bola, poderíamos criar uma generalização das classes BolaDeFutebol e BolaDeFutebolAmericano chamada, por exemplo,  Bola. A nova classe bola poderia ser utilizada por um método mais genérico, por exemplo.
public void chutarBola(Bola bola){
//sua lógica vai aqui.
}

Continue navegando