Áreas de Interesse
Engenharia de software é uma área do conhecimento da informática voltada
para a especificação, desenvolvimento e manutenção de sistemas de software
aplicando tecnologias e práticas de ciência da
computação, gerência de projetos e outras disciplinas, objetivando organização,
produtividade e qualidade.
Atualmente, essas tecnologias e práticas englobam linguagens de programação, bases
de dados, ferramentas, plataformas, bibliotecas, padrões,
processos e a questão da Qualidade de Software.
Os fundamentos científicos para a engenharia de software envolvem
o uso de modelos abstratos e precisos que
permitem ao engenheiro especificar, projetar,
implementar e manter sistemas de software,
avaliando e garantindo suas qualidades. Além disso, a engenharia de software
deve oferecer mecanismos para se planejar e
gerenciar o processo de desenvolvimento de um sistema de
informação.
Métodos formais, na ciência da computação e engenharia de software, são técnicas matemáticas para o desenvolvimento
e especificação dos sistemas de software e hardware.
Para realizar tal tarefa no desenvolvimento, deve-se primeiro construir um
modelo de solução especificada formalmente,
utilizando uma linguagem formal.
Não é possível garantir a perfeição de nenhum programa, independentemente
do método utilizado. Mesmo usando métodos formais,
podem existir várias fases do projeto onde surgem
imperfeições devido a existência de especificações que
não são provadas. O ponto principal é que os
benefícios de uma especificação formal são atingidos independentemente da
garantia de sucesso do sistema.
O uso de um método formal ajuda a especificar melhor
o produto, e por isso, tende a encurtar
o tempo total de implementação. Realmente passa-se mais
tempo detalhando a especificação e menos programando.
Durante a fase inicial é menos custoso consertar problemas,
logo é importante não ter pressa neste momento.
Orientação a objetos, também conhecida como Programação
Orientada a Objetos (POO) ou ainda
em inglês Object-Oriented Programming (OOP) é um paradigma
de análise, projeto e programação de sistemas de software
baseado na composição e interação entre diversas
unidades de software chamadas de objetos.
A análise e projeto orientados a objetos têm como meta
identificar o melhor conjunto de objetos para descrever
um sistema de software. O funcionamento deste sistema se
dá através do relacionamento e troca de mensagens
entre estes objetos.
Na programação orientada a objetos, implementa-se um conjunto de
classes que definem os objetos presentes no sistema de
software. Cada classe determina o comportamento (definidos nos métodos)
e estados possíveis (atributos) de seus objetos,
assim como o relacionamento com outros objetos.
Smalltalk, Python, Ruby, C++, Object Pascal, Java e C# são exemplos de linguagens de programação orientadas
a objetos.
Programação orientada a aspecto ou POA, é um paradigma de programação de computadores que
permite aos desenvolvedores de software separar e
organizar o código de acordo com a
sua importância para a aplicação (separation of concerns). Todo programa escrito
no paradigma orientado a objetos possui código que é
alheio a implementação do comportamento do objeto. Este
código é todo aquele utilizado para implementar
funcionalidades secundárias e que encontra-se espalhado por toda
a aplicação (crosscutting concern). A POA permite
que esse código seja encapsulado e modularizado
Compilador é um programa que, a partir de um código
escrito em uma linguagem, o código fonte, cria
um programa semanticamente equivalente porém escrito em
outra linguagem, código objeto.
Um compilador é um dos dois tipos mais gerais
de tradutores, sendo que o segundo tipo que
a ele deve ser comparado é um interpretador.
Normalmente, o código fonte é escrito em uma
linguagem de programação de alto nível, com grande capacidade
de abstração, e o código objeto é escrito em
uma linguagem de baixo nível, como uma sequência de
instruções a ser executada por um sistema operacional.
O processo de compilação é composto de análise e síntese.
A análise tem como objetivo entender
o código fonte e representá-lo em uma estrutura
intermediária. A síntese constrói o código objecto
a partir desta representação intermediária.
http://del.icio.us/placido.neto