Tip:
Highlight text to annotate it
X
Olá estamos aqui iniciando a apresentação desse projeto relacionado as Técnicas modernas
de projeto de software. Trabalho desse desenvolvido por alunos da Universidade Salvador da especialização
de engenharia de software. O foco do nosso projeto é apresentar três
técnicas modernas, algumas não muito recentes, mas outras de um certo modo, atualmente sendo
usadas em projeto de software. E em cima desse trabalho nossa intenção é demonstrar os
fundamentos de cada técnica, a importância da aplicação delas e em cima das apresentações
mostrar exemplos que possam de um certo modo demonstrar a importância do por que um arquiteto
deva utilizar tais técnicas em seus projetos.
De modo a enaltecer a questão do uso dessas três técnicas posso vincular a questão
de pontos chaves em comum. Os pontos chaves que essas três técnicas podem vir a abranger
é a melhoria da qualidade do software, a facilitação da manutenção, a coesão e
redução de acoplamento esses seriam considerados os pontos chaves a serem atribuídos a essas
três técnicas. Vista que elas podem tanto aplicadas separadamente como a aplicação
unida dessas técnicas poderia vir a dar a seu projeto um aumento da qualidade.
Vamos iniciar agora a apresentação seguindo o primeiro tópico refatoramento.
Refatoramento, seguindo seu conceito, vamos abranger o termo bad smell, ou como é traduzido
-- mau cheiro.
Mau cheiro trata de um termo que é utilizado para descrever trechos de código que podem
ser alterados dentro de um sistema sem alterar o comportamento do sistema.
Em outras palavras é todo aquele trecho em que você puder visualizar a possibilidade
de melhoria sem implicar na alteração do comportamento externo desse sistema é uma
questão de refatoração. Isso porque muitas vezes quando tratamos com sistemas legados
nós encaramos esse tipo de cenário em que nós estamos de frente a sistemas que funcionam
mas que possuem uma qualidade duvidosa e ao fazer uma inspeção nesse sistema muitas
vezes encontramos casos em que bad smells estão presentes. Porque, uma vez aplicado
a questão de refatoramento nós buscamos, como objetivo, a melhoria da estrutura interna
do sistema em algum tipo de fator de qualidade, seja ele redução de acoplamento e o incremento
da manutenção desse sistema. Isso porque todo sistema ele está refém ou a mercê
de mudanças e a questão do refatoramento ele visa tornar esse sistema o menos acoplado
possível quando você o aplica porque com o aumento da qualidade dele você tem uma
redução de custo, você tem uma melhoria do código que está escrito, porque outros
desenvolvedores terão melhor facilidade com código de boa qualidade pra poder fazer tarefas
de implementação e desvincular o apego do desenvolvedor com o sistema, isso porque você
estará desenvolvendo um sistema que qualquer pessoa terá facilidade de compreender o que
está escrito e então poder fazer a evolução desse sistema. O que não é o caso quando
você tem sistemas de péssima qualidade.
Nesse exemplo nós temos aqui um pequeno código apenas mostrando na parte esquerda o código
antes e na direita o depois.
Nós temos aqui o caso de um exemplo de um código bem acoplado, é um código que está
fazendo duas funções quando você poderia delegar cada função em separado, de modo
que nós nunca saberemos no futuro quando um tipo de método ou função ou algum tipo
de dado pode vir a ser desvinculado e a intenção é você deixar o sistema o menos acoplado
possível para que ele possa vir a sofrer alterações sem prejudicar o comportamento
final. Esse é apenas um dos exemplos de refatoração,
refatoração pode esta ligado não apenas a essa questão de acoplamento mas pode ser
também a questão de legibilidade do código, se você encontrar trechos de código que
estejam difíceis de fazer a leitura, você pode também pode aplicar como outros exemplos
também.
Agora vamos tratar da questão de Linguagem especifica de domínio outra técnica que
vamos apresentar nesse trabalho. Seguindo o conceito nós temos o autor fowler, que
seguindo sua definição ele define a LED como uma linguagem de programação com expressividade
limitada focada em determinado domínio. A LED ela abrange vários domínios do tipo:
arquiteturas de software, banco de dados, sistemas operacionais, computação nas nuvens
e entre outros.
A questão é a LED tem por natureza ser uma linguagem simples de ser entendida, porque
muitas como ela é aplicada para um determinado domínio ela por natureza é uma linguagem
simples de entender, o que nos possibilita um desenvolvimento rápido e uma manutenção
eficaz. Porque o conhecimento aplicado ali, aplicado a um determinado domínio, a questão
do conhecimento exercido ali é de fácil absorção, ai temos a questão de abstração
aplicada e em vista disso mediante tudo que já foi dito, o objetivo do uso da LED é
simplificar o código complexo, promover uma comunicação eficaz com os clientes, muitas
vezes o cliente não tem o conhecimento sobre o domínio, mas quando você aplica essa simplificação
você tá reduzindo o índice de complexidade, permitindo que o desenvolvedor e todas as
partes envolvidas no projeto possam ter o entendimento do que está sendo desenvolvido
e assim agregando qualidade ao projeto. Tendo logicamente a melhoria da produtividade e
também a remoção de gargalos no desenvolvimento. Isso porque essa questão de tratar a LED
muitas vezes não esta agregado unicamente a código, como temos também o uso de recursos
visuais, como diagrama de casos de uso, seria um exemplo de aplicação de LED.
Aqui seguindo o estudo, nós temos esses exemplos que dentre eles existem vários outros, sendo
esses um pequeno conjunto de exemplos apenas para ilustrar como a LED é bem atual e mostrar
como ela já vem sendo trabalhada a um bom tempo.
Como exemplo linguagem de banco de dados, o SQL. Linguagem web, o Html que é a mais
utilizada. Javadoc e a linguagem de formulas do excel. Visto que você tem uma linguagem
simples de ser entendida você tem todo esse ganho ao se utilizar esse tipo de técnica
no seu projeto.
Vamos passar agora para o próximo assunto.
Reflexão
O conceito de reflexão é uma técnica usada para se obter informações do tipo: nome
de classes, lista de atributos, etc. Podendo alterar o comportamento, estrutura ou dados
de um programa. Enaltecendo que, esses tipos de informações que são obtidas muitas vezes
são desconhecidas ao programador, isto porque durante ao longo do desenvolver do projeto,
muitas vezes o sistema ou projeto está a mercê das mudanças você em algumas situações
pode vir a desconhecer o nome de classes e atributos para poder fazer as modificações
de modo mais eficiente. Isto porque a reflexão veio com uma proposta de agilizar esse processo
de manutenção e de tornar o projeto bem mais flexível, isto porque como ela trabalha
com meta programação, nós temos ai abordado, ela obtêm as informações dos meta dados
a partir da leitura de um objeto, do qual ela vai poder extrair as informações, exatamente
as informações que serão essenciais durante esse processo de modificação, ela consegue
examinar a estrutura de dados de um programa através da introspecção de meta objetos,
sendo que a introspecção é uma técnica utilizada dentro da reflexão que possibilita
a leitura dessa estrutura e a partir dessa leitura então existe a possibilidade de fazer
a alteração em tempo de compilação. Para que, em vista de que, quando surgir essas
mudanças você terá um sistema que ele vai estar apto a fazer essas alterações, ele
vai poder alterar os dados, a estrutura e comportamento, mas que o trabalho será mais
eficiente do que se você fosse fazê-lo sem a utilização dessa técnica.
Ai vamos seguir um exemplo, ele foi desenvolvido dentro da IDE Visual Studio. A questão utilização
da reflexão de acordo com alguns autores, mencionam o uso de determinadas IDE's no uso
da aplicação de reflexão. Para a pessoa que estiver vendo este video eu menciono como
forma de facilitar indicar esta IDE para facilitar a aplicação de seus estudos.
Continuando a apresentação, nós temos essa parte do código, a intenção desse código
é simples, pegar um atributo personalizado que é definido, onde ele é aplicado a várias
entidades e recuperado via reflexão. Apenas enaltecendo um exemplo, digamos você está
elaborando um código, mas depois de um determinado tempo, você desconhece os atributos que foram
ali passados e ai mostrando uma forma de você vir a recuperar esses dados. Aqui essa aplicação
toda desenvolvida no Visual Studio, você pode facilmente encontrar conteúdo aplicado
a Java, mas essa foi uma forma de demonstrar que reflexão não esta vinculada a linguagem,
desde que a linguagem que você for utilizar dê suporte.
Voltando ao código, nesse primeiro trecho estamos passando os atributos: nome e a versão.
Sendo que nome pode ser modificado e a versão foi definida como padrão.
Agora vamos passar para o próximo trecho, nesse trecho nós temos as classes que vão
ser atribuídas esses valores, o primeiro com apenas um atributo, a segundo sem atributos
e a terceira com dois atributos. Desses atributos que iremos aplicar a reflexão. Obter essa
informação sem tem quer entrar dentro do código.
Aqui o código que vamos fazer a captura de informação, primeiro testando e verificando
a questão de tipo, seguindo, depois de fazer a verificação do tipo, tem a questão do
output que nós vamos pegar a informação do autor, isso é, em cima desse código vamos
pegar uma lista de array e então capturar esses dados.
Podemos ver comentado a linha onde é aplicada a questão da reflexão, ele vai capturar
esses atributos. Muitas vezes eu já esse código aplicado aplicado em Java e em C#,
mas achei mais interessante mostrá-lo em C# para reafirmar que reflexão independe
de linguagem. Em questão de leitura nós temos o Java Action Reflection onde ele é
todo em Java e que nada impossibilita que você esteja aplicando seus conhecimentos
em outras linguagens. Por fim, onde temos o comentário mostrando o resultado da reflexão,
é onde vamos fazer a captura dos atributos e imprimir na tela.
Por fim nesse código, o resultado desse código está mostrado aqui, onde nós vamos ver os
dados do primeiro autor, na segunda opção não tinha atributos a serem mostrados e os
dois últimos autores recuperados. Onde podemos perceber que além de ser capazes de retornar
a informação nós também podemos alterar as informações que foram recuperadas.
As possibilidades de alteração são infinitas, graças a essa técnica que nos possibilita uma manutenção mais dinâmica.
Por Fim, este é o Fim.