Você está na página 1de 43

FUNDAMENTOS DA COMPUTAÇÃO

Um computador é um sistema constítuido por: 1 hardware (física), 2 software (lógica), 3 peopleware


(usuário). A evolução se deu em 4 gerações: 1ª 1951 – 1958, 2ª 1959 – 1965, 3ª 1965 – 1969, 4ª 1970 até
agora. A organização básica de um pc consiste em máquinas que podem ser divididas em até seis níveis.
PC é formado por 5 unidades: a unidade aritmética-lógica (UAL / ULA) (operações aritméticas e lógicas
com os dados), a unidade de memória (A memória armazena grupos de dígitos binários (palavras) que
podem representar instruções a serem executadas pelo processador ou dados para serem operados pelas
instruções durante a execução de um programa), a unidade de controle (controla (dirige) a operação de
todas as demais unidades componentes do computador, fornecendo-lhes sinais de temporização e de
controle), a unidade de entrada (teclado) e a unidade de saída (impressoras).

- Organização básica do PC: Memória central (RAM e ROM), Periféricos de Entrada, Periféricos de
Saída, Memória Secundária e no meio a CPU. Memória RAM é um tipo de memória volátil que serve para
rodar aplicações depois que o computador já está ligado, e cujas informações são perdidas depois do
desligamento da máquina (memória volátil, precisa de energia para armazenar as informações). Já a
memória ROM é algo completamente diferente, pois se refere a um tipo de memória quase permanente
(não-volátil, as informações ficam salvas mesmo sem energia, pc desligado). Memória Flash (pen-drive).

- Memória Lógica e Física: Os processos não enxergam a memória física, hardware usado para
endereçar os circuitos integrados de memória, e sim a memória lógica, que é a memória capaz de ser
endereçada e acessada pelo conjunto de instruções do processador, sendo que cada processo possui a
sua memória lógica que é independente da memória lógica dos outros processos. A memória física é
implementada pelos circuitos integrados de memória, pela eletrônica do computador. Ela possui espaço de
endereçamento físico que é o conjunto formado por todos os endereços dos circuitos integrados que
formam a memória, normalmente esses endereços são em formato hexadecimal. A memória lógica possui
um espaço de endereçamento lógico, maior que o espaço de endereçamento físico, é formado por todos
os endereços lógicos gerado pelo processo, sendo gerado pela CPU e único por processo. Como o
processo "enxerga" endereço de memória lógico e o hardware "enxerga" endereço de memória físico é
necessário ter a conversão de endereço de memória lógico para endereço de memória físico. Esse
mapeamento de endereço lógico em endereço físico é feito pela MMU, unidade de gerência de memória.
Basicamente a MMU que vai mapear os endereços lógicos gerados pelos processos nos correspondentes
endereços físicos que serão enviados para a memória.

- Tipos de Memória: Acesso sequencial – A memória fica organizada em unidades de dados chamadas
registros, sendo acessados de forma linear. Tem um tempo de acesso variável. Um exemplo deste tipo é a
fita magnética; Acesso direto – Assim como o acesso sequencial, o acesso direto envolve um mecanismo
compartilhado de leitura-escrita compartilhado, sendo os seus blocos ou registros com endereços
exclusivos, baseado no local físico. O tempo de acesso é variável. Um exemplo deste tipo de memória são
os discos; Acesso aleatório – Cada local endereçável na memória tem um mecanismo de endereçamento
exclusivo, fisicamente interligado. O tempo de acesso independe da sequência de acessos anteriores e é
constante. Algumas memórias principais e sistemas de cache são de acesso aleatório; Associativo –
Neste tipo, é utilizado também um acesso aleatório, mas que faz uma comparação de um certo número de
bit desejados dentro de uma palavra para uma combinação especificada, fazendo isso com todas as
palavras simultaneamente. A palavra será recuperada com base em uma parte de seu conteúdo, em vez
de seu endereço. As memórias cache podem empregar o acesso associativo. Quanto ao desempenho,
temos: Tempo de acesso (latência) – Para a memória de acesso aleatório, esse é o tempo gasto para
realizar uma operação de leitura e escrita. Já para a memória sem acesso aleatório, é o tempo gasto para
posicionar o mecanismo de leitura-escrita no local desejado; Tempo de ciclo de memória – Esse tipo é
aplicado ao acesso aleatório, sendo o tempo de acesso mais qualquer tempo adicional antes que um
segundo acesso possa iniciar. Este tipo se refere ao barramento do sistema, e não do processador; Taxa
de transferência – Essa é a taxa em que os dados podem ser transferidos para dentro ou fora de uma
unidade de memória. Para as de acesso aleatório, ela é igual a 1/(tempo de ciclo). Já para a memória de
acesso não aleatório, é utiliada a seguinte: Tempo de ler-escrever N bits = Tempo de acesso médio +
(número de bits/taxa de trasnferência de bits por segundo). Algumas outras características são: Memória
Volátil – A informação se deteriora naturalmente ou se perde quando a energia elétrica é desligada.
Exemplos: memória RAM, cache, registradores; Memória Não-Volátil – A informação fica guardada até
que seja deliberadamente mudada. Neste caso, nenhuma energia elétrica é necessária para reter
informação. Os dados são armazenados de forma mais permanentemente em dispositivos externos, de
armazenamento em massa, assim como arquivos de programas e dados, sendo este tipo, também
utilizado para oferecer uma extensão à memória principal, conhecida como memória virtual. Estas também
são conhecidas por memória secundária ou memória auxiliar. Exemplo: memórias com superfície
magnética (discos e fitas); Memória não apagável – Conhecidas por “Memória ROM”, ou “memória
somente leitura”. Consequentemente é uma memória não-volátil.

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES

A arquitetura de um sistema computacional estabelece o modelo da organização e funcionamento de um


sistema de processamento, com todas suas partes, divididas em seções, interagindo entre si. Os
componentes e suas relações são representados através de sistemas hierárquicos, o que mostra-se ideal
para o estudo de conjuntos complexos e que atuam em diferentes níveis; separados por suas
características, estudaremos o funcionamento de cada um destes componentes. As funções básicas de
um computador são o processamento de dados, armazenamento de dados, transferência de dados e
controle. Para desempenhar essas funções o computador precisa executar um conjunto de instruções
(programa). Os computadores que conhecemos são baseados no conceito de programa armazenado,
introduzido por Von-Neuman. As instruções do programa e os dados são armazenados em uma memória,
de forma que a alteração de um programa consiste na alteração de um endereço de memória. O ciclo de
execução de cada uma das instruções de um programa é dividido nos seguintes estados: Cálculo do
Endereço de Instrução; Busca da Instrução (Instruction Fetch); Decodificação da Instrução; Cálculo do
Endereço do Operando; Busca do Operando (Operand Fetch); Execução da Operação; Armazenamento
do Resultado. No entanto, os computadores modernos utilizam o conceito de interrupção para diminuir o
tempo de ociosidade dos processadores, o ciclo de execução das instruções ganham mais alguns
estados. As classes de interrupções mais comuns são interrupções de software, de relógio, de E/S e de
falha de hardware.

Componentes básicos do PC: Unidade Central de Processamento (CPU) – Módulo que realiza as
operações necessárias; Memória Principal – Uma área de trabalho para o armazenamento das
informações que serão processadas; Dispositivos de E/S – Dispositivos para o recebimento de
informações e retorno/armazenamento dos resultados; Sistemas de Interconexão – Um meio através do
qual os dispositivos possam se comunicar e transmitir dados. Os principais elementos da CPU são a
Unidade de Controle, a Unidade Lógica e Aritmética (ULA) e os Registradores. Esses elementos se
conectam internamente através do barramento interno da CPU. Unidade de Controle Responsável por
buscar as instruções na memória e determinar o seu tipo e pode ser pensada como uma máquina de
estados finitos. Controla não só a transferência de dados e instruções para dentro e parafora da CPU,
como também a operação da ULA. Unidade Lógica e Aritmética Responsável pelo processamento de
dados como executar operações de adição, e AND booleano, entre outras, e para executar as instruções.

Registradores Os registradores presente na CPU são memórias pequenas e de alta velocidade para
armazenar resultados temporários e controle de informações. Existem vários tipos de registradores de uso
geral ou específico. O mais importante deles é o contador do programa (PC – Program Counter). Este
contador indica a próxima instrução a ser buscada para execução. Outro de grande importância é o
Registrador de instrução (Instruction Register), que contém a instrução executada no momento em
questão. A CPU se comunica com o mundo externo através dos barramentos do sistema. Ao longo da
execução de um programa, os barramentos constituem os chamados caminho dos dados. No topo da
organização hierárquica de memória em um sistema se encontram os registradores. Esses se dividem em
dois tipos: Registradores visíveis ao Usuário e Registradores de Controle e de Estado. Os registradores
visíveis ao usuário são aqueles que podem ser referenciados pela linguagem de montagem. Eles podem
ser registradores de dados, endereço ou então de propósito geral. Os registradores de Controle e de
Estado são utilizados para controlar a operação da CPU. Na maioria das vezes não são visíveis aos
usuários. Exemplos de registradores de Controle e de Estado são o Program Counter (PC), Instruction
Register (IR), Memory Address Register (MAR), Memory Buffer Register (MBR), Program Status Word
(PSW), Stack Pointer (SI), Page Table Base Register (PTBR), Page Table Base Limit (PTBL). A sequência
de eventos ao longo de um ciclo de instrução depende do projeto da CPU, no entanto, em termos gerais,
pode-se indicar o que acontece em nos subciclos de busca, indireto e interrupção. O ciclo de execução
depende do código da operação que será executada. Durante o ciclo de busca, o contador de programa
contém o endereço da próxima instrução a ser buscada na memória. Esse endereço é movido para o
registrador MAR e a unidade de controle requisita uma leitura na memória. O resultado da leitura e
colocado no registrador MBR, que em seguida é copiado para o registrador IR. Enquanto isso o PC é
incrementado de 1 para preparar a busca da próxima instrução. Ao fim do ciclo de busca, o unidade de
controle examina se a instrução especifica algum operando com endereçamento indireto. Os n bits mais a
direita de MBR são colocados em MAR, e então a unidade de controle requisita uma leitura a memória
para carregar o valor do operando para MBR. No ciclo de interrupção, o conteúdo do registrador PC
dever ser salvo, para que mais tarde a CPU possa retornar sua atividade normal depois de processar a
interrupção. O conteúdo do PC é transferido para MBR. A endereço de memória reservado para guardar o
valor de PC (ex: topo da pilha) é carregado para MAR, e então a unidade de controle solicita uma escrita
na memória. Por fim o PC é carregado com o endereço da rotina de interrupção, para que o no próximo
ciclo de instrução seja feita a busca da instrução apropriada.

Um processo é basicamente um programa em execução. Associado a cada processo está o seu espaço
de endereçamento e uma lista de posições de memória que este processo pode ler e escrever. Também
associado a cada processo está um conjunto de registradores, que inclui o contador de programa, o
ponteiro para a pilha de execução e demais informações necessárias para executar um programa. Em um
sistema multiprogramado, a CPU salta de programa para programa, executando cada um deles por
dezenas ou centenas de vezes por segundo. Estritamente falando, enquanto a cada instante a CPU
executa somente um programa, no decorrer de um segundo ela pode trabalhar sobre vários programas,
dando a ilusão de um verdadeiro paralelismo. Fala-se em pseudoparalelismo para contrastar com o real
paralelismo dos sistemas multiprocessadores. Quando um processo é suspenso temporariamente dessa
maneira, ele deverá ser reiniciado mais tarde, exatamente do mesmo ponto em que ele estava quando foi
interrompido. Logo, todas as informações relativas ao processo devem ser explicitamente salvas. Por
exemplo, um processo pode ter vários arquivos abertos para leitura. Existe um ponteiro associado a cada
um desses arquivos, que indica a posição atual, assim quando o processo retorna a execução, a chamada
de sistema read sobre o arquivo poderá ler os dados corretamente de sua última posição manipulada. Em
muitos sistemas operacionais os dados relativos ao processo, que não estejam em seu espaço de
endereçamento, são armazenados em uma tabela do Sistema Operacional chamada de tabela de
processos, contendo uma entrada para cada processo. Estados de Processos Os processos em um
Sistema Operacional possuem três estados, estes estados são: Em execução: realmente usando a CPU
naquele instante; Pronto executável, temporariamente parado para dar lugar a outro processo;
Bloqueado incapaz de executar enquanto um evento externo esperado não ocorrer. As transições entre
os estados, estas transições são: 1 Processo bloqueia aguardando um entrada dos dispositivos de E/S. 2
O escalador de processos seleciona outro processo. 3 O escalador de processos seleciona este processo.
4 A entrada torna-se disponível. A transição 1 ocorre quando um processo descobre que ele não pode
prosseguir. No UNIX, quando um processo lê de um arquivo especial e não há entrada disponível, o
processo é automaticamente bloqueado. As transições 2 e 3 são causadas pelo escalonador de processos
sem que o processo saiba disso. A transição 2 ocorre quando o escalonador decide que o processo em
execução já teve tempo suficiente de CPU e é momento de deixar outro processo ocupar o tempo de CPU.
A transição 3 ocorre quando o escalonador define que é justo que o processo retorne a ser executado,
após ter compartilhado a CPU com outros processos. A transição 4 ocorre quando um evento externo pelo
qual um processo estava aguardando (por exemplo, a chegada de uma dado vindo da placa de rede).
Note que a transição 4 não leva o processo diretamente para o estado “Em Execução”, pois pode existir
um outro processo em execução e este processo que estava bloqueado deve aguardar sua vez no
escalonador. T

Threads Em Sistemas Operacionais tradicionais, cada processo tem um espaço de endereçamento e um


único thread (fluxo) de controle. Na verdade, isso é quase uma definição de processo. Contudo,
frequentemente há situações em que é desejável ter múltiplos threads de controle no mesmo espaço de
endereçamento executando quase em paralelo como se fossem dois processos separados. Este conceito,
chamado de multithread. Threads distintos em um processo não são tão independentes quanto processos
distintos. Todos os threads têm exatamente o mesmo espaço de endereçamento, o que significa que eles
compartilham as mesmas variáveis globais. Como os threads têm algumas das propriedades dos
processos, eles são chamados de processos leves. É importante perceber que cada thread tem sua
própria pilha de execução. Logo os estados dos processos são os mesmos para os threads, ocorrendo as
mesmas transações de estados, como se cada thread fosse um processo separado. Havendo a
necessidade de salvar o estado da pilha de execução de cada thread toda vez que o mesmo perder a vez
na CPU, podendo futuramente retornar a execução no ponto em que foi interrompido. A vantagem de se
criar thread está na rapidez de sua criação e no menor gasto de recursos do sistema para o mesmo.
Gerenciamento de memória O que todo programador deseja é dispor de uma memória infinitamente
grande, rápida e não volátil, a um custo muito baixo. Infelizmente, a tecnologias atuais não comportam
essas memórias. Por isso, a maioria dos computadores utiliza uma hierarquia de memórias, que combina:
uma pequena quantidade de memória cache, volátil, muito rápida e de alto custo; uma grande memória
principal (RAM), volátil com alguns gigabytes, de velocidade e custo médios; e uma memória secundária,
constituída de armazenamento não volátil em disco, com centenas de gigabytes e custo baixo. Cabe ao
Sistema Operacional coordenar a utilização dessas memórias. A parte do Sistema Operacional,
responsável pela gerência das hierarquias de memória, é denominado gerenciador de memória. Sua
função é manter o controle de quais partes da memória estão em uso e quais não estão, alocando
memória aos processos quando precisam e liberando a memória quando os processos terminam.

Monoprogramação Quando se utiliza o esquema mais simples de gerenciamento de memória, a mesma


é compartilhada entre o programa e o Sistema Operacional, e somente um programa é executado por vez.
Tão logo um usuário tecle um comando, o Sistema Operacional carrega o programa solicitado do disco na
memória e o executa. Quando o processo finaliza, o Sistema Operacional espera por um novo comando.
Ao receber um novo comando, carregará o novo programa na memória, no espaço de endereçamento
ocupado pelo programa anterior.

Multiprogramação A maioria dos sistemas modernos permite a multiprogramação, onde múltiplos


processos estejam em execução simultânea, coexistindo na memória principal, através do particionamento
da memória entre os processos. Das técnicas de compartilhamento e gerenciamento desta memória a
mais utilizada nos microcomputadores é a Memória Virtual.

Memória Virtual O conceito básico da Memória Virtual é que um programa pode está com sua parte ativa
em memória e o restante em disco, por exemplo, um programa com 16MB de memória pode rodar em um
computador de 4MB de memória, sendo parte do programa dinamicamente carregado em memória de
acordo com a necessidade de execução. Na multiprogramação vários programas podem ter pedaços
ativos deles em memória, enquanto o resto se encontra em disco. Ficando como responsabilidade do
Sistema Operacional o controle de indicar que programas devem ficar na memória e quais devem ficar em
disco, chaveando estes programa a medida que forem sendo exigidos pelo usuário.

Entrada/Saída (E/S) O Sistema Operacional deve controlar todos os dispositivos de E/S de um


computador. Deve emitir comandos para os dispositivos, interceptar interrupções e tratar os erros, deve
também fornecer uma interface simples e fácil de usar, na medida do possível, esta interface deveria ser a
mesma para todos os dispositivos. Ou seja, para o usuário ler dados de um arquivo ou de um dispositivo
de rede as chamadas ao sistema são iguais, mudando apenas os parâmetros de entrada. Dispositivos de
E/S: Os dispositivos de E/S podem ser de modo genérico, divididos em duas categorias: dispositivos de
blocos e dispositivos de caractere. Um dispositivo de bloco é aquele que armazena informação em blocos
de tamanho fixo, cada um com seu próprio endereço. Os tamanhos de blocos variam de 512 bytes a
32.768 bytes. A propriedade essencial de um dispositivo de blocos é que cada bloco pode ser lido ou
escrito independente de todos os outros. Discos são dispositivos de blocos mais comuns. O outro tipo de
dispositivos de E/S é o dispositivo de caractere, o qual envia ou recebe um fluxo de caracteres, sem
considerar qualquer estrutura de blocos. Ele não é endereçável e não dispõe de qualquer operação de
posicionamento. Impressoras, interface de rede, mouses e a maior parte de outros dispositivos que são
diferentes do disco são considerados dispositivos de caractere. Sistema de Arquivo Um problema em
manter a informação dentro do espaço de endereçamento do processo é quando o mesmo termina, e sua
informação é perdida. Em muitas aplicações a informação precisa ficar retida por semanas, meses ou até
para sempre. A solução usual para esse problema é armazenar a informação em disco, em unidades
chamadas arquivos. Chamadas ao sistema são obviamente necessárias para criar, remover, ler e escrever
arquivos. Antes que possa ser lido, um arquivo deve ser localizado no disco, aberto e depois de lido,
fechado. Desse modo, chamadas ao sistema são fornecidas para realizar estas tarefas. Para ter um local
para guardar os arquivos, a maioria dos Sistemas Operacionais fornece o conceito de diretório como um
modo de agrupar arquivos. São necessárias chamadas ao sistema para criar e remover diretórios. São
também fornecidas chamadas para colocar um arquivo em um diretório e removê-los de lá. Entrada para
diretórios também podem ser outros diretórios, formando uma hierarquia de diretórios. Antes que possa
ser lido ou escrito, um arquivo precisa ser aberto e, nesse momento as permissões são verificadas. Se o
acesso ao arquivo, pelo usuário, for permitido, o sistema retorna o descritor de arquivo para usá-lo em
operações subseqüentes. Se o acesso for proibido, um código de erro é retornado.
- Lógica Digital O Nível de lógica digital é o nível mais baixo da Arquitetura. • Responsável pela
interpretação de instruções do nível superior (Macroinstruções - Nível ISA, ou Microinstuções - Nível de
Microprogramação). • Equivalência entre hardware e software: funções desempenhadas pelo software
podem migrar para o hardware e vice-versa. • Constituído pelos circuitos lógicos digitais (hardware da
máquina). • Projeto em nível de transferência entre registradores: a arquitetura pode ser entendida como
um conjunto de registradores, associados a módulos lógicos adicionais para processamento de
informação, interconectados de maneira apropriada. • O seqüenciamento adequado dos sinais de controle
destes módulos e registradores produz o fluxo ordenado de informação entre os mesmos, necessário à
interpretação de instruções do nível superior.

- Conversão de Base. Decimal – base 10, algarismos de 0 à 9; Binário – base 2, algarismos 0 e 1; Octal –
base 8, algarismos de 0 á 7; Hexadecimal – base 16, algarismos de 0 á 9 e letras A á F.

SISTEMAS OPERACIONAIS (Conceitos, características e utilização)

O sistema operacional é uma coleção de programas que: Inicializa o hardware do computador; Fornece
rotinas básicas para controle de dispositivos; Fornece gerência, escalonamento e interação de tarefas;
Mantém a integridade de sistema. Características: Ambiente de trabalho, barra de tarefas, ícones,
acessórios, painel de controle e explorador de arquivos.

1. Classificação Dos Sistemas Operacionais: Os primeiros Sistemas Operacionais foram feitos para
executarem uma única tarefa em um computador específico, sendo utilizado por um único usuário a cada
tarefa. Com o desenvolvimento da informática, os sistemas operacionais foram evoluindo, e hoje podem
ser classificados de acordo com as seguintes análises: •Características básicas da Arquitetura do Sistema:
Monolítico, Microkernel ou Híbrido. •Capacidade de execução das tarefas: Monotarefa ou Multitarefa;
•Quantidade de usuários que podem operar o sistema: Monousuário ou Multiusuário. Também pode ser
classificado em relação a: - Processamento (Multiprocessados, fortemente acoplados
(multiprocessadores), fracamente acoplados (multicomputadores)), - tarefas (monotarefa ou multitarefas), -
Usuário (Monousuario/monotarefa, monousuário/multitarefa ou multiusuario) e – Interface (Grafica ou
Linha de Comando).

2. Classificação Pela Arquitetura Do Sistema: Em relação a Arquitetura os Sistemas Operacionais


podem ser: •Monolítico: possui um conjunto de instruções de alto nível que possibilitam o gerenciamento
de processos, memória e dispositivos através de módulos dedicados que são executados com privilégios
especiais. O sistema operacional é escrito como uma coleção de rotinas, em que cada uma pode chamar
qualquer outra rotina, sempre que for necessário. Exemplos de sistemas desse tipo são: MS-Windows 98,
Linux e Solaris. •Microkernel: algumas das funções do sistema operacional foram separadas em
programas chamados Servidores. Os servidores se comunicam com um sistema operacional mínimo, que
possui todas as instruções de manipulação e acesso a todos os componentes do computador. O sistema
Minix, que é uma variação do Unix, é possui uma arquitetura de microkernel. •Híbrido: nesse caso os
Servidores externos são executados em um modo chamado “protegido”, permitindo assim que esses
programas tenham alguns privilégios de acesso a alguns componentes do computador, melhorando o
desempenho geral do sistema. Sendo híbrido, tem a capacidade de agregar ou desagregar
funcionalidades, sem perder performance ou estabilidade presentes na sua estrutura inicial. Sistemas com
arquitetura híbrida são: MacOS X, Windows 2000 e BeOS.

3. Classificação Pela Execução De Tarefas: A capacidade de execução de tarefas divide os sistemas


em: •Sistemas Monotarefa: executam uma tarefa de cada vez, como por exemplo: imprimir um arquivo.
Praticamente não são mais utilizados hoje em dia, devido ao desperdício de recursos do computador que
eles causam. O extinto MS-DOS da Microsoft é um exemplo de sistema operacional monotarefa.
•Sistemas Multitarefa: executam várias tarefas simultaneamente, como por exemplo: criar um desenho,
tocar uma música e imprimir um documento. Sistemas Operacionais multitarefa conseguem maximizar a
utilização dos recursos do computador. Até mesmo os sistemas operacionais de alguns aparelhos de
telefone celular são multitarefa. Um exemplo é o MS-Windows XP. Os sistemas multitarefa podem ser
classificados de acordo com a forma com que suas aplicações são gerenciadas, podendo ser divididos
em: sistemas de tempo compartilhado e sistemas de tempo real. •Sistemas de Tempo Compartilhado:
(Time Sharing Systens em inglês) permitem que diversos programas sejam executados a partir da divisão
do tempo de utilização do processador em pequenos intervalos, denominados fatias de tempo (time slice).
Se houver a necessidade de executar mais de um programa, o sistema operacional irá designar uma fatia
de tempo para cada um, e se a fatia de tempo concedida a um programa não for suficiente para a
conclusão do mesmo, ele será interrompido pelo sistema operacional e seu estado corrente será
armazenado, e um outro programa entrará em execução. Essa etapa é denominada de Troca de Contexto.
Essas trocas acontecerão enquanto houver algum programa que não tenha concluído a sua tarefa.
Sistemas de Tempo Real: a diferença dos sistemas de tempo real para os sistemas de tempo
compartilhado é a definição do tempo de execução de cada programa. Nos sistemas de tempo
compartilhado, quem define o tempo de processamento dos programas é o sistema operacional, já nos
sistemas de tempo real quem define o tempo de execução do programa é o próprio programa. No sistema
de tempo real não existe o conceito de fatia de tempo, um determinado programa será executado no
processador pelo tempo que for necessário, até a sua conclusão, ou até que seja iniciado um programa
com maior prioridade de execução. A prioridade também é definida pela própria aplicação e não pelo
sistema operacional. Praticamente todos os sistemas operacionais utilizados nos computadores hoje em
dia são de tempo compartilhado. Os sistemas Windows XP, Linux, MacOS X e Symbian são sistemas
operacionais de tempo compartilhado. Os Sistemas de Tempo Real são utilizados em aplicações de
controle de processos, como monitoramento de refinarias de petróleo, controle de tráfego aéreo, de
usinas, ou em qualquer aplicação em que o tempo de processamento é fator fundamental.

4. Classificação Pela Quantidade De Usuários: Por último, abordaremos a classificação quanto a


quantidade de usuários que operam um sistema operacional: •Monousuário: O sistema operacional foi
criado para que um único usuário utilize os recursos do computador. Na prática mais de uma pessoa pode
utilizar, mas, nesse caso, o sistema operacional não fará distinção entre as pessoas, tratando todas como
se fossem a mesma. Isso significa que um documento escrito por alguém poderá ser lido (ou alterado) por
outra pessoa. Além disso, qualquer um poderá executar qualquer tarefa no computador. As agendas
eletrônicas atuais, chamadas PDA (Personal Data Assistent em inglês), utilizam um sistema operacional
monousuário. •Multiusuário: Um sistema operacional multiusuário permite que diversos usuários utilizem
os recursos do computador. O sistema operacional deve garantir que as tarefas dos usuários estejam
separadas e não haja interferência entre as mesmas. Cada um dos programas utilizados deve dispor de
recursos suficientes e separados, de forma que o problema de um usuário não afete toda a comunidade
de usuários. Unix e sistemas operacionais mainframe como o MVS são exemplos de sistemas
operacionais multiusuário. Os sistemas operacionais Windows XP e MacOS X estão sendo considerados
sistemas multiusuário, pois fazem distinção entre os vários usuários que utilizam o computador.

Gerenciamento de Processos: No gerenciamento dos processos serão definidas as propriedades dos


processos em execução, e a maneira como cada um receberá o tempo de execução no processador. A
principal função do gerenciador de processos é exatamente a execução do processo no processador de
maneira adequada (considerando a prioridade do processo e a quantidade de processos gerenciados).
Tipos de Gerenciamento de Processos: •Gerenciadores por Admissão: neste caso o gerenciador irá
escolher quais processos serão selecionados para serem executados no processador. Quando um
programa solicita ao sistema operacional a execução de alguma operação, é o gerenciador de processos
que irá decidir o momento em que esta solicitação será atendida. Esta escolha é feita verificando-se
alguns fatores, sendo que o principal fator é a Prioridade do Processo. Esse tipo de gerenciador
geralmente é utilizado em Sistemas de Tempo Real, em que o controle da execução das operações deve
ser rigorosamente definido e obedecido. Não existe nenhum sistema operacional para computadores
pessoais que utilize esse tipo de gerenciador de processos; •Gerenciadores por Tempo Médio: este está
presente em todos os sistemas que trabalham com Memória Virtual (descrito na Unidade 12) que
temporariamente irá retirar processos da memória principal e guardá-los na memória secundária, e vice-
versa. A escolha de qual processo irá sair da memória principal para a secundária é feita de acordo com o
estado do processo. Como visto na Unidade 5, enquanto o processo está nos estados de Espera e
Execução, ficará na memória principal e quando passar para o estado de Bloqueio será retirado da
memória principal e será armazenado na memória secundária. Quando o processo passar do estado de
Bloqueio para Espera, será enviado da memória secundária para a principal; •Gerenciadores
Despachantes: os despachantes designam os processos para serem executados pelo processador
baseados em alguma alteração ocorrida no sistema, que pode ser causada por uma interrupção do relógio
do processador, por um dispositivo, por uma instrução de Chamada do Sistema, ou por algum outro sinal
identificável. Dessa maneira, não será nem a prioridade do processo, nem a alteração do seu estado que
influenciarão na escolha feita pelo gerenciador. As execuções dos processos serão feitas de acordo com o
nível de “atividade” do sistema. Quando houver uma carga de trabalho muito grande, os processos
receberão em intervalos regulares o devido tempo de execução no processador. Quando a carga de
trabalho for menor, cada processo terá mais tempo para executar no processador. (O tempo de
interrupção causado pelo relógio pode ser definido pelo programador do sistema operacional).

Comunicação entre processos: é o grupo de mecanismos que permite aos processos transferirem
informação entre si. Pode ser feito por: Memória Compartilhada (Pipes nomeados(FIFO) ou Pipes
uniderecionais): uma região de memória é compartilhada entre os processos ou; Troca de Mensagem (filas
de mensagens): Ocorre por meio de troca de mensagens entre os processos.

Sincronização entre Processsos: permite gerir o acesso concorrente a recursos do sistema operativo de
forma controlada por parte dos processos, de maneira que um recurso não seja modificado em simultâneo,
ou que os processos não fiquem em espera que o recurso seja libertado. Pode ser feito por meio de: -
sinais; -semaforos; - Sinais Posix; -Tratamento de sinais; -ações default; - Bloqueio de sinais; - Pipe, -
Socket.

Concorrência entre Processos: As aplicações concorrentes tem como base a execução cooperativa de
múltiplos processos ou threads que trabalham em uma mesma tarefa na busca de um resultado comum
(exemplo de uma conta com saldo de R$ 100, duas retiradas de R$ 50 e uma de R$80 e o saldo fica –
R$30, onde neste caso os processos foram executados juntos ao invés de um de cada vez).

Escalonamento de Processos: Um Escalonador de Processos é um subsistema do Sistema Operacional


responsável por decidir o momento em que cada processo obterá a CPU. É utilizado algoritmos de
escalonamento que estabelecem a lógica de tal decisão. Nesse momento de decidir qual escalonador será
utilizado no sistema operacional, cabe avaliar o cenário que o sistema será utilizado. Deve-se ter cuidado
com algumas variáveis como em casos que necessitam de mais processamento, ou seja, ação da CPU.
Como com processos que necessitam de processamento, ocuparão a CPU por um tempo maior e não
precisarão, ou de pouca, intervenção do usuário. Por exemplo, programas de cálculo científico, que o
usuário insere parâmetros e executa o programa que demorará um determinado tempo para mostrar os
resultados, isso exige processamento da CPU, com entrada e saída de dados apenas no momento inicial.
Já processos que necessitam de mais entrada e saída de dados, ou seja, o processo necessita de
intervenção do usuário. Por exemplo, ao digitar um texto, há entrada e saída de dados, logo, a resposta do
ato de teclar e a resposta de aparecer isso na tela exige que esse processo "entra e sai" da CPU inúmeras
vezes e em um pequeno espaço de tempo. Acabamos de ver os dois diferentes comportamentos de
processos. Aqueles orientados a Entrada e Saída (IN/OUT bound) e aqueles orientados a orientados a
CPU (CPU bound). - O Escalonamento Não Preemptivo que ocorre apenas em situações que
praticamente obrigam que uma decisão seja tomada. Esse cenário tem as seguintes condições: Criação
de um novo processo; Término de um processo; Processo ser bloqueado; Após alguma interrupção. - E o
Escalonamento Preemptivo que escolhe um processo e lhe concede a CPU durante certo tempo. Findado
esse tempo, a CPU é de outro processo. Esse cenário tem as seguintes condições: Criação de um novo
processo; Término de um processo; Processo ser bloqueado; Após alguma interrupção; Periodicamente, a
cada k intervalos de relógio. É sugerida uma classificação segundo o tipo de sistema, o tipo de aplicação
onde o algoritmo estará atuando. Segue os sistemas e seus objetivos: Todos os sistemas possuem o
objetivo geral de justiça, dar a cada processo uma porção justa da CPU; aplicação da política do algoritmo,
verificar se a política estabelecida está sendo cumprida; equilíbrio, manter ocupada todas as partes do
sistema. Sistemas em Lote possuem o objeto de vazão (throughput), maximizar o número de Jobs por
hora; tempo de retorno, minimizar o tempo entre a submissão e o término; utilização de CPU, manter a
CPU ocupada por todo tempo. Sistemas Interativos possuem o objetivo de tempo de resposta, responder
rapidamente às requisições; proporcionalidade, satisfazer as expectativas dos usuários. Sistemas de
Tempo Real possuem o objetivo de cumprimento dos prazos, evitar a perda de dados; previsibilidade,
evitar a degradação da qualidade em sistemas multimídia.

Gerenciamento de Memória: O Gerente de Memória é um componente do Sistema Operacional (contido


inteira-ou parcialmente no kernel) que aloca memória principal para os processos, e gerencia a hierarquia
de memória (Caches, RAM, e Disco). • Suas tarefas: – Garante isolamento mútuo entre processos
(proteção); – Mantém o registro das áreas de memória em uso; – Aloca memória RAM para novos
processos (no fork()); – Faz o swapping transparente entre memória principal e disco; – Atende a
requisições de aumento de memória; – Mantém o mapeamento de memória virtual para memoria física; –
Implementa a política de alocação de memória para os processos.
Gerenciamento de Entrada e Saída. O controle da entrada e saída (E/S – ou I/O, input/output) de dados
dos dispositivos é uma das funções principais de um sistema operacional. Para promover o
compartilhamento seguro do uso dos recursos, contudo, não é permitido aos processos o acesso direto
aos dispositivos de entrada e saída. Assim, cabe ao SO oferecer serviços (chamadas de sistema) que
permitam ler e escrever dados. A interação dos programas com o SO para o acesso aos dispositivos pode
ocorrer enviando e recebendo bytes de/para dispositivos de caractere, ou realizando operações de
arquivos em dispositivos de bloco. Atuações do SO nas operações de E/S: • Emitir comandos para os
dispositivos • Atender interrupções geradas pelos dispositivos • Tratar erros nas operações desses
dispositivos • Prover uma interface para utilização dos dispositivos; se possível a mesma para todos eles,
de forma que a sintaxe das operações seja independente dos dispositivos. Para entender como o SO trata
do gerenciamento dos dispositivos, é importante conhecer alguns aspectos de suas operações: - aspectos
de Hardware (Dispositivos de E/S; Controladores de Dispositivos; Acesso Direto a memória (DMA)
(Acesso direto com DMA e acesso a disco sem DMA); ); - Aspectos de Software (Drivers de dispositivos).

Sistemas de Arquivos e Diretórios. Sistemas de Arquivos: Espaço contíguo de armazenamento –


Armazenado em dispositivo secundário • Estrutura – Nenhuma: seqüência de bytes – Registros,
documentos, programa executável – Semântica: SO + aplicação. Atributos • Nome • Tipo (em alguns
sistemas) • Tamanho • Localização • Dono do arquivo • Proteção • Último acesso • Última alteração.
Operações • Criar • Escrever • Ler • Reposicionar o ponteiro do arquivo • Apagar o arquivo • Truncar o
arquivo • Mapeamento de arquivo na memória Nomes e extensões • Tamanho máximo de caracteres •
Extensões – Em alguns sistemas controla as operações que podemos fazer nos arquivos • Exe, doc, bat –
Opcional Tipos de acesso • Seqüencial – Implementação mais simples – O arquivo é processado de
forma seqüencial • Compiladores, editores de texto – O ponteiro do arquivo é automaticamente atualizado
quando é realizada uma leitura – Reposicionamento do ponteiro no início do arquivo • Acesso direto – O
arquivo é composto por “registros” de tamanho fixo – Uma operação de leitura e escrita é realizada
diretamente em um endereço n – Acesso randômico: discos. Sistema de Diretórios: Contém informações
dos arquivos armazenados no disco • Cada disco ou partição contém uma estrutura de diretórios •
Operações – Buscar um arquivo – Criar um arquivo – Apagar um arquivo – Listar os arquivos – Renomear
um arquivo – Verificar o conteúdo do sistema de arquivo Diretório • Eficiência: localizar um arquivo
rapidamente • Nomes: apropriado para usuários • Agrupamento – Arquivos pertencentes a uma mesma
aplicação são organizados através dos diretórios Diretório – único nível • Único nível para todos os
usuários • Fácil implementação • Problemas: conflitos de nome Diretório – dois níveis • Cada usuário tem o
seu diretório • Usuários podem ter arquivos com o mesmo nome • Nomes de arquivos compostos por
caminhos (path) • Busca eficiente – estrutura em arvore • Agrupamento • Busca eficiente • Conceito de
diretório corrente • Caminho relativo e absoluto • Apagar – Arquivo – Diretório: apaga todos os
subdiretórios e arquivos.

BANCO DE DADOS

São coleções organizadas de dados que se relacionam de forma a criar algum sentido (Informação).

Modelo E-R Um modelo entidade relacionamento é uma maneira sistemática de descrever e definir um
processo de negócio. O processo é modelado como componentes (entidades) que são ligadas umas as
outras por relacionamentos que expressam as dependências e exigências entre elas, como: um edifício
pode ser dividido em zero ou mais apartamentos, mas um apartamento pode estar localizado em apenas
um edifício. Entidades podem ter várias propriedades (atributos) que os caracterizam. Diagramas criados
para representar graficamente essas entidades, atributos e relacionamentos são chamados de diagramas
entidade relacionamento. Um modelo MER é normalmente implementado como um banco de dados. Nos
casos de um banco de dados relacional, que armazena dados em tabelas, as próprias tabelas
representam as entidades. Alguns campos de dados nestas tabelas apontam para índices em outras
tabelas. Tais ponteiros representam relacionamentos.

Modelo relacional é um modelo de dados representativo (ou de implementação), adequado a ser o


modelo subjacente de um Sistema Gerenciador de Banco de Dados (SGBD), que se baseia no princípio
de que todos os dados estão armazenados em tabelas (ou, matematicamente falando, relações). O
modelo relacional para gerência de bases de dados (SGBD) é um modelo de dados baseado em lógica e
na teoria de conjuntos. Em definição simplificada, o modelo baseia-se em dois conceitos: conceito de
entidade e relação - Uma entidade é um elemento caracterizado pelos dados que são recolhidos na sua
identificação vulgarmente designado por tabela. Na construção da tabela identificam-se os dados da
entidade. A atribuição de valores a uma entidade constrói um registro da tabela. A relação determina o
modo como cada registro de cada tabela se associa a registros de outras tabelas.

Análise de Requisitos O primeiro passo para a criação do modelo correto é entender a necessidade. A
isso chamamos de Análise de Requisitos. É preciso, primeiramente, levantar os requisitos que darão a
ideia inicial do sistema. Nessa fase — que é considerada a mais importante do processo —, procura-se
entender a regra de negócio estabelecida, por meio da qual será desenhado o que chamamos de
minimundo. Esse termo procura descrever o universo de relações de negócios que serão atendidas pelo
modelo a ser implementado. Na análise de requisitos, atividades como entrevistas e reuniões para discutir
os processos que serão controlados pelo sistema são de suma importância para que o desenho do modelo
seja o mais fiel possível à realidade e atenda de forma satisfatória à expectativa do interessado. Pode-se
dizer, sem medo, que o sucesso das próximas fases dependerá do entendimento claro da necessidade do
cliente.

Modelagem de dados conceitual Vem após a analise de requisitos. Nessa etapa as informações obtidas
servem como entrada para geração do desenho conceitual. Costuma-se utilizar o recurso chamado
modelo entidade-relacionamento, em que se define os agentes que farão parte das rotinas e os
relacionamentos entre esses agentes. Por exemplo, há uma entidade chamada “cliente” e outra chamada
“carro”. O relacionamento que é estabelecido entre essas duas entidades provavelmente será chamado de
"compra". Assim, no desenho conceitual, tem-se que “o cliente compra o carro”. Nesse momento, também
se estabelece a cardinalidade entre as entidades, ou seja, usando o exemplo citado, definem-se as regras,
como: Se um cliente compra um ou vários carros; Se um carro pode ser comprado por um ou vários
clientes. Nesse ponto, já se inicia a materialização das regras de negócios discutidas na primeira etapa.
Se fosse uma locadora de automóveis, um carro poderia ser alugado por um ou mais clientes (claro,
apenas por um de cada vez).

Transformação do modelo de dados conceitual em SQL . Modelo Conceitual: O modelo conceitual é


um diagrama em blocos que demonstra todas as relações entre as entidades, suas especializações, seus
atributos e auto-relações. Modelo Lógico: O modelo lógico mostra as ligações entre as tabelas de banco
de dados, as chaves primárias, os componentes de cada uma, etc. Modelo Físico: Inclui a análise das
características e recursos necessários para armazenamento e manipulação das estruturas de dados
(estrutura de armazenamento, endereçamento, acesso e alocação física), sendo uma sequência de
comandos executados em SQL a fim de criar as tabelas, estruturas e ligações projetadas até então e
finalmente criar o banco de dados.

Normalização é um conjunto de regras que visa, principalmente, a organização de um projeto de banco


de dados para reduzir a redundância de dados, aumentar a integridade de dados e o desempenho. Para
normalizar o banco de dados, deve-se examinar as colunas (atributos) de uma entidade e as relações
entre entidades (tabelas), com o objetivo de se evitar anomalias observadas na inclusão, exclusão e
alteração de registros. Atualmente, muitos sistemas de informação ainda não utilizam banco de dados
relacionais, sendo esses chamados de sistemas legados. Os dados desses sistemas são armazenados
em arquivos de linguagens de terceira geração, como COBOL ou BASIC, ou então, em banco de dados da
era pré-relacional.

Projeto de BD O projeto de um novo banco de dados dá-se em três fases, descritas a seguir: 1.
Modelagem conceitual – nesta primeira fase, é construído um modelo conceitual, na forma de um
diagrama entidade-relacionamento. Este modelo captura as necessidades da organização em termos de
armazenamento de dados de forma independente de implementação. 2. Projeto lógico – a etapa de projeto
lógico objetiva transformar o modelo conceitual obtido na primeira fase em um modelo lógico. O modelo
lógico define como o banco de dados será implementado em um SGBD específico. 3. Projeto físico – na
etapa de projeto físico, o modelo do banco de dados é enriquecido com detalhes que influenciam no
desempenho do banco de dados, mas não interfere em sua funcionalidade. O modelo obtido neste passo
é o modelo físico do banco de dados. Este processo normalmente é chamado de sintonia (“tuning”). 
continuo.
Programação de BD Os bancos de dados relacionais compartilham entre si, uma característica muito
interessante, todos eles usam uma linguagem chamada SQL. SQL não é uma linguagem de programação.
É um linguagem que é usada exclusivamente para criar tabelas, manipular os dados das tabelas e
principalmente, consultar os dados. É através do SQL, que os programas interagem com um banco de
dados relacional. Praticamente todas as linguagens de programação têm bibliotecas

Consultas em BD

XML é uma linguagem de marcação que possui como principal característica a capacidade de descrever
diversos tipos de dados com facilidade. Ela é considerado uma linguagem de marcação, pois ela contem

códigos que são utilizados para organizar, formatar e padronizar sequências de dados para posteriormente
serem interpretados. Dessa forma, a XML é um formato para a criação de documentos com dados
organizados de forma hierárquica. Ele carrega com ele tanto as informações como também marcações
que indicam o significado de cada informação descrita. Além disso, por conta de sua portabilidade (uma
vez que a XML é um formato independente de plataforma de hardware ou software), um sistema pode,
através de um conversor, escrever em um arquivo XML, e outro sistema distinto pode ler estes mesmos
dados. Isto facilita o trabalho de integração de ferramentas.

Ferramentas Case é uma classificação que abrange todas as ferramentas baseadas em computadores
que auxiliam atividades de engenharia de software, desde análise de requisitos e modelagem até
programação e testes. Podem ser consideradas como ferramentas automatizadas que tem como objetivo
auxiliar o desenvolvedor de sistemas em uma ou várias etapas do ciclo de vida do desenvolvimento de um
software. Objetivos - Melhoria da qualidade de software; Aumento da produtividade no processo de
software. Vantagens do uso de ferramentas CASE: Qualidade no produto final; Produtividade; Agilizar o
tempo para tomada de decisão; Menor quantidade de códigos de programação; Melhoria e redução de
custos na manutenção; Agilidade no retrabalho do software; Maior facilidade para desenvolvimento.
Desvantagens do uso de ferramentas CASE: - Incompatibilidade de ferramentas; - Formação para
utilização.

UML UML é um acrônimo para a expressão Unified Modeling Language. Pela definição de seu nome,
vemos que a UML é uma linguagem que define uma série de artefatos que nos ajuda na tarefa de modelar
e documentar os sistemas orientados a objetos que desenvolvemos.Ela possui nove tipos de diagramas
que são usados para documentar e modelar diversos aspectos dos sistemas. A maioria dos problemas
encontrados em sistemas orientados a objetos tem sua origem na construção do modelo, no desenho do
sistema. Muitas vezes as empresas e profissionais não dão muita ênfase à essa fase do projeto, e acabam
cometendo diversos erros de análise e modelagem. Isso quando há modelagem, pois nós profissionais da
área sabemos que muitas vezes o projeto começa já na fase de codificação. Aqui se faz o diagrama de
caso de uso (cenário, ator, tarefa).

SQL significa “Structured Query Language”, ou “Linguagem de Consulta Estruturada”, em português.


Resumidamente, é uma linguagem de programação para lidar com banco de dados relacional (baseado
em tabelas). Foi criado para que vários desenvolvedores pudessem acessar e modificar dados de uma
empresa simultaneamente, de maneira descomplicada e unificada. A programação SQL pode ser usada
para analisar ou executar tarefas em tabelas, principalmente através dos seguintes comandos: inserir
(‘insert’), pesquisar (‘search’), atualizar (‘update’) e excluir (‘delete’). Porém, isso não significa que o SQL
não possa fazer coisas mais avançadas, como escrever queries (comandos de consulta) com múltiplas
informações.

Integridade de bancos de BD Integridade de dados é a manutenção e a garantia da precisão e


consistência de dados durante todo o ciclo de vida da informação, e é um aspecto crítico para o projeto,
implementação e uso de qualquer sistema que armazene, processe ou recupere dados. A integridade dos
dados contém diretrizes para retenção de dados, especificando ou garantindo a duração de tempo que os
dados podem ser mantidos em um banco de dados específico. Ele especifica o que pode ser feito com
valores de dados quando sua validade ou utilidade expiram. A integridade física lida com os desafios
associados à forma correta de armazenamento e obtenção dos dados. Os desafios com integridade física
podem incluir falhas Eletromecânicas, falhas de projeto, fadiga de material, corrosão, quedas de energia,
desastres naturais, atos de guerra e terrorismo e outros perigos ambientais. Integridade Lógica: Este tipo
de integridade diz respeito à correção ou racionalidade de um dado, dado o contexto particular. Isso inclui
tópicos como integridade referencial e integridade da entidade em um banco de dados relacional ou
corretamente ignorando os absurdos dados de um sensor em sistemas robotizados. Essas preocupações
envolvem garantir que os dados "façam sentido", dado o seu ambiente. Os desafios incluem erros de
software, falhas de projetos e erros humanos. A integridade dos dados é normalmente aplicada em um
sistema de banco de dados por uma série de restrições de integridade ou regras. Três tipos de restrições
de integridade são uma parte inerente do modelo de dados relacionais: integridade de entidade, de
domínio e referencial: - Integridade de entidade diz respeito ao conceito de chave primária. A integridade
da entidade é uma regra de integridade que afirma que cada tabela deve ter uma chave primária e que a
coluna ou as colunas escolhidas para serem a chave primária devem ser únicas e não nulas; - Integridade
referencial diz respeito ao conceito de chave estrangeira. A regra de integridade referencial estabelece que
qualquer valor de chave estrangeira pode ser apenas em um de dois estados: normalmente o valor de
chave primária de alguma outra tabela ou, ocasionalmente, dependendo das regras do proprietário dos
dados, null. Neste último caso, afirma-se explicitamente que não há relação entre os objetos
representados no banco de dados ou que essa relação é desconhecida. - Integridade de domínio
especifica que as colunas de uma tabela em um banco de dados relacional devem ser declaradas em um
domínio definido. A principal unidade de dados no modelo de dados relacionais é o item de dados. Tais
itens de dados são considerados atômicos/indivisíveis. Um domínio é um conjunto de valores do mesmo
tipo. Os domínios são, portanto, conjuntos/faixas de valores a partir dos quais os valores reais são
adicionados às colunas de uma tabela. - Integridade definida pelo usuário refere-se a um conjunto de
regras especificadas por um usuário, que não pertencem à entidade, domínio e categorias de integridade
referencial. Ter um sistema de integridade de dados único, bem controlado e bem definido aumenta: -
estabilidade: um sistema centralizado executa todas as operações de integridade de dados; -
desempenho: todas as operações de integridade de dados são realizadas na mesma camada do modelo
de consistência; - reutilização: todos os aplicativos se beneficiam de um único sistema centralizado de
integridade de dados; - manutenção: um sistema centralizado facilita a administração da integridade de
dados.

Recuperação de BD Os esquemas de recuperação são responsáveis pela restauração do banco de


dados para um estado consistente que havia antes da falha. As falhas podem ser dos tipos: - falha de
transação: Podem ser causadas por: erros lógicos: a transação não pode continuar sua execução normal
devido a uma falha interna do sistema, como por exemplo, dados não encontrados, overflow (estouro de
memória) e programação incorreta do sistema. Mesmo que a transação seja reexecutada, o problema
continuará ocorrendo; erros de sistema: o sistema entra em um estado inadequado (deadlock) e com isso,
a transação não consegue continuar sua execução normal. A transação pode ser reexecutada
posteriormente. - Queda do sistema: algum mal-funcionamento no hardware ou software que causa a
perda do conteúdo armazenado em meio volátil e faz com que o processamento da transação pare. O
conteúdo armazenado em meio não-volátil permanece intacto. - falha de disco: um bloco de disco perde
seu conteúdo em função da quebra do cabeçote ou de falha durante uma traferência de dados, por
exemplo. Para assegurar a consistência do banco de dados e a atomicidade da transação, após uma
falha, devem ser usados algoritmos de recuperação. Estes algoritmos dependem do tipo da falha e de
como os dados foram afetados por ela. Eles possuem duas partes: - ações tomadas durante o
processamento normal da transação a fim de garantir que haja informação suficiente para permitir a
recuperação das falhas. - ações tomadas após a falha, recuperando o conteúdo do banco de dados para
um estado que assegure sua consistência, a atomicidade da transação e sua durabilidade. Alguns tipos de
recuperação: - Backups: Para recuperar dados após uma falha de disco, por exemplo. O arquivo
corrompido ou inconsistente é substituído por uma cópia anterior consistente. Problema: dependendo da
periodicidade, a cópia pode não estar totalmente atualizada. - Recuperação baseada em log: O log é uma
sequência de registros que mantém um arquivo atualizado das atividades executadas no banco de dados.
Um registro de log descreve uma única ação no banco de dados e tem os seguintes valores: identificador
da transação (identificador único da transação que realizou a operação de escrita); Identificador do item de
dado (identificador único do dado – normalmente é a localização do item de dado no disco ); valor antigo;
valor novo. Um log grava também: start: indica o início da transação; commit: indica que a transação foi
efetivada; abort: indica que a transação foi abortada; O log pode ser gravado em dois momentos: antes da
execução da transação ou depois da execução da transação. Entretetanto, se ocorrer uma falha logo
após a gravação do log e antes da execução da transação, no primeiro caso, ou logo após a execução da
transação e antes da gravação do log, no segundo caso, como o sistema de recuperação sabe o que
deverá ser recuperado? Para mitigar este problema, as modificações no banco de dados podem ser
adiadas ou gravadas imediatamente. Existe ainda a possibilidade de inclusão de checkpoints, separando o
que já foi gravado do que ainda não foi. Modificações adiadas do banco de dados: Garante a atomicidade
das transações, quando todas as modificações são escritas no log, adiando a execução das operações de
escrita até sua efetivação parcial. *Efetivação parcial: todas as operações da transação foram executadas,
mas ela ainda pode ser abortada. (Não foi feito o commit ainda)* Quando uma transação é parcialmente
efetivada, as informações no log associadas àquela transação são usadas para a execução das escritas
adiadas. Se ocorrer uma falha, então as informações do log serão ignoradas.

Segurança de BD A segurança do banco de dados herda as mesmas dificuldades que a segurança da


informação enfrenta, que é garantir a integridade, a disponibilidade e a confidencialidade. Um Sistema
gerenciador de banco de dados deve fornecer mecanismos que auxiliem nesta tarefa. Os bancos de dados
SQL implementam mecanismos que restringem ou permitem acessos aos dados de acordo com papeis ou
roles fornecidos pelo administrador. O comando GRANT concede privilégios específicos para um objeto
(tabela, visão, seqüência, banco de dados, função, linguagem procedural, esquema ou espaço de tabelas)
para um ou mais usuários ou grupos de usuários. A integridade do banco de dados se refere ao requisito
de que a informação seja protegida contra modificação imprópria. A disponibilidade do banco de dados
refere-se a tornar os objetos disponíveis a um usuário ou a um programa ao qual eles têm um direito
legitimo. A confidencialidade do banco de dados se refere à proteção dos dados contra a exposição não
autorizada.

Controle de Acesso É todo controle feito quanto ao acesso ao BD, impondo regras de restrição,
através das contas dos usuários. O Administrador do BD (DBA) é o responsável superior por declarar as
regras dentro do SGBD. Ele é o responsável por conceder ou remover privilégios, criar ou excluir usuários,
e atribuição de um nível de segurança aos usuários do sistema, de acordo com a política da empresa.

Controle de Inferência É um mecanismo de segurança para banco de dados estatísticos que atua
protegendo informações estatísticas de um individuo ou de um grupo. Bancos de dados estatísticos são
usados principalmente para produzir estatísticas sobre várias populações. O banco de dados pode conter
informações confidenciais sobre indivíduos. Os usuários têm permissão apenas para recuperar
informações estatísticas sobre populações e não para recuperar dados individuais, como, por exemplo, a
renda de uma pessoa específica.

Controle de Fluxo É um mecanismo que previne que as informações fluam por canais secretos e
violem a política de segurança ao alcançarem usuários não autorizados. Ele regula a distribuição ou fluxo
de informação entre objetos acessíveis. Um fluxo entre o objeto A e o objeto B ocorre quando um
programa lê valores de A e escreve valores em B. Os controles de fluxo têm a finalidade de verificar se
informações contidas em alguns objetos não fluem explicita ou implicitamente para objetos de menor
proteção. Dessa maneira, um usuário não pode obter indiretamente em B aquilo que ele ou ela não puder
obter diretamente de A.

Criptografia de Dados. É uma medida de controle final, utilizada para proteger dados sigilosos
que são transmitidos por meio de algum tipo de rede de comunicação. Ela também pode ser usada para
oferecer proteção adicional para que partes confidenciais de um banco de dados não sejam acessadas por
usuários não autorizados. Para isso, os dados são codificados através da utilização de algum algoritmo de
codificação. Assim, um usuário não autorizado terá dificuldade para decifrá-los, mas os usuários
autorizados receberão chaves para decifrar esses dados. A criptografia permite o disfarceda mensagem
para que, mesmo com o desvio da transmissão, a mensagem não seja revelada.
Usuários Abrange usuários e esquema do banco de dados onde cada banco de dados Oracle tem
uma lista de nomes de usuários. Para acessar um banco de dados, um usuário deve usar um aplicativo
desse tipo e tentar uma conexão com um nome de usuário valido. Cada nome tem uma senha associada
para evitar o uso sem autorização. Devem ser implementados ainda diferentes perfis de usuário para
diferentes tarefas no Oracle, tendo em vista que cada aplicação/usuário tem a sua necessidade de acesso.
Existe ainda a possibilidade de proteger os perfis com senha, o que é uma excelente medida. Além dessas
medidas, o uso de cotas aumenta a restrição de espaço em disco a ser utilizado por usuários/aplicativos.

Domínio de Segurança Onde cada usuário tem um domínio de segurança, um conjunto de


propriedades que determinam coisas como ações (privilégios e papeis) disponíveis para o usuário; cota de
tablespaces (espaço disponível em disco) do usuário; limites de recursos de sistema do usuário. As
tabelas (tablespaces) do sistema, como a system, devem ser protegidas de acessos de usuários diferentes
dos usuários de sistema. A liberação de escrita e alteração de dados em tais tabelas é muito comum em
ambientes de teste, onde os programadores e DBAs tomam tal atitude para evitar erros de aplicação por
falta de privilégios. Porém, em ambientes de produção, tal medida é totalmente desaconselhável.

Autoridade As autoridades fornecem um método de agrupar privilégios e controlar o nível de


acesso dos administradores e operadores da base de dados com relação à manutenção e operações
permitidas.As especificações da base de dados estão armazenadas em catálogos da própria base de
dados. As autoridades do sistema estão associadas a membros de grupos e armazenados no arquivo de
configuração administrativa do banco de dados. Este arquivo define as concessões de acesso e o que
poderá ser executado de acordo com cada grupo.

Privilégios Os privilégios são permissões únicas dadas a cada usuário ou grupo. Eles definem
permissões para tipos de autorização. Pelos privilégios é possível autorizar o usuário a modificar ou
alcançar determinado recurso do Banco de Dados. Os privilégios também são armazenados em catálogos
do próprio Banco de Dados, visto que os grupos de autoridade por já possuírem grupos predefinidos de
privilégio concedem implicitamente privilégios a seus membros. Tipos de privilégios discricionários O
SGBD deve oferecer acesso seletivo a cada relação do banco de dados baseando-se em contas
específicas. As operações também podem ser controladas; assim, possuir uma conta não
necessariamente habilita o possuidor a todas as funcionalidades oferecidas pelo SGBD. Informalmente
existem dois níveis para a atribuição de privilégios para o uso do sistema de banco de dados: - O nível de
conta: Nesse nível, o DBA estabelece os privilégios específicos que cada conta tem, independente das
relações no banco de dados. - O nível de relação (ou tabela): Nesse nível, o DBA pode controlar o
privilégio para acessar cada relação ou visão individual no banco de dados.

Revogação de privilégios Em alguns casos, interessa conceder um privilégio temporário a um


usuário. Por exemplo, o proprietário de uma relação pode querer conceder o privilégio SELECT a
umusuário para uma tarefa específica e depois revogar aquele privilégio quando a tarefa estiver
completada. Por isso, é necessário um mecanismo para a revogação de privilégios. Em SQL, um comando
REVOKE é introduzido com o intento de cancelar privilégios.

Sistema de Controle de Acesso Controle de acesso obrigatório e para segurança multi-nível


Neste método, o usuário não tem um meio termo, ou ele tem ou não tem privilégios, sendo utilizado
normalmente em BD que classificam dados de usuários, onde é necessário um nível a mais de segurança.
A maioria dos SGBDs não oferecem esse tipo de controle de acesso obrigatório, ficando com os controles
discricionários ditos anteriormente. Normalmente são utilizados em sistemas governamentais, militares ou
de inteligência, assim como industriais e corporativas. As classes de segurança típicas são altamente
sigilosas (top secret, TS), secreta (secret, S), confidenciais (confidential) (C) e não Classificada
(unclassified, U), em que TS é o nível mais alto e U é o mais baixo. De uma forma geral, os mecanismos
de controle de acesso obrigatório impõem segurança multinível, pois exigem a classificação de usuários e
de valores de dados em classes de segurança e impõem as regras que proíbem o fluxo de informação a
partir dos níveis de segurança mais altos para os mais baixos. Controle de acesso baseado em papéis É
uma abordagem para restringir o acesso a usuários autorizados e uma alternativa aos sistemas de
controles de acesso do tipo MAC e DAC. O conceito de controle de acesso baseado em papéis surgiu com
os primeiros sistemas computacionais multiusuários interativos. A idéia central do RBAC é que permissões
de acesso são associadas a papéis, e estes papéis são associados a usuários. Papéis são criados de
acordo com os diferentes cargos em uma organização, e os usuários são associados a papeis de acordo
com as suas responsabilidades e qualificações. Vários indivíduos podem ser designados para cada papel.
Os privilégios de segurança comuns a um papel são concedidos ao nome dele, e qualquer indivíduo
designado para esse papel automaticamente teria esses privilégios concedidos. Os usuários podem ser
facilmente remanejados de um papel para outro. Mudanças no ambiente computacional, como instalação
de novos sistemas e remoção de aplicações antigas, modificam apenas o conjunto de permissões
atribuídas aos diferentes papeis, sem envolver diretamente o conjunto de usuários. A separação de tarefas
é um requisito importante em diversos SGDBs. É necessária para impedir que um usuário realize sozinho
o trabalho que requer o envolvimento de outras pessoas. A exclusão mútua de papéis é um método que
pode ser implementado com sucesso. Outro aspecto relevante nos sistemas RBAC são as restrições
temporais possíveis que podem existir nos papéis, como o tempo e a duração das ativações de papéis e o
disparo temporizado de um papel por uma ativação de outro papel. O uso se um modelo RBAC é um
objetivo altamente desejado pela para solucionar os principais requisitos de segurança das aplicações
baseadas na web.

Controle de acesso utilizando Triggers Com a utilização das Triggers é possível criar
mecanismos de segurança mais complexos que podem ser disparados cada vez que um evento é
chamado. O comando Insert na tabela é exemplo de um evento que pode ser usado para disparar uma
Triggers, além disso, as mesmas podem ser disparadas antes ou depois de comando especificado com o
objetivo de prover maior rigor no controle de segurança. Se o comando executado pelo usuário não for
validado pela Triggers, um erro é sinalizado do corpo da própria Triggers para impedir que a tabela seja
modificada indevidamente.

Controle de acesso utilizando Views As views constituem um outro método de controle de


acesso, normalmente utilizadas para restringir o acesso direto aos dados. Com a view é possível permitir
acesso de usuário concedendo privilégios, ocultar linhas e colunas de informações confidenciais ou
restritas residentes na tabela original das indicações do SQL. Os privilégios e concessões são definidos
somente na view e não afetam a tabela base sendo o acesso dos usuários delimitado pela view, a qual é
gerada criando um subconjunto de dados na tabela referenciada. A opção With Verification provê maior
segurança porque não permite ao usuário modificar as linhas de tabela sem ter privilégios de leitura dentro
da view.

BD geográficos São banco de dados preparados para armazenar dados sobre informações espaciais.São
comumente chamados de Sistemas de Informações Geográficas (SIG). Este tipo de banco de dados tem o
intuito manipular um imenso volumes de informações de grande complexidade, como mapas e imagens de
satélite.

BD orientados a objetos é um banco de dados em que cada informação é armazenada na forma de


objetos, ou seja, utiliza a estrutura de dados denominada orientação a objetos, a qual permeia as
linguagens mais modernas. Começou a ser comercialmente viável em 1980. O gerenciador do banco de
dados para um orientado a objeto é referenciado por vários como ODBMS ou OODBMS. Existem dois
fatores principais que levam à adoção da tecnologia de banco de dados orientados a objetos. A primeira, é
que, em um banco de dados relacional, se torna difícil de manipular com dados complexos (esta
dificuldade se dá pois o modelo relacional se baseia menos no senso comum relativo ao modelo de dados
necessário ao projeto e mais nas contingências práticas do armazenamento eletrônico). O segundo fator é
que os dados são geralmente manipulados pela aplicação escrita usando linguagens de programação
orientada a objetos, como C++, C#, Java, Python ou Delphi (Object Pascal), e o código precisa ser
traduzido entre a representação do dado e as tuplas da tabela relacional, o que além de ser uma operação
tediosa de ser escrita, consome tempo. Esta perda entre os modelos usados para representar a
informação na aplicação e no banco de dados é também chamada de "perda por resistência". A
Linguagem de Definição de Objeto (ODL) é a linguagem de especificação que define a interface para os
tipos de objeto em conformidade com o Modelo de Objeto ODMG. Frequentemente abreviado pela sigla
ODL.O objetivo desta linguagem é definir a estrutura de um diagrama de relação de entidade. O Object
Query Language (OQL) é um padrão de linguagem de consulta para bancos de dados orientados a objetos
modelados a partir do SQL.

BD de Objetos: baseia-se somente no modelo de dados orientado a objetos. Está baseado no


conceito de objetos persistentes e usa declarações de classes muito semelhantes às declarações
das linguagens orientadas a objetos;
As principais características dos Bancos de Dados Puramente Orientados a Objetos são: -
Permitem a representação de relacionamentos 1-n, n-n e de herança; - A representação de um
relacionamento é feita incluindo-se dentro de um objeto os “object identifiers” dos outros objetos
com os quais ele se relaciona; - “Object Identifier” é um identificador interno do banco de dados
para cada objeto. Os “object identifiers” são atribuídos e utilizados somente pelo SGBD, nunca
pelos usuários. - Não possuem um padrão único de implementação como os bancos relacionais.
Assim, cada produto tem a sua própria especificação para criação de classes e relacionamentos;

BD de Objetos-relacional: correspondem a bancos relacionais que possibilitam o


armazenamento de objetos. Com relação aos Bancos de Dados Objeto-Relacionais, pode-se
dizer que as principais características são: - Um banco objeto-relacional é um banco que permite
o armazenamento de objetos em suas tabelas; - Uma classe representa um domínio, atuando
como um data type para uma coluna. A classe, diferentemente dos bancos orientados a objetos,
não representa mais um elemento envolvido em relacionamentos;- Todas as regras de um banco
relacional continuam válidas; - Uma coluna cujo data type seja uma classe, só poderá ter uma
instância desta classe. Imagine, por exemplo, uma coluna cujo data type seja uma classe
TELEFONE. Nos BDOR, esta coluna não poderá ter várias instâncias da classe TELEFONE, mas
apenas uma. Se o banco fosse OO, poderia ter mais do que uma. - Dentre as principais
vantagens dos BDOR, pode-se citar que todo o suporte para ao paradigma orientado a objetos
está presente. Além disso, já existe um padrão de implementação estabelecido, determinando
uma certa facilidade de convivência com os sistemas já existentes. Ex de BDOR: Informix e DB2,
Oracle i9; PostgreSQL, Titanium e Cache.

BD Distribuidos A diferença principal entre sistemas de banco de dados centralizados e


distribuídos é que no primeiro os dados estão localizados em um único lugar, enquanto que no
outro os dados residem em diversos locais. Esta distribuição de dados é motivo de muitas
preocupações e dificuldades. Os processadores em um sistema distribuído podem variar em
tamanho e função, podendo incluir microcomputadores, estações de trabalho, minicomputadores
e sistemas de computadores de uso em geral. Estes processadores são geralmente chamados de
nós, dependendo do contexto no qual eles estejam mencionados. Usa-se principalmente o termo
nó (lugar, posição), a fim de enfatizar a distribuição física destes sistemas. Um sistema de banco
de dados distribuído (BDD) consiste em um relação de nós, cada qual podendo participar na
execução de transações que acessam dados em um ou mais nós. Em um sistema de banco de
dados distribuído, o banco de dados é armazenadoem diversos computadores (nós). Os
computadores, em um sistema distribuído, comunicam-se uns com os outros por intermédio de
vários meios de comunicação, tais como: redes de alta velocidade, redes sem fio ou linhas
telefônicas, eles não compartilham a memoria principal e o relógio. A diferença principal entre
sistemas de banco de dados centralizados e distribuídos é que no primeiro os dados estão
localizados em um único lugar, enquanto que no outro os dados residem em diversos locais. Esta
distribuição de dados é motivo de muitas preocupações e dificuldades. Os processadores em um
sistema distribuído podem variar em tamanho e função, podendo incluir microcomputadores,
estações de trabalho, minicomputadores e sistemas de computadores de uso em geral. Estes
processadores são geralmente chamados de nós, dependendo do contexto no qual eles estejam
mencionados. Usa-se principalmente o termo nó (lugar, posição), a fim de enfatizar a distribuição
física destes sistemas. Uma relação r (ou tabela) possui diversos enfoques para o
armazenamento em um banco de dados distribuído (BDD): Replicação: o sistema mantém
réplicas idênticas da relação, onde cada réplica é armazenada em sites diferentes, resultando na
replicação dos dados. Fragmentação: a relação é particionada em vários fragmentos, onde cada
fragmento é armazenado em um site diferente. Replicação e fragmentação: a relação é
particionada em vários segmentos, e o sistema mantém diversas réplicas de cada fragmento.

Tecnologias emergentes em BD A blockchain (também conhecido como “o protocolo da


confiança”) é uma tecnologia de registro distribuído que visa a descentralização como medida de
segurança.[1] São bases de registros e dados distribuídos e compartilhados que têm a função de
criar um índice global para todas as transações que ocorrem em um determinado mercado.
Funciona como um livro-razão, só que de forma pública, compartilhada e universal, que cria
consenso e confiança na comunicação direta entre duas partes, ou seja, sem o intermédio de
terceiros. Está constantemente crescendo à medida que novos blocos completos são adicionados
a ela por um novo conjunto de registros. Os blocos são adicionados à blockchain de modo linear
e cronológico. Cada nó - qualquer computador que conectado a essa rede tem a tarefa de validar
e repassar transações - obtém uma cópia da blockchain após o ingresso na rede. A blockchain
possui informação completa sobre endereços e saldos diretamente do bloco gênese até o bloco
mais recentemente concluído. A blockchain é vista como a principal inovação tecnológica do
bitcoin visto que é a prova de todas as transações na rede. Seu projeto original tem servido de
inspiração para o surgimento de novas criptomoedas e de bancos de dados distribuídos.

Blockchain é um tipo de Base de Dados Distribuída que guarda um registro de transações


permanente e à prova de violação. A base de dados blockchain consiste em dois tipos de
registros: transações individuais e blocos. Um bloco é a parte concreta da blockchain onde são
registrados algumas ou todas as transações mais recentes e uma vez concluído é guardado na
blockchain como base de dados permanente. Toda vez que um bloco é concluído um novo é
gerado. Existe um número incontável de blocos na blockchain que são ligados uns aos outros -
como uma cadeia - onde cada bloco contém uma referência para o bloco anterior.

Aplicações de BD As aplicações de bancos de dados podem ser classificadas em três


categorias: orientadas à transações; de suporte à decisão; e para a Internet. A descrição dos
dados e o tipo de dados diferem para cada categoria. Na categoria orientada à transação, as
transações são curtas como, por exemplo: débito e crédito. No ambiente Internet as transações
são mais longas em função da manipulação de diferentes tipos de dados, incluindo objetos
multimídia. O perfil dos profissionais muda em função das características singulares de cada
categoria. A disponibilidade das aplicações varia com a situação de negócio da empresa,
entretanto as aplicações para a Internet devem operar 24 horas por dia nos 7 dias da semana. O
ambiente de desenvolvimento de aplicações muda para cada categoria, sendo recomendado o
uso de SQL com opção nativa para orientação por objeto na Internet. A característica das
aplicações orientadas à transações é a rigidez da especificação. No lado usuário existe uma
tela que deve ser preenchida para a obtenção de resultados bem definidos. São aplicativos para
suporte a operação da empresa. As transações são pequenas e o tempo de resposta deve ser o
menor possível para aumentar a produtividade do pessoal operacional. As estruturas de SQL são
normalmente pré-definidas levando-se em consideração os resultados esperado e a melhor
performance de acesso físico. Nesta situação o usuário não necessita possuir experiência com
processamento de dados. Na área de desenvolvimento são envolvidos os programadores e o
DBA (Database Administrator). Para suporte à decisão o modelo de dados deve representar o
negócio da empresa sem levar em conta os aspectos de performance do banco de dados. Os
dados selecionados para carregar esses bancos de dados devem ser para atender aos data
warehouses e datamarts. Os usuários finais devem possuir conhecimentos de como relacionar os
dados de um dicionário de dados e o DBA deve estar familiarizado com os conceitos de data
warehouse. Nesses casos as queries são montadas de acordo com os requerimentos de
negócios imediatos. O uso de queries pré-definidas requererá um esforço muito grande para a
obtenção dos resultados. No novo cenário para os bancos de dados na Internet, os
requerimentos podem chegar através de vários protocolos e com vários tipos de dados para
atender a qualquer cliente da Internet. São transações complexas e de longa duração. O modelo
deve suportar aplicações de vídeo, imagem, áudio, voz e formatos de dados HTML e documentos
XML.

PROGRAMAÇÃO

Algoritmos um algoritmo é uma sequência finita de ações executáveis que visam obter uma
solução para um determinado tipo de problema.[1][2] Segundo Dasgupta, Papadimitriou e
Vazirani, "algoritmos são procedimentos precisos, não ambíguos, mecânicos, eficientes e
corretos". O conceito de algoritmo existe há séculos e o uso do conceito pode ser atribuído a
matemáticos gregos, por exemplo a Peneira de Eratóstenes e o algoritmo de Euclides. O conceito
de algoritmo é frequentemente ilustrado pelo exemplo de uma receita culinária, embora muitos
algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações) ou necessitar de
decisões (tais como comparações ou lógica) até que a tarefa seja completada. Um algoritmo
corretamente executado não irá resolver um problema se estiver implementado incorretamente ou
se não for apropriado ao problema. Jean Luc Chabert. Um algoritmo não representa,
necessariamente, um programa de computador,[4] e sim os passos necessários para realizar uma
tarefa. Sua implementação pode ser feita por um computador, por outro tipo de autômato ou
mesmo por um ser humano. Diferentes algoritmos podem realizar a mesma tarefa usando um
conjunto diferenciado de instruções em mais ou menos tempo, espaço ou esforço do que outros.
Tal diferença pode ser reflexo da complexidade computacional aplicada, que depende de
estruturas de dados adequadas ao algoritmo. Por exemplo, um algoritmo para se vestir pode
especificar que você vista primeiro as meias e os sapatos antes de vestir a calça enquanto outro
algoritmo especifica que você deve primeiro vestir a calça e depois as meias e os sapatos. Fica
claro que o primeiro algoritmo é mais difícil de executar que o segundo apesar de ambos levarem
ao mesmo resultado. Algorithmics. O conceito de um algoritmo foi formalizado em 1936 pela
Máquina de Turing de Alan Turing e pelo cálculo lambda de Alonzo Church, que formaram as
primeiras fundações da Ciência da computação.

Estrutura de Dados é um modo particular de armazenamento e organização de dados em um


computador de modo que possam ser usados eficientemente, facilitando sua busca e
modificação.[1][2] EDs e algoritmos são temas fundamentais da ciência da computação, sendo
utilizados nas mais diversas áreas do conhecimento e com os mais diferentes propósitos de
aplicação. Sabe-se que algoritmos manipulam dados. Quando estes dados estão organizados
(dispostos) de forma coerente, caracterizam uma forma, uma estrutura de dados. A organização e
os métodos para manipular essa estrutura é que lhe confere singularidade (e vantagens
estratégicas, como a minimização do espaço ocupado na memória RAM), além (potencialmente)
de tornar o código-fonte mais enxuto e simples.

Técnicas avançadas de projeto e análise

Duas técnicas muito usadas para resolver um problema de otimização são Programação
Dinâmica e Algoritmos Gulosos. Cada uma delas é capaz de resolver de forma eficiente
problemas com propriedades específicas, mas compartilham uma característica em comum:
ambas precisam que o problema exiba uma subestrutura ótima.

- Subestrutura Ótima: Esta propriedade do problema significa que posso construir a solução
ótima do problema a partir de soluções ótimas de partes do problema, ou seja, um problema
exibe esta estrutura se a solução ótima contém soluções ótimas de subproblemas do original. O
problema ter subestrutura ótima também implica que não preciso usar um algoritmo de
enumeração (que seria exponencial) para poder resolver o problema e que posso expressar a
solução do problema com uma recorrência. A partir desta recorrência posso desenvolver o
algoritmo. Para provar que um problema exibe esta propriedade normalmente supomos que
existe uma solução melhor para o subproblema e mostramos como esta suposição contradiz a
otimalidade do problema original.

- Programação Dinâmica: Um problema poder ser resolvido por um algoritmo de programação


dinâmica significa que ele possui subestrutura ótima mas não é possível ter uma regra que nos
diga exatamente qual escolha fazer a cada passo do algoritmo. É claro que temos uma
recorrência que nos diga as escolhas a serem feitas, mas ela envolve analisar várias soluções
ótimas de subproblemas e escolher uma delas somente. Apesar de parecer um algoritmo de
enumeração, um problema que pode ser revolvido por programação dinâmica encontra os
mesmos subproblemas várias vezes, ou seja, o número de subproblemas é pequeno e
resolvendo-os em em sequência podemos resolver o problema original mais rapidamente. Para
provarmos que um problema é de programação dinâmica precisamos provar que ele possui
estrutura ótima. Também precisamos que o número de subproblemas seja pequeno e se repita
bastante. A técnica usada para resolver o mesmo subproblema apenas uma vez é chamada
programação dinâmica e é, basicamente, armazenar os resultados dos subproblemas já
resolvidos e, na segunda vez que o problema é encontrado, recuperar seu valor. Fazendo isto
evitamos grande desperdício de trabalho, pois só resolvemos o problema uma vez.

- Algoritmos Gulosos: Um algoritmo Guloso resolve problemas que possuem subestrutura ótima
e que podemos fazer uma mesma escolha a cada passo do algoritmo e chegamos a solução
ótima global. Em um problema deste tipo, otimizo baseado em atributos locais e consigo uma
solução ótima global. Esta escolha é chamada de "Greedy Choice property" e é essencial para
um algoritmo guloso. Mostrar que essa escolha é válida significa que não preciso de nenhum
resultado futuro para saber se a solução que possuo em um passo qualquer é ótima. Para poder
provar que um problema admite como solução uma algoritmo guloso preciso provar, então, que o
problema possui subestrutura ótima e que possui a "Greedy Choice property"(algo potencialmente
difícil). Um jeito possível de se provar que posso fazer uma escolha gulosa é pegar uma solução
ótima do problema e mostrar que posso começá-la com uma escolha gulosa e que a cada passo
posso fazer essa escolha e reduzir o problema para um subproblema menor. Pela otimalidade da
subestrutura consigo uma solução ótima global.

Lógica e Técnicas de Programação

A lógica de programação é a linguagem usada para criar um programa de computador. A lógica


de programação é essencial para desenvolver programas e sistemas informáticos, pois ela define
o encadeamento lógico para esse desenvolvimento. Os passos para esse desenvolvimento são
conhecidos como algoritmo, que consiste em uma sequência lógica de instruções para que a
função seja executada.

As técnicas de programação são usadas primeiramente em aplicações relacionadas com a visão,


em 1972 por David Waltz, no sentido de interpretarem desenhos. Em 1977 são usadas por
Stallmen e Sussman para analisar os circuitos eléctricos. Em 1979 são usadas para simular
gráficos, por Borning… E é esta interdisciplinaridade que as marcou desde o princípio que as
caracteriza desde então. Estas técnicas pretendem o aperfeiçoamento dos sistemas periciais,
pretendem colocá-los em contacto com o meio, de forma a que eles passem de sistemas
fechados para sistemas abertos. Reconheçamos então duas vias de evolução importantes no
domínio das técnicas de programação, por um lado a compreensão subjectiva de conversas
(Jaime Carbonell, 1979), cuja estratégia se baseia no princípio do ‘melhor em primeiro lugar’ - que
já tinha sido adoptada por Newell e Simon em 1972- e na ‘procura heurística convencional’. Este
é um estudo muito interessante, nomeadamente para a evolução da automatização das
conversas entre criaturas artificiais nas sociedades de agentes. Uma outra via importante á a da
formalização do raciocínio não monótono (John McCarthy, 1996) usando circunscrições para os
conceitos, particularmente importantes no que toca a formalização do raciocínio humano (grande
parte do qual conjectura e não lógico). Uma das principais criticas feitas feitas à acção dos
sistemas periciais é a da sua falta de flexibilidade e o seu comportamento rígido, assim tem-se
procurado dar resposta a estas criticas através das suas investigações no domínio das
linguagens e técnicas de programação e das investigações em formas mais avançadas de
heurísticas, de forma a raciocinar sobre hipóteses e enfrentar problemas complexos. A
comunicação homem-máquina e máquina-máquina baseia-se em conhecimentos e quanto mais
eficiente for a sua representação mais êxito terá essa mesma comunicação. Técnicas de
programação também podem ser: adicionar comentários nas linhas do programa; usar espaços
em branco para melhorar a legibilidade; escolher bons nomes para as variáveis; um comando por
linha; usar identação...
Projeto e Otimização de Algoritmos

Projeto de algoritmos é um método específico para criar um processo matemático na resolução


de problemas. Projeto de algoritmos aplicado é chamado de engenharia de algoritmos. Um
projeto de algoritmos é identificado e incorporado em muitas soluções de teorias de operação de
pesquisa, tais como a programação dinâmica e divisão e conquista. Técnicas para a concepção e
implementação do projeto de algoritmo são chamadas de padrões de projeto de algoritmo,[1] tais
como o Template Method e o Decorator, e usos de estruturas de dados, e nome e listas de
classificação. Alguns usos cotidianos do projeto de algoritmo podem ser encontrados na
recuperação de processos de rastreamento, roteamento de pacotes e cache da web. Linguagens
de programação mainframe como ALGOL (para linguagem algorítmica), FORTRAN, COBOL,
PL/I, SAIL, e SNOBOL são ferramentas computacionais para a implementação de um "projeto de
algoritmos"... mas, um "projeto de algoritmos" (a/d) não é uma linguagem. um a/d pode ser um
processo escrito à mão, e.g. um conjunto de equações, uma série de processos mecânicos feito à
mão, uma peça análoga do equipamento, ou um processo digital e/ou processador.

Um dos aspectos mais importantes do projeto de algoritmos é a criação de um algoritmo que


tenha um tempo de execução eficiente, também conhecido como seu Grande-O. Etapas no
desenvolvimento de algoritmos: - Definição do problema; - Desenvolvimento de um modelo; -
Especificação do algoritmo; - Projetando um algoritmo; - Verificação da exatidão do algoritmo; -
Análise do algoritmo; -Implementação do algoritmo; - Teste de programa; - Preparação da
documentação.

Otimizar algoritmos é efetuar essa melhora em algum algoritmo pronto para resolução de um
determinado problema, mas que ainda pode ser alterado para efetuar a resolução da melhor
maneira possível ou encontrada, visto que para selecionar a melhor maneira dependemos de
termos escolhas e critérios

Programação orientada a objetos

Programação Orientada a Objetos (também conhecida pela sua sigla POO) é um modelo de
análise, projeto e programação de software baseado na composição e interação entre diversas
unidades chamadas de 'objetos'.[1] A POO é um dos 4 principais paradigmas de programação (as
outras são programação imperativa, funcional e lógica). Os objetos são operados com o conceito
de 'this' (isto) ou 'self' (si), de forma que seus métodos (muitas vezes) modifiquem os dados da
própria instância. Os programas são arquitetados através de objetos que interagem entre si.
Dentre as várias abordagens da POO, as baseadas em classes são as mais comuns: objetos são
instâncias de classes, o que em geral também define o tipo do objeto. Cada classe determina o
comportamento (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim
como o relacionamento com outros objetos.[2] A alternativa mais usual ao uso de classes é o uso
de protótipos. Neste caso, objetos são cópias de outros objetos, não instâncias de classes.
Javascript e Lua são exemplos de linguagens cuja POO é realizada por protótipos. A diferença
prática mais evidente é que na POO baseada em protótipos apenas a herança simples é
implementada pela cópia do objeto. Assim, na POO, implementa-se um conjunto de classes
passíveis de serem instanciadas como objetos, e.g. Python e C++ (ou objetos protótipos que são
copiados e alterados, e.g. JavaScript e VimL).

Em alguns contextos, o termo modelagem orientada ao objeto (MOO) é preferível ao termo POO.
De fato, o paradigma "orientado ao objeto" tem origem nos estudos da cognição e influenciou a
inteligência artificial e a linguística, dada a relevância para a abstração de conceitos do mundo
real. A MOO é considerada a melhor estratégia para diminuir o "gap semântico" (o hiato entre o
mundo real e a representação dele), e facilita a comunicação das partes interessadas no modelo
ou software (e.g. o modelador e o usuário final) na medida em que conceitos, terminologia,
símbolos, grafismo e estratégias, são, potencialmente, mais óbvios, intuitivos, naturais e exatos.

Muitas das linguagens de programação mais utilizadas atualmente (talvez a maioria) são multi-
paradigma com suporte à POO. C++, C#, VB.NET, Java, Object Pascal, Objective-C, Python,
SuperCollider, Ruby e Smalltalk são exemplos de linguagens de programação orientadas a
objetos. ActionScript, ColdFusion, Javascript, PHP (a partir da versão 4.0), Perl (a partir da versão
5), Visual Basic (a partir da versão 4), VimL (ou Vim script) são exemplos de linguagens de
programação com suporte a orientação a objetos. Vivace[3] é um exemplo de linguagem sem
suporte à POO.

Os atributos e métodos podem ser referentes a uma classe (e todas as suas instâncias) ou a uma
única instância. O vínculo dos atributos aos métodos, de forma a manter uma interface bem
definida para operação sobre os dados, e a evitar corrupção dos dados, é chamado de
encapsulamento. O encapsulamento foi responsável pelo conceito de 'ocultamento de dados',
central para a POO. O encapsulamento pode ser realizado através de convenções (em Python,
underscores demarcam métodos e atributos protegidos e privados), ou via recursos da linguagem
(em Java ou C++, um método privado só é acessado pela própria classe). Encapsulamento
incentiva o desacoplamento.

Quando um objeto contém outros objetos, diz-se que há composição de objetos. A composição
de objetos é usada para representar uma relação 'tem um', usualmente uma meronímia. Já a
herança (quase sempre suportada pelas linguagens que utilizam classes) apresenta relações 'é
um' (i.e. 'é um tipo de'), ou seja, relações de hiperonímia cujo resultado final é a árvore
taxonômica. Na herança, tipicamente todos os atributos e métodos da classe pai/mãe estão
também disponíveis na classe filha, embora seja comum que algumas características sejam
substituídas. Assim, a herança permite reúso facilitado de características e muitas vezes reflete
relações do mundo real de forma intuitiva. Ambas a 'composição de objetos' e a 'herança'
constituem hierarquias entre as classes e objetos na POO.

Herança múltipla ocorre quando uma classe é filha de mais de uma classe. Mixin pode ser
considerado um tipo especifico de herança, embora haja uma diferença crucial: a classe da qual
são herdadas as características não é considerada pai/mãe.

Polimorfismo é quando alguma rotina pode ser chamada para objetos diferentes. Por exemplo,
assuma que a função retornaCorPrincipal() possa ser chamada tanto em um objeto da classe
Imagem quanto da classe Video. O polimorfismo é um tipo de abstração que simplifica códigos
externos à hierarquia de classes e uma separação forte das responsabilidades (separation of
concerns).

Há orientações diversas para a POO, muitas de reconhecida complexidade. Por exemplo, o


princípio da composição sobre herança advoca que a composição de objetos é preferida à
herança. O princípio aberto/fechado advoca que classes e funções deve ser 'abertas p extensão
mas fechadas para modificação'. Subtipos comportamentais fortes (ou princípio de substituição
de Liskov, LSP do inglês Liskov substitution principle) são filhos que mantém todas as
características dos pais. Dito de outra forma, seja 's' tal que todas as propriedades dos objetos t
da classe T estão também presentes no objeto s da classe S, em que S é subtipo de T. Tal 's' é
chamado de subtipo comportamental forte, subtipo forte, subtipo de Liskov, e variações
semelhantes.

Fundamentos de Programação

Desenvolvimento para a Web: XHTML, HTML, CSS, JavaScript.


Desenvolvimento web é o termo utilizado para descrever o desenvolvimento de sites, na Internet
ou numa intranet. Este é o profissional que trabalha desenvolvendo websites, podendo ser um
Web Designer (Desenvolvedor do Layout), ou Web Developer(Desenvolvedor de sistemas). O
desenvolvimento refere-se a um processo de construção e testes do software especifico para a
web, com a finalidade de se obter um conjunto de programas, que satisfazem as funções
pretendidas, quer em termos de usabilidade dos usuários ou compatibilidade com outros
programas existentes. O desenvolvimento web pode variar desde simples páginas estáticas a
aplicações ricas, comércios eletrônicos ou redes sociais. Codificação no cliente (Front-End)
exemplos: CSS, HTML, XHTML, javaScript, Ajax, Flash.. Codificação no Servidor (Back-End)
exemplos: PHP, ASP, .NET, Perl, Java, J2EE, Python..Banco de Dados: Postgrsql, Mysql, SQL
Server, Firebird..

HTML (abreviação para a expressão inglesa HyperText Markup Language, que significa
Linguagem de Marcação de Hipertexto) é uma linguagem de marcação utilizada na construção de
páginas na Web. Documentos HTML podem ser interpretados por navegadores. A tecnologia é
fruto da junção entre os padrões HyTime e SGML. HyTime é um padrão para a representação
estruturada de hipermídia e conteúdo baseado em tempo. Um documento é visto como um
conjunto de eventos concorrentes dependentes de tempo (como áudio, vídeo, etc.), conectados
por hiperligações. O padrão é independente de outros padrões de processamento de texto em
geral. SGML é um padrão de formatação de textos. Não foi desenvolvido para hipertexto, mas
tornou-se conveniente para transformar documentos em hiper-objetos e para descrever as
ligações.

XHTML O XHTML, ou eXtensible Hypertext Markup Language, é uma reformulação da linguagem


de marcação HTML, baseada em XML. Combina as tags de marcação HTML com regras da XML.
Este processo de padronização provê a exibição de uma página Web neste formato por diversos
dispositivos (televisão, palm, celular, etc), além da melhoraria da acessibilidade do conteúdo. A
principal diferença entre XHTML e HTML, é que o primeiro é XML válido, enquanto o segundo
possui sintaxe própria. Ambos possuem sentido semântico. Para verificar se uma página foi
construída corretamente no padrão XHTML, existem diversos validadores; a W3C disponibiliza
um validador online

CSS Cascading Style Sheets (CSS) é um mecanismo para adicionar estilo (cores, fontes,
espaçamento, etc.) a um documento web. O código CSS pode ser aplicado diretamente nas tags
ou ficar contido dentro das tags <style>. Também é possível, em vez de colocar a formatação
dentro do documento, criar um link para um arquivo CSS que contém os estilos. Assim, quando
se quiser alterar a aparência dos documentos vinculados a este arquivo CSS, basta modifica-
lo[2]. Com a variação de atualizações dos navegadores, o suporte ao CSS pode variar. A
interpretação dos navegadores pode ser avaliada com o teste Acid2, que se tornou uma forma
base de revelar quão eficiente é o suporte de CSS, fazendo com que a nova versão em
desenvolvimento do Firefox seja totalmente compatível a ele, assim como o Opera já é. O
Doctype informado, ou a ausência dele, determina o quirks mode ou o strict mode, modificando o
modo como o CSS é interpretado e a página desenhada.

JavaScript (frequentemente abreviado como JS) é uma linguagem de programação interpretada


estruturada, de script em alto nível com tipagem dinâmica fraca e multi-paradigma (protótipos,
orientado a objeto, imperativo e, funcional).[2][3] Juntamente com HTML e CSS, o JavaScript é
uma das três principais tecnologias da World Wide Web. JavaScript permite páginas da Web
interativas e, portanto, é uma parte essencial dos aplicativos da web. A grande maioria dos sites
usa, e todos os principais navegadores têm um mecanismo JavaScript dedicado para executá-lo.
É atualmente a principal linguagem para programação client-side em navegadores web. É
também bastante utilizada do lado do servidor através de ambientes como o node.js. Como uma
linguagem multi-paradigma, o JavaScript suporta estilos de programação orientados a eventos,
funcionais e imperativos (incluindo orientado a objetos e prototype-based), apresentando recursos
como fechamentos (closures) e funções de alta ordem comumente indisponíveis em linguagens
populares como Java e C++. Possuí APIs para trabalhar com texto, matrizes, datas, expressões
regulares e o DOM, mas a linguagem em si não inclui nenhuma E/S, como instalações de rede,
armazenamento ou gráficos, contando com isso no ambiente host em que está embutido. Foi
originalmente implementada como parte dos navegadores web para que scripts pudessem ser
executados do lado do cliente e interagissem com o usuário sem a necessidade deste script
passar pelo servidor, controlando o navegador, realizando comunicação assíncrona e alterando o
conteúdo do documento exibido, porém os mecanismos JavaScript agora estão incorporados em
muitos outros tipos de software host, incluindo servidores em servidores e bancos de dados da
Web e em programas que não são da Web, como processadores de texto e PDF, e em tempo de
execução ambientes que disponibilizam JavaScript para escrever aplicativos móveis e de
desktop, incluindo widgets de área de trabalho. Os termos Vanilla JavaScript e Vanilla JS se
referem ao JavaScript não estendido por qualquer estrutura ou biblioteca adicional. Scripts
escritos em Vanilla JS são códigos JavaScript simples.[4][5] Embora existam semelhanças entre
JavaScript e Java, incluindo o nome da linguagem, a sintaxe e as respectivas bibliotecas padrão,
as duas linguagens são distintas e diferem muito no design; JavaScript foi influenciado por
linguagens de programação como Self e Scheme.[6] É baseada em ECMAScript, padronizada
pela Ecma international nas especificações ECMA-262[7] e ISO/IEC 16262.

Linguagem PHP O PHP (um acrônimo recursivo para PHP: Hypertext Preprocessor) é uma
linguagem de script open source de uso geral, muito utilizada, e especialmente adequada para o
desenvolvimento web e que pode ser embutida dentro do HTML. Em vez de muitos comandos
para mostrar HTML (como acontece com C ou Perl), as páginas PHP contém HTML em código
mesclado que faz "alguma coisa" (neste caso, mostra "Olá, eu sou um script PHP!"). O código
PHP é delimitado pelas instruções de processamento (tags) de início e fim <?php e ?> que
permitem que você entre e saia do "modo PHP". O que distingue o PHP de algo como o
JavaScript no lado do cliente é que o código é executado no servidor, gerando o HTML que é
então enviado para o navegador. O navegador recebe os resultados da execução desse script,
mas não sabe qual era o código fonte. Você pode inclusive configurar seu servidor web para
processar todos os seus arquivos HTML com o PHP, e então não há como os usuários dizerem o
que você tem na sua manga. A melhor coisa em usar o PHP é que ele é extremamente simples
para um iniciante, mas oferece muitos recursos avançados para um programador profissional.
Não tenha medo de ler a longa lista de recursos do PHP. Pode entrar com tudo, o mais rápido
que puder, e começar a escrever scripts simples em poucas horas. Apesar do desenvolvimento
do PHP ser focado nos scripts do lado do servidor, você pode fazer muito mais com ele.

C# é uma linguagem de programação, multiparadigma, de tipagem forte, desenvolvida pela


Microsoft como parte da plataforma .NET. A sua sintaxe orientada a objetos foi baseada no C++
mas inclui muitas influências de outras linguagens de programação, como Object Pascal e,
principalmente, Java. O código fonte é compilado para Common Intermediate Language (CIL) que
é interpretado pela máquina virtual Common Language Runtime (CLR). C# é uma das linguagens
projetadas para funcionar na Common Language Infrastructure da plataforma .NET Framework. O
C# é uma linguagem de programação visual dirigida por eventos e totalmente orientada a objetos.
Permite um novo grau de intercâmbio entre linguagens (componentes de software de diferentes
linguagens podem interagir). Os desenvolvedores podem empacotar até software antigo, para
trabalhar com novos programas C#. Além disso, os aplicativos C# podem interagir pela Internet
usando padrões do setor, como SOAP (protocolo de acesso a objetos simples) e XML (linguagem
de marcação extensível). O C# tem raízes em C, C++ e Java, adaptando os melhores recursos de
cada linguagem e acrescentando novas capacidades próprias. Ele fornece os recursos que são
mais importantes para os programadores, como programação orientada a objetos,strings,
elementos gráficos, componentes de interface com o usuário gráfica (GUI), tratamento de
exceções, múltiplas linhas de execução, multimídia (áudio, imagens, animação e vídeo),
processamento de arquivos, estruturas de dados pré-empacotadas, processamento de banco de
dados, redes cliente/servidor com base na Internet e na World Wide Web e computação
distribuída.
Java é uma linguagem de programação orientada a objetos desenvolvida na década de 90 por
uma equipe de programadores chefiada por James Gosling, na empresa Sun Microsystems. Em
2008 o Java foi adquirido pela empresa Oracle Corporation. Diferente das linguagens de
programação modernas, que são compiladas para código nativo, a linguagem Java é compilada
para um bytecode que é interpretado por uma máquina virtual (Java Virtual Machine, mais
conhecida pela sua abreviação JVM). A linguagem de programação Java é a linguagem
convencional da Plataforma Java, mas não é a sua única linguagem. J2ME Para programas e
jogos de computador, celular, calculadoras, ou até mesmo o rádio do carro. A linguagem Java foi
projetada tendo em vista os seguintes objetivos: - Orientação a objetos - Baseado no modelo de
Simular; - Portabilidade - Independência de plataforma - "escreva uma vez, execute em qualquer
lugar" ("write once, run anywhere"); - Recursos de Rede - Possui extensa biblioteca de rotinas
que facilitam a cooperação com protocolos TCP/IP, como HTTP e FTP; - Segurança - Pode
executar programas via rede com restrições de execução.

C++ é uma linguagem de programação compilada multi-paradigma (seu suporte inclui linguagem
imperativa, orientada a objetos e genérica) e de uso geral. Desde os anos 1990 é uma das
linguagens comerciais mais populares, sendo bastante usada também na academia por seu
grande desempenho e base de utilizadores. - C++ é desenvolvido para ser uma linguagem tipada
estaticamente e de propósito geral que é tão eficiente e portátil quanto o C. - C++ é desenvolvido
para suportar múltiplos paradigmas. - C++ é desenvolvido para fornecer ao programador
escolhas, mesmo que seja possível ao programador escolher a opção errada. - C++ é
desenvolvido para ser o mais compatível com C possível, fornecendo transições simples para
código C. - C++ evita fornecer facilidades que são específicas a certas plataformas ou a certos
grupos de desenvolvedores. - C++ não exige overhead para facilidades que não são utilizadas. -
C++ é desenvolvido para ser utilizado mesmo sem um ambiente de desenvolvimento sofisticado.

Python é uma linguagem de programação de alto nível,[4] interpretada, de script, imperativa,


orientada a objetos, funcional, de tipagem dinâmica e forte. Foi lançada por Guido van Rossum
em 1991.[1] Atualmente possui um modelo de desenvolvimento comunitário, aberto e gerenciado
pela organização sem fins lucrativos Python Software Foundation. Apesar de várias partes da
linguagem possuírem padrões e especificações formais, a linguagem como um todo não é
formalmente especificada. O padrão de facto é a implementação CPython. A linguagem foi
projetada com a filosofia de enfatizar a importância do esforço do programador sobre o esforço
computacional. Prioriza a legibilidade do código sobre a velocidade ou expressividade. Combina
uma sintaxe concisa e clara com os recursos poderosos de sua biblioteca padrão e por módulos e
frameworks desenvolvidos por terceiros. Python é uma linguagem de propósito geral de alto nível,
multiparadigma, suporta o paradigma orientado a objetos, imperativo, funcional e procedural.
Possui tipagem dinâmica e uma de suas principais características é permitir a fácil leitura do
código e exigir poucas linhas de código se comparado ao mesmo programa em outras
linguagens. Devido às suas características, ela é principalmente utilizada para processamento de
textos, dados científicos e criação de CGIs para páginas dinâmicas para a web. Foi considerada
pelo público a 3ª linguagem "mais amada", de acordo com uma pesquisa conduzida pelo site
Stack Overflow em 2018,[5] e está entre as 5 linguagens mais populares, de acordo com uma
pesquisa conduzida pela RedMonk.[6]

Objective C é uma linguagem de programação reflexiva orientada a objecto que adiciona


transmissão de mensagens no estilo Smalltalk para o C. Hoje em dia, é utilizada principalmente
no Mac OS X e GNUstep, dois ambientes baseados no padrão OpenStep e é a principal
linguagem utilizada nos aplicativos estruturais NeXTSTEP, OPENSTEP e Cocoa. Programas
genéricos em Objective-C que não façam uso destas bibliotecas também podem ser compilados
por qualquer sistema suportado pelo gcc, que inclui um compilador Objective-C. O Objective-C é
uma camada muito fina construída sobre a linguagem C e constitui-se num superconjunto estrito
de C. Ou seja, é possível compilar qualquer programa C com um compilador Objective-C. O
Objective-C deriva sua sintaxe tanto do C quanto do Smalltalk. A maior parte de sua sintaxe
(incluindo pré-processamento, expressões, declaração e chamadas de funções) foi herdada da
linguagem C, enquanto a sintaxe para os aspectos orientados a objetos foi criada para habilitar
passagem de mensagens no estilo Smalltalk.

Ruby é uma linguagem de programação interpretada multiparadigma, de tipagem dinâmica e


forte, com gerenciamento de memória automático, originalmente planejada e desenvolvida no
Japão em 1995, por Yukihiro "Matz" Matsumoto, para ser usada como linguagem de script. Matz
queria uma linguagem de script que fosse mais poderosa do que Perl, e mais orientada a objetos
do que Python.[4] Ruby suporta programação funcional, orientada a objetos, imperativa e
reflexiva. Foi inspirada principalmente por Python, Perl, Smalltalk, Eiffel, Ada e Lisp, sendo muito
similar em vários aspectos a Python.[5] Ruby está entre as 10 linguagens mais populares, de
acordo com uma pesquisa conduzida pela RedMonk. A implementação 1.8.7 padrão é escrita em
C, como uma linguagem de programação de único passe.[7] Não há qualquer especificação da
linguagem, assim a implementação original é considerada de fato uma referência. Atualmente, há
várias implementações alternativas da linguagem, incluindo YARV, JRuby, Rubinius, IronRuby,
MacRuby e HotRuby, cada qual com uma abordagem diferente, com IronRuby,[8] JRuby[9] e
MacRuby[10] fornecendo compilação JIT e, JRuby[9] e MacRuby[10] também fornecendo
compilação AOT. A partir das séries 1.9 em diante Ruby passou a utilizar por padrão a YARV (Yet
Another Ruby VirtualMachine) substituindo a Ruby MRI (Matz's Ruby Interpreter). Uma série de
características foram definidas para atender às propostas do Ruby: Todas as variáveis são
objetos, onde até os "tipos primitivos" (tais como inteiro, real, entre outros) são classes; Métodos
de geração de código em tempo real, como os "attribute accessors"; Através do RubyGems, é
possível instalar e atualizar bibliotecas com uma linha de comando, de maneira similar ao APT do
Debian Linux; Code blocks (blocos de código) passados como parâmetros para métodos; permite
a criação de clausuras; Mixins, uma forma de emular a herança múltipla; Tipagem dinâmica, mas
forte. Isso significa que todas as variáveis devem ter um tipo (fazer parte de uma classe), mas a
classe pode ser alterada dinamicamente; Ruby está disponível para diversas plataformas, como
Microsoft Windows, Linux, Solaris e Mac OS X, além de também ser executável em cima da
máquina virtual Java (através do JRuby) e da máquina virtual Microsoft .NET (através do
IronRuby).

Visual Basic é uma linguagem de programação produzida pela empresa Microsoft, e é parte
integrante do pacote Microsoft Visual Studio. Sua versão mais recente faz parte do pacote Visual
Studio .NET, voltada para aplicações .Net. Sua versão anterior fez parte do Microsoft Visual
Studio 6.0, ainda muito utilizado atualmente por aplicações legadas. Um aperfeiçoamento do
BASIC, a linguagem é dirigida por eventos (event driven), e possui também um ambiente de
desenvolvimento integrado (IDE — Integrated Development Environment) totalmente gráfico,
facilitando enormemente a construção da interface das aplicações (GUI — Graphical User
Interface).[1] O nome sabao, é Derivado de: Basic — a linguagem de Programação e Visual — o
Nome do Pacote EX: Visual studio (Visual C++, Visual C#, Visual Basic .NET). Visual Basic era
muito usada em ambientes corporativos: uma pesquisa de 2005 indicou que 62% dos
programadores usavam uma forma de Visual Basic, seguido de C++, JavaScript, C# e Java.
Atualmente foi suplantada pelo Java. Em suas primeiras versões, o Visual Basic não permitia
acesso a bancos de dados, sendo portanto voltado apenas para iniciantes, mas devido ao
sucesso entre as empresas — que faziam uso de componentes adicionais fabricados por
terceiros para acesso a dados — a linguagem logo adotou tecnologias como DAO, RDO, e ADO,
também da Microsoft, permitindo fácil acesso a bases de dados. Mais tarde foi adicionada
também a possibilidade de criação de controles ActiveX, e, com a chegada do Visual Studio
.NET, o Visual Basic — que era pseudo-orientada a objetos — tornou-se uma linguagem
totalmente orientada a objetos (OO). Existem várias linguagens derivadas, entre as quais: -
VBScript é a linguagem default (por definição) para Active Server Pages e pode ser usada no
scripting (programação) de Windows e de páginas da Internet; - Visual Basic .NET é a nova
versão do Visual Basic, que é parte integrante da plataforma Microsoft .NET. Essa versão não é
totalmente compatível com as versões anteriores, mas existe a possibilidade de converter códigos
antigos, que após uma revisão podem ser usados no Visual Basic .NET. Para fins de
comparação, essa linguagem usa o paradigma de Orientação a Objeto e você encontrará muita
semelhança com o Java; - Visual Basic for Applications (VBA) permite a criação de macros, e
está integrado em todos os produtos da família de produtos Microsoft Office, e também em outros
produtos de terceiros tais como Visio (agora pertencente à Microsoft) e WordPerfect Office 2002.

Delphi O Delphi é muito utilizado no desenvolvimento de aplicações desktop, aplicações


multicamadas e cliente/servidor, compatível com os bancos de dados mais conhecidos do
mercado. O Delphi pode ser utilizado para diversos tipos de desenvolvimento de projeto,
abrangendo desde Serviços a Aplicações Web e CTI.

Programação java em arquitetura J2EE Podemos definir J2EE como a plataforma Java para
desenvolvimento e execução de aplicações servidoras, com capacidade de suporte ao
desenvolvimento de aplicações robustas e escaláveis. Consiste em um conjunto de serviços,
interfaces de programação de aplicação (APIs) e protocolos, que oferecem a funcionalidade para
o desenvolvimento de aplicações de multicamadas, baseadas na Web. A plataforma J2EE
estende a linguagem Java através de padrões simples e unificados em aplicações distribuídas
através do modelo baseado em componentes. Características como portabilidade e
interoperabilidade fizeram com que a tecnologia se difundisse e se consolidasse pela industria de
TI. Vale lembrar que Java permite o uso de qualquer sistema operacional, seja ele Windows, Unix
ou Linux, ou mesmo plataforma Mainframe. O foco é simplificar o desenvolvimento de soluções
no âmbito enterprise através de padrões, serviços e, principalmente, componentes modulares.
Estes componentes, unidades de software em nível de aplicação com suporte a um contêiner,
são configuráveis durante o desenvolvimento e incorporam um modelo de programação de
acordo com o "contrato de componente" com seu contêiner. Isto é, um contêiner, oferece serviços
de gerenciamento de ciclo de vida, segurança, distribuição e runtime para seus componentes. A
plataforma define, segunda a especificação da Sun, empresa criadora da linguagem Java, os
seguintes tipos de contêiner: - EJB (Enterprise Java Beans): um dos contêiner mais conhecidos
da arquitetura, especifica um ambiente de runtime para enterprise beans como serviços de
segurança, concorrência, gerenciamento de ciclo de vida, transação, entre outros serviços. Os
beans rodam no servidor J2EE. - WEB: trata-se da implementação de contrato de componente da
Web com a arquitetura J2EE, fornecendo ambiente de runtime para os componentes do tipo web
que incluem desde segurança até gerenciamento de ciclo de vida e transação. Inclui Servlets
(classes Java que podem ser carregadas dinamicamente e executar sob um servidor web)
disponibilizadas por serviços de rede referentes aos pedidos e respostas enviados, com uso
obrigatório do protocolo HTTP. E também engloba JSPs (Java Server Pages - tecnologia Web
que utiliza, por exemplo, linguagens de scripting e objetos Java no servidor para retorno dinâmico
a um cliente). - Applet: contêiner Web que gerencia a execução de applets. - Cliente da aplicação:
Um contêiner que aceita e gerencia a execução de componentes do cliente da aplicação.
Algumas das principais APIs e suas funcionalidades da versão mais atual de J2EE (1.4) são:
Enterprise JavaBeans (componentes do lado servidor); Java Servlet / JavaServer Pages
(webserver que pode usar qualquer outra api); Java Message Service API (JMS) (acesso
padronizado de serviço de mensagens); Java Transaction API (JTA) (gerenciamento de
aplicações distribuídas); JavaMail API / JavaBeans Activation Framework (JAF) (envio e
recebimento de email); J2EE Connector Architecture (JCA) (padronizar conexões entre Java e
ERPs); JDBC (APi de acesso a banco de dados);

Modelos de Linguagem de Programação

O modelo Imperativo é baseado na perspectiva do computador: a execução sequencial de


comandos e o uso de dados são conceitos baseados no modo como os computadores executam
programas no nível de linguagem de máquina. Ø Este modelo é o predominante. Ø As linguagens
imperativas são de fácil tradução. Ø Exemplos: FORTRAN, COBOL, ALGOL 60, APL, BASIC,
PL/I, SIMULA 67, PASCAL, C e ADA.
O modelo Funcional focaliza o processo de resolução do problema. A visão funcional resulta num
programa que descreve as operações (funções) que devem ser efetuadas para resolver o
problema. Ø Baseia-se no conceito matemático de função, que é um mapeamento de um
conjunto A num conjunto B. Ø Exemplos: ML, LISP, HASKELL.

O modelo Lógico está relacionado à perspectiva da pessoa: ela encara o problema de uma
perspectiva lógica. Ø Um programa lógico é equivalente à descrição do problema expressa de
maneira formal, similar à maneira que o ser humano raciocinaria sobre ele. Ø Escrever um
programa é como provar um teorema. Ø Exemplo: PROLOG.

O modelo Orientado a Objeto focaliza mais o problema, baseado na união dos conceitos de
dados e operações. Ø Um programa OO é equivalente a objetos que mandam mensagens entre
si. Os objetos do programa equivalem aos objetos da vida real (problema). Ø A primeira
linguagem OO foi Simula, desenvolvida em 1966 e depois refinada em Smalltalk. Existem
algumas linguagens híbridas: Modelo Imperativo mais características de Orientação a Objetos
(OO), assim como C++. Ø Exemplos: Simula, Smalltalk, Object Pascal, C++, Java, Visual Basic,
C#.

Processamento de Imagens O processamento de imagens é a manipulação e análise de dados


que se faz através de algoritmos com o objetivo de criar, processar, transmitir e exibir imagens
digitais. Há várias finalidades para o processamento de imagens, como por exemplo converter
sinais a partir de um sensor de imagem para imagens digitais. Profissionais de diversas áreas –
fotógrafos por exemplo – dependem de softwares que executem processamento de imagens para
melhorar a exposição, remover ruídos, otimizar imagens e prepará-las para impressão. Em
conjunto com a técnica de visão computacional, o processamento de imagens permite adquirir
“insights” de dados de imagens e vídeos e a partir daí desenvolver algoritmos para as mais
diversas finalidades. Mas a técnica vai bem além do tratamento puro e simples de imagens. O
processamento de imagens é um dos primeiros estágios para o processamento de dados como
aprendizagem de máquina (machine learning) ou reconhecimento de padrões. Desta forma, é
possível extrair dados referentes à dimensão, escala e número de objetos em uma cena, por
exemplo. Dentre as aplicações práticas, podemos citar segmentação de imagens, segmentação
de cores com imagens aquisitadas ao vivo, detecção de bordas, detecção de características e
classificação de imagens. As técnicas mais eficazes para o processamento de imagens digitais
compreendem não somente o uso de algoritmos mas também de softwares que ofereçam um
ambiente ideal e condições adequadas para análise de dados, visualização e desenvolvimento de
algoritmos.

ENGENHARIA DE SOFTWARE E SISTEMAS DE INFORMAÇÃO

Engenharia de software é uma área da computação voltada à especificação, desenvolvimento,


manutenção e criação de software, com a aplicação de tecnologias e práticas de gerência de
projetos e outras disciplinas, visando organização, produtividade e qualidade.[2] Atualmente,
essas tecnologias e práticas englobam linguagens de programação, banco de dados,
ferramentas, plataformas, bibliotecas, padrões de projeto de software, processo de software e
qualidade de software. Além disso, a engenharia de software deve oferecer mecanismos para se
planejar e gerenciar o processo de desenvolvimento de um sistema computacional de qualidade e
que atenda as necessidades de um requisitante 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. A área que estuda e avalia os processos de engenharia de software,
propondo a evolução dos processos, ferramentas e métodos de suporte a engenharia de software
é a Engenharia de Software Experimental.
Sistemas de Informação é a expressão utilizada para descrever um Sistema seja ele
automatizado (que pode ser denominado como Sistema Informacional Computadorizado), seja
manual, que abrange pessoas, máquinas e/ou métodos organizados para coletar,
armazenar,processar, transmitir e disseminar dados que representam informação para o usuário
e/ou cliente. Informações são dados oferecidos de uma forma significativa e útil para os
indivíduos. Dados são correntes de fatos brutos que importam eventos que estão ocorrendo nas
organizações ou no ambiente físico, antes de terem sido organizados e arranjados de uma forma
que as pessoas possam entendê-los e usá-los. Todo Sistema de Informação que manipula dados
e gera informação, usando ou não recursos de tecnologia em computadores, pode ser
genericamente considerado como um sistema de informação. Por exemplo, o sistema de
informação organizacional pode ser conceituado como a organização e seus vários subsistemas
internos, contemplando ainda o meio ambiente externo. Segundo Turban, uma infra-estrutura de
informação consiste em instalações físicas, serviços e gerenciamento que suportam todos os
recursos computacionais existentes em uma organização. Existem cinco componentes principais
na infra-estrutura: hardware do computador, software de propósito geral, redes e instalações de
comunicação (incluindo internet), banco de dados e o pessoal do gerenciamento da informação. A
infra-estrutura abrange esses recursos e a sua integração, operação, documentação, manutenção
e gerenciamento. A infra-estrutura também nos informa como recursos computacionais
específicos são organizados, operacionalizados e administrados. Para Laudon um sistema de
informação pode ser definido como um conjunto de componentes inter-relacionados trabalhando
juntos para coletar, recuperar, processar, armazenar e distribuir informações, com a finalidade de
facilitar o planejamento, o controle, a coordenação, a análise e o processo decisório em
organizações.[4] De acordo com Turban; Maclean; Wetheber, o sistema de informação coleta,
processa, armazena, analisa e dissemina informações com um determinado objetivo dentro de
um contexto e como qualquer outro sistema inclui inputs (dados, instruções) e outputs (relatórios,
cálculos). O sistema opera dentro de um ambiente, não necessariamente computadorizado,
mesmo que atualmente a maioria seja, processa os inputs, que são enviados para os usuários e
outros sistemas. Os sistemas de informações podem ser classificados a princípio como formais
ou informais. Os sistemas de informação formais incluem processo pré-definidos, entrada e
saídas padronizadas e definições fixas. Quantos aos informais, estes assumem diversas formas,
que vão desde uma rede de comunicação informal em uma empresa, até um grupo de amigos
que troca correspondência eletronicamente.

Arquitetura de Software

A arquitetura de software de um sistema consiste na definição dos componentes de software,


suas propriedades externas, e seus relacionamentos com outros softwares. O termo também se
refere à documentação da arquitetura de software do sistema. A documentação da arquitetura do
software facilita: a comunicação entre os stakeholders, registra as decisões iniciais acerca do
projeto de alto-nível, e permite o reúso do projeto dos componentes e padrões entre projetos. A
arquitetura de software é normalmente organizada em visões,[4] as quais são análogas aos
diferentes tipos de plantas utilizadas no estabelecimento da arquitetura. Na Ontologia
estabelecida pela ANSI/IEEE 1471-2000, visões são instâncias de pontos de vista, onde cada
ponto de vista existe para descrever a arquitetura na perspectiva de um conjunto de stakeholders
e seus consortes. Algumas possíveis visões são: Visão funcional/lógica; Visão de código; Visão
de desenvolvimento/estrutural; Visão de concorrência/processo/thread; Visão física/evolutiva;
Visão de ação do usuário/retorno. Exemplos de arquitetura de software: Cliente-Servidor; MVC;
Plugin ...

Processos e modelos de processos

Processo de Software Conjunto de atividades que leva ao desenvolvimento do produto software


Um processo define Quem faz, o que faz e quando fazer Nem sempre diz como fazer Não existe
um processo ideal Organizações desenvolvem seus próprios processos.
Modelos de Processos Descrição simplificada do processo Definem As atividades para o
desenvolvimento do software Especificam os produtos de cada atividade Indicam os papéis das
pessoas envolvidas Vantagens Oferecem um roteiro útil para o trabalho de engenharia de
software Mas, nenhum modelo de processo é perfeito Outras vantagens Padronização dos
artefatos Melhor comunicação da equipe Menos treinamento de pessoal Exemplos de Modelos
de Processo Modelos mais gerais Modelo Cascata Desenvolvimento Incremental Eng. de
Software orientada a Reuso Os modelos mais gerais não são mutuamente exclusivos
Organizações tendem a combinar partes de diferentes modelos.

Modelos de Processos Gerais: Modelo cascata Atividades sequenciais Uma fase deve ser
terminada para a outra começar Raramente ocorre na prática. Vantagens: Documentação rígida
(idealmente completa) em cada atividade Reflete abordagens adotadas em outras engenharias
Aderência a outros modelos de processo Pode ser combinado a outros modelos. Desvantagens:
Projetos reais raramente seguem um fluxo sequencial Em geral, é difícil para o cliente
estabelecer todos os requisitos à priori Difícil se adequar a mudanças inevitáveis de requisitos
Uma versão executável somente ficará pronta na fase final do projeto. Quando Aplicar: Sistemas
críticos Quando os requisitos são bem compreendidos Quando há pouca probabilidade dos
requisitos mudarem. Desenvolvimento Incremental: Atividades são intercaladas Objetivo: dar
feedback rápido ao cliente. Vantagens: Permite trabalhar com o cliente o entendimento dos
requisitos Pode-se começar o sistema pelas partes melhor entendidas Feedback rápido ao
cliente. Desvantagens: O processo pode não ser muito claro A gerência do software é
complicada O sistema não é completamente especificado à priori O produto final é
frequentemente mal estruturado A mudança contínua tende a corromper a modularidade do
sistema. Os problemas do desenvolvimento incremental se tornam mais graves em sistemas
críticos. Baseado em Reuso: Baseia-se na existência de um número significativo de
componentes reusáveis O processo se concentra na integração dos componentes reusáveis
Inspirado na analogia com componentes de hardware Exemplo: componentes elétricos /
eletrônicos. Representação: Baseia-se na existência de um número significativo de componentes
reusáveis O processo se concentra na integração dos componentes. Alinhar componentes aos
requisitos: Análise de Componentes Dada uma especificação, encontrar componentes que a
atendam Alteração nos Requisitos Se possível, os requisitos são adaptados aos componentes
existentes. Integração dos componentes: Projeto do Sistema com Reuso Se necessário, projeta-
se novos componentes reusáveis Desenvolvimento e Integração Desenvolvimento de novos
componentes Integração de todos os componentes. Vantagens: Reduz a quantidade de software
a ser desenvolvido Espera-se reduzir os custos e os riscos Espera-se uma entrega do produto
mais rápida ao cliente. Desvantagens: Pode-se desenvolver um produto que não atenda aos
requisitos do cliente Pode ser mais difícil evoluir os sistemas Componentes de terceiros A
gerência de versões dos componentes pode ser complexa. Qual modelo de processo usar?
Sistemas Críticos Sugerido um modelo de processo mais estruturado / rigoroso como o Modelo
Cascata Sistemas de Negócios (requisitos mudam com frequência) Sugerido um modelo de
processo ágil e flexível como o Desenvolvimento Incremental ou o Baseado em Reuso.

Planejamento e Gerenciamento de Projetos

Gerenciamento de Projetos: define gerenciamento de projetos como sendo um esforço


temporário empreendido para criar um produto, serviço ou resultado único. Destaca também que
Gerenciamento de projetos é a aplicação de conhecimentos, habilidades, ferramentas e técnicas
às atividades do projeto a fim de cumprir os seus requisitos. E que o gerenciamento de projetos é
realizado através da aplicação e integração apropriadas dos processos de gerenciamento de
projetos identificados para o projeto. Na abordagem tradicional, distinguem-se cinco grupos de
processos no desenvolvimento de um projeto: - Iniciação; - Planejamento; - Execução; -
Monitoramento e controle; - Encerramento.
As dez Áreas de Conhecimento em Gerenciamento de Projetos, são (PMI, 2017): 1)
Gerenciamento da Integração do Projeto; 2) Gerenciamento do Escopo do Projeto; 3)
Gerenciamento do Cronograma do Projeto; 4) Gerenciamento dos Custos do Projeto; 5)
Gerenciamento da Qualidade do Projeto; 6) Gerenciamento dos Recursos do Projeto; 7)
Gerenciamento da Comunicação do Projeto; 8) Gerenciamento dos Riscos do Projeto; 9)
Gerenciamento das Aquisições do Projeto; 10) Gerenciamento das Partes Interessadas do
Projeto.

Descrição e importância das áreas de conhecimento para o gerenciamento de projetos (PMI,


2017).

1) Gerenciamento da Integração do Projeto: O gerenciamento da Integração está ligado


diretamente à estrutura do projeto e ao seu desenvolvimento. O seu principal foco está no
processo de identificação, suas combinações, suas definições e toda parte da estrutura. Fornece
uma visão ampla para o seu desenvolvimento, que envolve: - Desenvolver o termo de abertura do
projeto.; - Desenvolver o plano de gerenciamento do projeto; - Orientar e gerenciar o trabalho do
projeto; - Monitorar e controlar o trabalho do projeto; - Realizar o controle integrado de mudança; -
Encerramento do projeto ou fase. “Os processos de gerenciamento de projetos são geralmente
apresentados como distintos e com interfaces definidas, embora, na prática, eles se sobrepõem e
interagem de maneira que não podem ser completamente detalhadas no Guia PMBOK® “(PMI,
2013).

2) Gerenciamento do Escopo do Projeto: Está relacionado ao que falta dentro da estrutura do


projeto, o que tem incluso e quais são as suas necessidades. São as exigências especificadas
para o resultado fim, ou seja, o que se pretende, e o que não se pretende realizar. A qualidade do
produto final pode ser tratada como um componente do escopo. Normalmente a quantidade de
tempo empregada em cada tarefa é determinante para a qualidade total do projeto. Essas
variáveis podem ser dadas por clientes externos ou internos. A definição dos valores das
variáveis remanescentes fica a cargo do gerente do projeto, idealmente baseada em sólidas
técnicas de estimativa. Os resultados finais devem ser acordados em um processo de negociação
entre a gerência do projeto e o cliente. Geralmente, os valores em termos de tempo, custo,
qualidade e escopo são definidos por contrato. O Custo para desenvolver um projeto depende de
diversas condições iniciais disponíveis para o desenvolvimento de cada projeto tais como: taxas
labor, taxas materiais, gerência de risco, planta (edifícios, máquinas, etc), equipamentos e lucro.

3) Gerenciamento do Cronograma do Projeto: O tempo para concluir o projeto, incluindo todo o


processo de planejamento, definição, desenvolvimento e cronograma, é gerenciado por esta área
de conhecimento. O tempo requerido para terminar os componentes do projeto é normalmente
alterado quando se pretende baixar o tempo para execução de cada tarefa que contribui
diretamente à conclusão de cada componente. Ao executar tarefas usando a gerência de projeto,
é importante dividir o trabalho em diversas partes menores, de modo que seja fácil a definição
das condições de criticidade e de folgas.

4) Gerenciamento dos Custos do Projeto: O gerenciamento dos custos do projeto inclui os


processos envolvidos em planejamento, estimativas, orçamentos, financiamentos, gerenciamento
e controle dos custos, de modo que o projeto possa ser terminado dentro do orçamento aprovado.

5) Gerenciamento da Qualidade do Projeto: O gerenciamento da qualidade do projeto inclui os


processos e as atividades da organização executora que determinam as políticas de qualidade,
os objetivos e as responsabilidades, de modo que o projeto satisfaça às necessidades para as
quais foi empreendido.
6) Gerenciamento dos Recursos do Projeto: O gerenciamento dos recursos do projeto inclui os
processos que organizam, gerenciam e guiam a equipe do projeto, bem como a identificação e
aquisição de outros recursos que serão necessários durante o projeto, como materiais,
equipamentos, instalações, suprimentos etc.

7) Gerenciamento da Comunicação do Projeto: O gerenciamento das comunicações do projeto


inclui os processos necessários para assegurar que as informações do projeto sejam planejadas,
coletadas, criadas, distribuídas, armazenadas, recuperadas, gerenciadas, controladas,
monitoradas e finalmente dispostas de maneira oportuna e apropriada.

8) Gerenciamento dos Riscos do Projeto: O Gerenciamento dos riscos do projeto inclui os


processos de planejamento, identificação, análise, planejamento de respostas e controle de riscos
de um projeto.

9) Gerenciamento das Aquisições do Projeto: O gerenciamento das aquisições do projeto inclui os


processos necessários para comprar ou adquirir produtos, serviços ou resultados externos à
equipe do projeto. A organização pode ser tanto o comprador quanto o vendedor dos produtos,
serviços ou resultados de um projeto.

10) Gerenciamento das Partes Interessadas do Projeto: O gerenciamento das partes interessadas
também se concentra na comunicação contínua com as partes interessadas para entender suas
necessidades e expectativas, abordando as questões conforme elas ocorrem, gerenciando os
interesses conflitantes e incentivando o comprometimento das partes interessadas com as
decisões e atividades do projeto.

Planejamento: dentro da gestão de projetos é o processo para quantificar o tempo e orçamento


que um projeto custará. A finalidade do planejamento do projeto é criar um plano do projeto que
um gestor de projeto possa usar para acompanhar o progresso de sua equipe.

Modelagem

Modelagem de software é a atividade de construir modelos que expliquem as características ou o


comportamento de um software ou de um sistema de software. Na construção do software os
modelos podem ser usados na identificação das características e funcionalidades que o software
deverá prover (análise de requisitos), e no planejamento de sua construção. Frequentemente a
modelagem de software usa algum tipo de notação gráfica e são apoiados pelo uso de
Ferramentas CASE. A modelagem de software normalmente implica a construção de modelos
gráficos que simbolizam os artefatos dos componentes de software utilizados e os seus inter-
relacionamentos. Uma forma comum de modelagem de programas procedurais (não orientados a
objeto) é através de fluxogramas, enquanto que a modelagem de programas orientados a objeto
normalmente usam a linguagem gráfica UML. Para a modelagem de processos de negócios
(BPM) existe uma ferramenta específica denominada BPMN (Business Process Modeling
Notation).

A UML - Linguagem de Modelagem Unificada (do inglês, UML - Unified Modeling Language) é
uma linguagem-padrão para a elaboração da estrutura de projetos de software. Ela poderá ser
empregada para a visualização, a especificação, a construção e a documentação de artefatos
que façam uso de sistemas complexos de software. Em outras palavras, na área de Engenharia
de Software, a UML é uma linguagem de modelagem que permite representar um sistema de
forma padronizada (com intuito de facilitar a compreensão pré-implementação). A UML é
adequada para a modelagem de sistemas, cuja abrangência poderá incluir desde sistemas de
informação corporativos a serem distribuídos a aplicações baseadas na Web e até sistemas
complexos embutidos de tempo real. É uma linguagem muito expressiva, abrangendo todas as
visões necessárias ao desenvolvimento e implantação desses sistemas. A UML (Unified Modeling
Language) não é uma metodologia de desenvolvimento, o que significa que ela não diz para você
o que fazer primeiro e em seguida ou como projetar seu sistema, mas ela lhe auxilia a visualizar
seu desenho e a comunicação entre os objetos (e em certos casos a identificação dos
processos). Basicamente, a UML permite que desenvolvedores visualizem os produtos de seus
trabalhos em diagramas padronizados. Junto com uma notação gráfica, a UML também
especifica significados, isto é, semântica. É uma notação independente de processos, embora o
RUP (Rational Unified Process) tenha sido especificamente desenvolvido utilizando a UML. É
importante distinguir entre um modelo UML e um diagrama[2] (ou conjunto de diagramas) de
UML. O último é uma representação gráfica da informação do primeiro, mas o primeiro pode
existir independentemente. O XMI (XML Metadata Interchange) na sua versão corrente
disponibiliza troca de modelos mas não de diagramas. Os objetivos da UML são: especificação,
documentação, estruturação para sub-visualização e maior visualização lógica do
desenvolvimento completo de um sistema de informação. A UML pode ser vista em 5 visões:

Diagrama de Caso de Uso: Representa o conjunto de comportamentos de alto nível que o


sistema deve executar para um determinado ator. É o diagrama mais simples, e não há
necessidade de grandes detalhamentos.

Diagrama de Classes: Representa uma coleção de classes e seus inter-relacionamentos.

Diagrama de objetos: Representa um retrato, em tempo de execução, dos objetos do software e


seus inter-relacionamentos.

Diagrama de Colaboração: Representa uma coleção de objetos que trabalham em conjunto


para atender algum comportamento do sistema.

Diagrama de Sequência: Representa uma perspectiva, orientada por tempo, da colaboração


entre os objetos.

Diagrama de Estados: Representa um conjunto de estados que um objeto pode estar e os


“gatilhos” que estimulam a transição do objeto de um estado para outro.

Diagrama de Componentes: Representa uma coleção de componentes de software e seus inter-


relacionamentos.

Diagrama de Depuração: Representa uma coleção de componentes e mostra como esses são
distribuídos em um ou vários nós de hardware.
Diagrama de Pacotes: Representa uma coleção de outros elementos de modelagem e
diagramas.

Processos de desenvolvimento de softwares

Um processo de desenvolvimento de software pode ser visto como um conjunto de atividades


organizadas, usadas para definir, desenvolver, testar e manter um software. A seguir, alguns
objetivos do processo de desenvolvimento: - Definição das atividades a serem executadas; -
Quando determinada atividade deve ser executada; - Pessoa ou grupo a executar tais atividades;
- Padronização no processo de desenvolvimento. - Desenvolvimento de Software. Existem
diversos processos de desenvolvimento de software, no entanto há algumas atividades básicas
comuns à grande parte dos processos existentes, nesse artigo será descrito algumas dessas
atividades, como: Levantamento de requisitos; Análise de Requisitos; Projeto; Implementação;
Testes; Implantação.

Levantamento de Requisitos: Esta atividade tem como objetivo, compreender o problema,


dando aos desenvolvedores e usuários, a mesma visão do que deve ser construído para
resolução do problema. Desenvolvedores e clientes, em conjunto, buscam levantar e priorizar as
necessidades dos futuros usuários do software (necessidades essas denominadas como
requisitos). O Levantamento de Requisitos é a etapa mais importante, no que diz respeito ao
retorno de investimentos no projeto. Vários projetos são abandonados pelo baixo levantamento
de requisitos, ou seja, membros da equipe não disponibilizaram tempo suficiente para essa fase
do projeto, em compreender as necessidades dos clientes em relação ao sistema a ser
desenvolvido. E como um sistema de informações geralmente é utilizado para automatizar
processos de negócio em uma organização, esses processos da organização devem ser bem
compreendidos para que o restante das atividades do processo de desenvolvimento flua de
acordo com as reais necessidades do cliente.

Análise de Requisitos: Esta etapa, também chamada de especificação de requisitos, é onde os


desenvolvedores fazem um estudo detalhado dos dados levantados na atividade anterior. De
onde são construídos modelos a fim de representar o sistema de software a ser desenvolvido. O
interesse nessa atividade é criar uma estratégia de solução, sem se preocupar como essa
estratégia será realizada, ou seja, utilizar as necessidades dos clientes, depois de compreendido
o problema, para resolução do problema solicitado. Assim é necessário definir o que o sistema
deve fazer, antes de definir como o sistema irá fazer. O que acontece com freqüência, é quando
as equipes de desenvolvimento partem para a solução do problema do software, sem antes ter
definido completamente o problema em questão. Nesta fase deve-se então realizar a validação e
verificação dos modelos construídos, antes de partir para solução do problema.

Validação: tem por objetivo, assegurar que o sistema de software está atendendo às reais
necessidades do cliente;

Verificação: verifica se os modelos construídos na análise estão em conformidade com os


requisitos do cliente.

Projeto Nesta fase é que deve ser considerado, como o sistema funcionará internamente, para
que os requisitos do cliente possam ser atendidos. Alguns aspectos devem ser considerados
nessa fase de projeto do sistema, como: arquitetura do sistema, linguagem de programação
utilizada, Sistema Gerenciador de Banco de Dados (SGBD) utilizado, padrão de interface gráfica,
entre outros. No projeto é gerada uma descrição computacional, mencionando o que o software
deve fazer, e deve ser coerente com a descrição realizada na fase de análise de requisitos. O
projeto possui duas atividades básicas: projeto da arquitetura (ou projeto de alto nível), e projeto
detalhado (ou projeto de baixo nível). Em um processo de desenvolvimento orientado a objetos, o
projeto da arquitetura normalmente é realizado por um arquiteto de software. O projeto da
arquitetura visa distribuir as classes de objetos relacionados do sistema em subsistemas e seus
componentes, distribuindo também esses componentes pelos recursos de hardware disponíveis.
Já no projeto detalhado, são modeladas as relações de cada módulo com o objetivo de realizar as
funcionalidades do módulo. Além de desenvolver o projeto de interface com o usuário e o projeto
de banco de dados.

Implementação Nessa etapa, o sistema é codificado a partir da descrição computacional da fase


de projeto em uma outra linguagem, onde se torna possível a compilação e geração do código-
executável para o desenvolvimento software. Em um processo de desenvolvimento orientado a
objetos, a implementação se dá, definindo as classes de objetos do sistema em questão, fazendo
uso de linguagens de programação como, por exemplo: Delphi (Object Pascal), C++, Java, etc.
Pode-se também utilizar na implementação ferramentas de software e bibliotecas de classes
preexistentes para agilizar a atividade, como também o uso de ferramentas CASE, que
dinamizam o processo de desenvolvimento, nas várias atividades, onde inclui-se geração de
código-fonte, documentação, etc.

Testes Diversas atividades de testes são executadas a fim de se validar o produto de software,
testando cada funcionalidade de cada módulo, buscando, levando em consideração a
especificação feita na fase de projeto. Onde o principal resultado é o relatório de testes, que
contém as informações relevantes sobre erros encontrados no sistema, e seu comportamento em
vários aspectos. Ao final dessa atividade, os diversos módulos do sistema são integrados,
resultando no produto de software.

Implantação Por fim a implantação compreende a instalação do software no ambiente do


usuário. O que inclui os manuais do sistema, importação dos dados para o novo sistema e
treinamento dos usuários para o uso correto e adequado do sistema. Em alguns casos quando da
existência de um software anterior, também é realizada a migração de dados anteriores desse
software.

Monitoramento e Controle.

Os processos de monitoramento e controle de projetos são vistos por vários frameworks como
processos altamente relacionados, na medida em que o monitoramento consiste na “coleta,
medição e distribuição das informações de desempenho e a avaliação das medições e
tendências para efetuar melhorias no processo” (PMI, 2013, p. 88), ações que passam a
fazer sentido apenas quando ligadas ao processo de controle. Este “inclui a determinação
de ações corretivas ou preventivas ou o replanejamento e acompanhamento dos planos de
ação para definir se as ações tomadas resolveram a questão de desempenho” (Ibid., p. 88).

São dez as atividades relacionadas ao monitoramento e controle de projetos no COBIT 5


(ISACA, 2012). Algumas delas estão claramente relacionadas ao monitoramento dos
projetos, como, por exemplo, “estabelecer um conjunto de critérios de avaliação para projetos,
incluindo escopo, prazo, qualidade, custo e risco” ou “comparar a performance do projeto aos
critérios de performance estabelecidos, analisar os desvios e avaliar os efeitos” (Ibid., p. 126).
Outras, por sua vez, remetem aos processos de controle, como “recomendar e monitorar ação
corretiva, quando necessária, em consonância com o framework de governança de projetos e
programas” (Ibid., p. 126). A visão do PMI (2013)sobre os processos de controle de projetos
destina áreas específicas para o controle de aspectos referentes a cronograma, custos,
escopo, qualidade, riscos e envolvimento dos stakeholders. O CMMI Development, por
sua vez, apresenta uma maior especificidade e traz uma abordagem que considera
aspectos típicos das atividades de desenvolvimento de software. Assim, o CMMI (Software
Engineering Institute [SEI], 2011) define uma atividade de monitoramento de gerenciamento
de dados, além de apresentar atividades específicas relacionadas ao monitoramento de
compromissos assumidos, de riscos do projeto, de envolvimento dos stakeholderse de
parâmetros de planejamento. O controle dos projetos no CMMI é definido a partir das
seguintes atividades específicas (SEI, 2011): análise de problemas, tomada de ações
corretivas e gerenciamento das ações corretivas.

Modelagem de Sistemas.

Modelagem de sistema é o processo de desenvolvimento de modelos abstratos de um sistema,


em que cada modelo apresenta uma visão ou perspectiva, diferente do sistema. Os modelos são
usados durante o processo de engenharia de requisitos para ajudar a extrair os requisitos do
sistema durante o processo de projeto, são usados para descrever o sistema para os engenheiros
que o implementam; e após isso, são usados para documentar a estrutura e a operação do
sistema. Pode-se desenvolver modelos do sistema existente e do sistema a ser desenvolvido.
O aspecto mais importante de um modelo de sistema é que ele deixa de fora os detalhes. O
modelo é uma abstração do sistema a ser estudado, e não uma representação alternativa dele.
A partir de perspectivas diferentes, você pode desenvolver diversos modelos para representar o
sistema. Por exemplo: - Perspectiva comportamental: Modela-se o comportamento dinâmico do
sistema, como ele reage aos eventos; - Perspectiva Estrutural: modela-se a organização de um
sistema ou a estrutura dos dados processados pelo sistema; - Perspectiva de Interação: Modela-
se as interações entre um sistema e seu ambiente, ou entre os componentes do sistema; -
Perspectiva Externa: Modela-se o contexto ou o ambiente do sistema. Diagramas definidos em
UML (Unified Modeling Language) (BOOCH et. Al., 2005; RUMBAUGH et al., 2004) se tornou
uma linguagem de modelagem padrão para modelagem orientada a objetos. A UML apoia a
criação de muitos e diferentes modelos de sistema. Ao desenvolver modelos de sistema, muitas
vezes você pode ser flexível no uso da notação gráfica. O detalhe e o rigor de um modelo
dependem de como você pretende usá-lo. Os modelos gráficos são comumente usados de três
formas: Como forma de facilitar a discussão sobre um sistema existente ou proposto; Como forma
de documentar um sistema existente; Como uma descrição detalhada de um sistema, que pode
ser usada para gerar uma implementação do sistema.

Sistemas de Informação

Sistemas de Informação para cada nível organizacional: Sistemas de Processamento de


Transações (SPTs) sistemas integrados que atendem o nível operacional, são computadorizados,
realizando transações rotineiras como folha de pagamento, pedidos etc., Onde os recursos são
predefinidos e estruturados, è através deles que os gerentes monitoram operações internas e
externas a empresa, são críticos, pois se deixarem de funcionar podem causar danos a outras
empresas a e a própria. Atendem 5 categorias funcionais: vendas/marketing,
fabricação/produção, finanças/contabilidade e recursos humanos.

Sistemas de Trabalhadores de Conhecimento (STCs) e Sistemas de automação de


escritório: Atendem necessidades do nível de conhecimento envolvendo trabalhadores de
conhecimento, pessoas com formação universitária como engenheiros e cientistas e
trabalhadores de dados que possuem educação inferior como secretárias, contadores, arquivistas
etc. Se diferenciam, pois trabalhadores de conhecimento criam informações e trabalhadores de
dados manipulam , usam informações prontas, a produtividade destes é aumentada com o uso
dos Sistemas de automação de escritório que coordenam e comunicam diversas unidades,
trabalhadores, e fontes externas como clientes e fornecedores. Eles manipulam e gerenciam
documentos, programação e comunicação, envolvendo além de textos, gráficos etc, hoje
publicados digitalmente em forma de sites para facilitar o acesso e distribuição de informações.
Sistemas de Informação Gerenciais (SIG): É o estudo dos sistemas de informação nas
empresas e na administração, dão suporte ao nível gerencial através de relatórios, processos
correntes, histórico através de acessos on-line, orientados a eventos internos, apoiando o
planejamento controle e decisão, dependem dos SPTs para aquisição de dados, resumindo e
apresentando operações e dados básicos periodicamente.

Sistemas de Apoio à Decisão (SAD): Atendem também o nível de gerência ajudando a tomar
decisões não usuais com rapidez e antecedência a fim de solucionar problemas não predefinidos,
usam informações internas obtidas dos SPT e SIG e também externas como preços de produtos
concorrentes etc, Têm maior poder analítico que os outros sistemas, construídos em diversos
modelos para analisar e armazenar dados, tomar decisões diárias, por isso possuem uma
interface de fácil acesso e atendimento ao usuário, são interativos, podendo-se alterar e incluir
dados através de menus que facilitam a entrada deles e obtenção de informações processadas.

Sistemas de Apoio ao Executivo (SAEs): Atendem o nível gerencial, os gerentes seniores que
têm pouco ou nenhuma experiência com computadores, servem para tomar decisões não
rotineiras que exigem bom senso avaliação e percepção. Criam um ambiente generalizado de
computação e comunicação em vez de aplicações fixas e capacidades específicas. Projetados
para incorporar dados externos como leis e novos concorrentes, também adquirem informações
dos SIG e SAD a fim de obter informações resumidas e úteis aos executivos. , não só sob forma
de textos, mas também gráficos projetados para solucionar problemas específicos que se alteram
seguidamente, através de modelos menos analíticos. Ele é formado por estações de trabalho,
menus gráficos , dados históricos e de concorrentes ,bancos de dados externos, e possuem fácil
comunicação e interface. Os Sistemas de Informação se relacionam um com outros a fim de
atender os diversos níveis e organizacionais, sendo os SPT a fonte de dados mais importante
para os outros sistemas, os SAEs são os recebedores de dados de sistemas de níveis inferiores,
os outros trocam dados entre si. Também atendem diferentes áreas funcionais, por isso é
importante e vantajoso a integração entre eles para há informação chegar a diferentes partes da
organização, ma isto tem alto custo, é demorado e complexo por isso cada organização deve ligar
os setores que acha necessário para atender suas necessidades. Quanto a função
organizacional, os SI se dividem em Sistemas de Venda e Marketing, responsável pela venda do
produto ou serviço. O Marketing procura identificar o que os clientes querem consumir e também
os melhores clientes, criando e mostrando novos produtos ou serviços através de propagandas e
promoções, já as Vendas contatam os clientes, oferecem os produtos e serviços fecham pedidos,
acompanham o comércio. No nível estratégico eles monitoram e apóiam novos produtos e
oportunidades e identificam o desempenho dos concorrentes. No nível de Gerência dão suporte a
pesquisas de mercado campanhas promocionais e determinação e preços, analisando o
desempenho do pessoal de vendas, No nível de conhecimento apóiam estações de trabalho
analisando marketing e no Operacional dão suporte ao atendimento e localização de clientes.
Sistemas de Informação de Fabricação e Produção, responsável pela produção de bens e
serviços tratam do planejamento, desenvolvimento, manutenção e estabelecimento de metas de
produção aquisição e armazenagem de equipamentos, matérias primas para fabricar produtos
acabados. No Nível Estratégico ajudam a localizar novas fábricas e investir em novas de
tecnologias de fabricação, no Nível de Gerência analisam e monitoram custos, recursos de
fabricação e produção no de Conhecimento criam e distribuem conhecimentos especializados
orientando o processo de produção e no Operacional monitoram e controlam a produção. Um
exemplo simples deste tipo de sistema s é o controle de estoque com emissão de relatórios.

Sistemas de Informação Financeira e Contábil: Programas para ajudar a organizar suas


finanças: Responsáveis pela administração de ativos financeiros visando o retorno ao
investimento. A função Finanças se encarrega de identificar novos ativos financeiros (ações
títulos e dívidas) através de informações externas. Já a função Contabilidade é responsável pela
manutenção e gerenciamento de registros financeiros (recibos folha de pagamento etc) para
prestar contas aos seus recursos. Estes sistemas compartilham problemas, acompanhando o que
possuem com o que necessitam. No nível Estratégico estabelecem metas de investimento
prevendo desempenho financeiro, no nível de Gerência ajudam gerentes a supervisionar e
controlar recursos financeiros, no de Conhecimento fornecem ferramentas analíticas como
estações de trabalho para aumentar o retorno sobre investimento, e no Operacional monitoram o
fluxo de recursos realizados pelas transações como cheques, pagamentos a fornecedores,
relatórios e recibos..

Sistemas de Recursos Humanos: Responsável por atrair, aperfeiçoar e manter a força de


trabalho da empresa ajudam a identificar funcionários potenciais e selecionar novos, desenvolver
talentos e potencialidades. No nível estratégico identificam habilidades, escolaridade tipos de
cargo atendem os planos de negócio. No de Gerência monitoram o recrutamento, alocação e
remuneração de funcionários, no de Conhecimento descrevem funções relacionadas ao
treinamento, elaboração de planos de carreira e relacionamentos hierárquicos entre funcionários
e no Operacional registram o recrutamento e colocação de funcionários da empresa. Eles
armazenam dados básicos de funcionários como nome endereço, telefone, escolaridade função
salário etc são elaborados para armazenar dados que atendam exigências dos governos federais
e estaduais relacionadas a contratação de funcionários conforme as leis trabalhistas. Além de SIs
para coordenar atividades e decisões da empresa e por setores através dos Sistemas Integrados
e Processos de Negócios automatizando o fluxo de informações, também necessitam de
Sistemas de Informação para gerenciamento de relações com clientes (CRM) e da cadeia de
suprimento (SCM) para coordenar processos que abrangem diferentes funções empresariais,
inclusive compartilhadas com clientes e outros parceiros da cadeia de suprimento. Os Processos
de negócio é a maneira como o trabalho é organizado, planejado e focado para produzir um
produto ou serviço de valor. Pode se dizer que são um conjunto de atividades, fluxos de trabalho,
materiais, informações e conhecimentos, mas por outro lado referem-se à maneira da gerência
coordenar o trabalho. Embora cada função empresarial tenha seus processos de negócio, eles
podem ser Transfuncionais porque ligam fronteiras entre as principais áreas funcionais e agrupam
funcionários de diferentes especialidades para completar as tarefas. Reprojetar um processo de
negócio exige análise e planejamento para evitar que os sistema faça o que a organização não
precisa. Os processos de relacionamento entre clientes e fornecedores são repensados de forma
estratégica, pois com as empresas digitais, o comércio eletrônico e a competição global eles
tornaram-se cada vez mais exigentes e se a organização não os atendem como quiserem
perdem-nos. Por isso os clientes não são mais tratados como fontes de receita mas como ativos
que precisam ser preservados, tentar conquistar novos clientes também é importante. através do
Gerenciamento das relações com o cliente CRM que envolve administração e tecnologia usando
SIs para coordenar os processos de negócio e interações da empresa com clientes, vendas
marketing e serviços. Antigamente eram cadastrados apenas alguns dados de clientes em fichas
hoje com as ferramentas do CRM e os múltiplos canais de comunicação armazenam-se dados
completos ajudando as empresas a identificar os melhores clientes e até mesmo o que desejam
consumir ou consomem mais.

Ciclos de Sistemas

O ciclo de vida de um sistema de informação é composto por criação, evolução, decadência e


morte. Embora não existem medidores precisos para estabelecer em que ponto o sistema se
encontra, é possível ter uma boa idéia se analisarmos os fatores abaixo:

Criação O sistema é criado com a utilização de um projeto que estabelece os objetivos que o
sistema deverá alcançar. Toda a expectativa em relação ao sistema deve ser declarada no
projeto. Essa criação envolve todo o processo de análise, refinamento de requisitos, declaração
de projeto, documentação, desenvolvimento, testes, implantação e treinamento. É um período
longo e trabalhoso.
Evolução Mudanças nas organizações, no mercado ou ações governamentais forçam os
sistemas a evoluírem para atender as novas necessidades das empresas. A mudança no ciclo de
vida dos sistemas de informação de criação para evolução ocorre quando os sistemas começam
a receber recursos que não estavam previsto no projeto original. Essas mudanças ou evoluções
como alguns chamam são benéficas quando bem implementadas e são necessárias em muitos
casos para dar um impulso no sistema a fim de adequá-lo a novas realidades que vão surgindo.
Novas leis, práticas de consumo, posicionamento da concorrência, entre outros fatores
geralmente forçam mudanças nos sistemas a fim de adequá-lo à nova realidade.

Decadência Um sistema de informação nem sempre consegue acompanhar as evoluções


tecnológicas, organizacionais ou exigências de governos. Há situações em que se torna muito
oneroso realizar adaptações nos sistemas para atender tais necessidades. Com o tempo o
sistema começa entrar em decadência, isto pode ser observado quando as necessidades do
mercado começam a distanciar-se dos sistemas de informação.

Morte A morte de um sistema de informação nem sempre é declarada, mas ela ocorre quando o
sistema já não atende mais as necessidades da empresa ou dos usuários. Há casos que a
empresa mantém o sistema apenas para consulta de dados antigos ou para operações básicas
que ainda sobrevivem.

Planejamento de Sistemas

O planejamento estratégico de sistemas de informação ou o planejamento estratégico da


tecnologia da informação é uma importante ferramenta de gestão utilizada hoje em dia por muitos
analistas de sistema e administradores de empresas, sendo uma metodologia integrante do
planejamento estratégico empresarial. O único objetivo do planejamento estratégico de sistemas
de informação é o de traçar um plano de ação claro e resumido para a utilização dos recursos de
informática(hardware, software) de acordo com a missão da empresa. “ Com o objetivo de
aumentar a rentabilidade, algumas empresas consideram necessário planejar com mais eficiência
a utilização dos recursos de sistemas de informação. O planejamento estratégico de sistemas de
informação ajuda a empresa a planejar o uso destes recursos de forma que consiga atingir e
suportar os objetivos, desafios e metas estabelecidos.” conhecidos como sistema de informação
de gestão (SIG), sistema integrado de gestão empresarial (ERP), sistema de gestão de negócios
(SAP). “O Planejamento estratégico de SI é o recurso usado para ajudar o tomador de decisão da
organização, na identificação das oportunidades de SI para apoiar os negócios empresariais, no
desenvolvimento de arquiteturas de informação baseadas nas necessidades dos usuários, e no
desenvolvimento de planos de ação dos SI a longo prazo.” “O planejamento estratégico de
sistema de informação deve refletir as funções e dados necessários para suportar o negócio, os
objetivos, os fatores críticos de sucesso, e as necessidades de informação da alta administração
da empresa. Da mesma forma, deve retratar como a tecnologia pode ser utilizada para criar
novas oportunidades ou vantagens competitivas.” “Um planejamento estratégico de sistemas de
informação deve, inicialmente, definir o negócio antes do desenvolvimento e implantação de
sistemas, considerando os fatores críticos de sucesso do negócio. Simultaneamente, o
planejamento cria oportunidades de identificar funções e armazenamentos duplicados, apontar
problemas e oportunidades, além de fornecer uma base para o desenvolvimento de estratégias
de hardware, software, recursos humanos e rede de comunicação de dados.”

Segundo Martin, os objetivos do planejamento estratégico são: Investigar as oportunidades de


ganho de vantagens; Estabelecer objetivos; Facilitar a consecução dos objetivos empresariais
através da análise de seus fatores críticos de sucesso; Determinar quais informações podem
auxiliar a gerência a realizar o seu trabalho; Criar um modelo funcional e de dados do negócio;
Subdividir o modelo funcional de negócios. Com todas esses definições pode-se dizer que o
planejamento estratégico de SI pode se agregar a muitas metodologias, dentre elas:
- Planejamento estratégico baseada em inteligência competitiva: tem por objetivo a produção de
informação para a tomada de decisões. busca identificar tendências do mercado, desenvolver
análises estratégicas, descobrir oportunidades e mapear riscos através de metodologias
científicas. A Inteligência Competitiva é o processo contínuo de monitoramento e análise
estratégica dos cenários e conjunturas mercadológicas em que determinada empresa está
inserida. O ciclo da IC se dá em 4 fases: planejamento, coleta, análise e disseminação.

- Planejamento estratégico baseado na teoria das restrições: é um paradigma de gestão que


considera qualquer sistema gerenciável como sendo limitado em alcançar mais do que suas
metas por um número muito pequeno de restrições.

Gestão de Sistemas e Softwares

A Gestão do Sistema de Informação consiste no conjunto de atividades que numa organização


são necessárias para gerir a informação, o SI e a adopção de Tecnologia de Informação para a
suportar (à informação). Intimamente ligadas à Gestão do Sistema de Informação – GSI – estão
as funções Planeamento do Sistema de Informação, Desenvolvimento do Sistema de Informação
e Exploração do Sistema de Informação.

A sigla ERP significa “Enterprise Resource Planning”, ou sistema de gestão integrado. Essa
tecnologia auxilia o gestor da empresa a melhorar os processos internos e integrar as atividades
de diferentes setores, como vendas, finanças, estoque e recursos humanos. A partir da
centralização das informações em uma plataforma única, o fluxo de dados corporativos se torna
mais fluido e é compartilhado com facilidade. Ao mesmo tempo, essas soluções eliminam a
duplicidade de informações. Com isso, a solução se mantém como uma base única e íntegra. O
resultado é o acesso a insights valiosos, que contribuem para uma tomada de decisão acertada.
Em um primeiro momento, o sistema ajuda o gestor a: administrar as contas a pagar e a receber,
monitorar as vendas e acompanhar os pedidos de compras. A ferramenta também contribui para
a gestão de pessoas, por meio da oferta de informações sobre a produtividade da equipe, por
exemplo. Dessa maneira, o sistema ERP facilita o gerenciamento das informações de diversos
setores da organização. Essa característica aumenta o controle e o acompanhamento dos
processo

Gestão de qualidade, produtividade e efetividade

Gestão da qualidade: Em outras palavras, a Gestão da Qualidade Total pode ser definida como
sendo qualquer atividade coordenada para dirigir e controlar uma organização no sentido de
possibilitar a melhoria de seus produtos ou serviços. Essas ações têm como objetivo garantir a
completa satisfação (ou superação) das necessidades e expectativas dos clientes, em relação ao
que está sendo oferecido. Dessa forma, a gestão da qualidade não precisa, necessariamente,
implicar na adoção de alguma certificação, embora este seja o meio mais comum e mais
difundido de garantir a qualidade nas empresas. As 7 ferramentas da gestão da qualidade são: -
Cartas de controle; - Histogramas; - Diagrama de Pareto; - Diagrama de dispersão; -
Fluxogramas; - Diagramas de Ishikawa (diagramas de causa-efeito ou ainda diagramas espinha
de peixe); - Folhas de verificação. O Sistema de Gestão da Qualidade (SGQ) é um conjunto de
elementos interligados, integrados na organização, que funciona como uma engrenagem para
atender à Política da Qualidade e os objetivos da empresa, tornando visível nos produtos e
serviços e atendendo as expectativas dos clientes. O SGQ é uma ferramenta que traz controle e
padronização dos processos e também permite a medição da eficácia das ações tomadas. Tudo
com foco na satisfação do cliente e na busca da melhoria contínua dos processos. Um programa
de gestão da qualidade bem implementado e bem gerenciado proporciona à alta direção
segurança para tomar decisões. O Sistema de Gestão da Qualidade (SGQ) tem o objetivo de
verificar todos os processos da empresa e como esses processos podem melhorar a qualidade
dos produtos e serviços frente aos clientes. A empresa poderá apenas implementar o Sistema de
Gestão da Qualidade e melhorar os processos, mas para que o resultado seja reconhecido, será
necessário que outra empresa especializada em auditoria de gestão da qualidade faça esse
serviço. Assim, obtém-se um certificado da qualidade, isso irá depender da área onde a empresa
atua, e também, das normas que regem esta área. Sendo assim, existem dois tipos de
certificados válidos: - Certificado de acreditação: baseado na norma ABNT NBR ISO/IEC 17025,
relacionada aos Requisitos Gerais para a Competência de Laboratórios de Ensaio e Calibração, e
a ABNT NBR ISO 15189, que diz respeito aos Laboratórios de Análises Clínicas; - Certificação: a
empresa baseia-se na norma NBR ISO 9001, ISO 14001, etc.

Gestão da Produtividade: que envolve todos os níveis de gerência e colaboradores, através da


redução de custos de manufatura, distribuição e venda de um produto ou serviço através da
integração de quatro fatores: medida, avaliação, planejamento e melhoria. Outro fator que pode
influenciar nesse tema é o Layout nas operações Produtivas, onde estuda-se a localização física
dos recursos de transformação. A produtividade é a procura incessante por melhores métodos de
trabalho e processos de produção, com o objetivo de obter melhorias com o menor custo possível
e é claro, sem deixar de lado a qualidade. A produtividade é considerada a relação do
produto/serviço produzido e o custo dos insumos para produzi-lo. Assim, a produtividade depende
essencialmente do output, ou seja, o numerador da fração, e do input, isto é, o denominador.

Gestão da Efetividade: A efetividade consiste em fazer o que tem que ser feito, atingindo os
objetivos traçados e utilizando os recursos da melhor forma possível. Os termos efetividade e
sucesso, associados a sistemas de informação, são usados como sinônimos na literatura e
significa a obtenção de efeitos desejados na aplicação dos Sistemas de Informação. Dione e
McLean (1992) criaram e apresentaram um modelo de efetividade dos sistemas de informação,
identificando seis categorias ou dimensões do sucesso dos Sistemas de Informações: a)
Qualidade dos Sistemas; b) Qualidade das Informações; c) Uso; d) Satisfação do Usuário; e)
Impacto individual; f) Impacto organizacional

Metodologia de desenvolvimento de sistemas

Em Engenharia de Software e no Gerenciamento de Projetos, uma metodologia é um conjunto


estruturado de práticas (por exemplo: Material de Treinamento, Programas de educação formais,
Planilhas, e Diagramas) que pode ser repetível durante o processo de produção de software.
Metodologias de Engenharia de Software abrangem muitas disciplinas, incluindo Gerenciamento
de Projetos, e as suas fases como: análise, projeto, codificação, teste, e mesmo a garantia da
qualidade. As principais abordagens de Metodologias de Desenvolvimento de Software são: -
Metodologia Estruturada: (Engenharia da Informação, Analise estruturada de sistema e
Metodologias de projeto (SSDAM) e outras), as quais englobam muitos métodos e processos de
software; - Metodologia Orientada a Objetos: (OOA/OOD e outras); - Metodologias de
Desenvolvimento Ágil: Existem algumas metodologias que podem ser consideradas como
abordagens ágeis entre elas: Scrum, Programação extrema, FDD, Crystal Clear, DSDM entre
outras.

Assim teríamos, por exemplo, a Metodologia Estruturada, na qual existem vários métodos, como
Análise Estruturada e Projeto Estruturado (muitas vezes denominados SA/SD, e Análise
Essencial). Dessa forma, tanto a Análise Estruturada quanto a Análise Essencial utilizam a
ferramenta Diagrama de Fluxos de Dados para modelar o funcionamento do sistema. Segue
abaixo as principais Metodologias e Métodos correspondentes no desenvolvimento de software:

- Metodologia Estruturada: Análise Estruturada, Projeto Estruturado, Programação Estruturada,


Análise Essencial, SADT, DFD – Diagrama de Fluxo de Dados, MER – Modelo de Entidades e
Relacionamentos. Uma das metodologias tradicionais mais utilizadas até hoje é o modelo
Clássico ou Cascata.

- Metodologia Orientada a Objetos: Orientação a Objetos, Rational Unified Process ( RUP )

- Desenvolvimento ágil de software: Feature Driven Development ( FDD ); Enterprise Unified


Process (EUP); Scrum (Scrum); Crystal (Crystal Clear, Crystal Orange, Crystal Orange Web);
Programação extrema ( XP )

- Outras Metodologias: Microsoft Solution Framework ( MSF )

Metodologia versus método: Há uma discussão na ciência a respeito das palavras: metodologia e
método. Elas são largamente utilizados como sinônimos, embora muitos autores acreditem que
seja importante destacar a diferença entre as duas. Uns entendem o método como um processo,
e a metodologia como o estudo de um ou vários métodos. Interessante observar a etimologia
destas palavras. Ambas as palavras derivam do mesmo radical do Grego, méthodos = ‘caminho
para chegar a um fim’ e logia = ‘estudo de’. Na Engenharia de Software, em particular, a
discussão continua. Uns argumentam que método é um processo com uma série de passos, para
construir um software, enquanto que uma metodologia é a codificação de um conjunto de práticas
recomendadas, às vezes acompanhada de material de treinamento, programas de educação
formal, Planilhas, Diagramas. Neste contexto, um método de Engenharia de Software pode ser
considerado como parte da metodologia. Também, alguns autores acreditam que uma
metodologia exista com base em uma abordagem filosófica do problema. Utilizando-se dessas
definições, pode-se afirmar que a Engenharia de Software é rica em métodos, mas com poucas
metodologias.

Modelo de processo de software: Um modelo de processo de desenvolvimento de software, ou


simplesmente modelo de processo, pode ser visto como uma representação, ou abstração dos
objetos e atividades envolvidas no processo de software. Além disso, oferece uma forma mais
abrangente e fácil de representar o gerenciamento de processo de software e consequentemente
o progresso do projeto. Exemplos de alguns modelos de processo de software: - Modelos ciclo de
vida; - Sequencial ou Cascata (do inglês waterfall) – com fases distintas de especificação, projeto
e desenvolvimento; - Desenvolvimento iterativo e incremental – desenvolvimento é iniciado com
um subconjunto simples de Requisitos de Software e iterativamente alcança evoluções
subsequentes das versões até o sistema todo estar implementado; - Evolucional ou Prototipação
– especificação, projeto e desenvolvimento de protótipos; - V-Model – Parecido com o modelo
cascata, mas com uma organização melhor, que permite que se compare com outros modelos
mais modernos; - Espiral – evolução através de vários ciclos completos de especificação, projeto
e desenvolvimento; - Componentizado – reuso através de montagem de componentes já
existentes; - Formal – implementação a partir de modelo matemático formal; - Ágil; - RAD; -
Quarta geração

Processos de engenharia e qualidade de software

Um processo de Engenharia de Software é formado por um conjunto de passos de processo


parcialmente ordenados, relacionados com artefatos, pessoas, recursos, estruturas
organizacionais e restrições, tendo como objetivo produzir e manter os produtos de software finais
requeridos. Os processos são divididos em atividades ou tarefas. Uma atividade é um passo de
processo que produz mudanças de estado visíveis externamente no produto de software.
Atividades incorporam e implementam procedimentos, regras e políticas, e têm como objetivo
gerar ou modificar um dado conjunto de artefatos. Um artefato é um produto criado ou modificado
durante um processo. Tal produto é resultado de uma atividade e pode ser utilizado
posteriormente como matéria prima para a mesma ou para outra atividade a fim de gerar novos
produtos. Uma atividade aloca recursos (por exemplo, computadores, impressoras e material de
expediente), é escalonada, monitorada e atribuída a desenvolvedores (agentes), que podem
utilizar ferramentas para executá-la. Toda atividade possui uma descrição, a qual pode especificar
os artefatos necessários, as relações de dependência com outras atividades, as datas de início e
fim planejadas, os recursos a serem alocados e os agentes responsáveis pela mesma. O agente
pode ser uma pessoa ou uma ferramenta automatizada (quando a atividade é automática) e
relaciona-se com as atividades de um processo. Os agentes podem estar organizados em cargos,
aos quais podem ser definidas diferentes responsabilidades. A realização do processo é afetada
pelas restrições, que podem atingir atividades, agentes, recursos, artefatos, papéis e seus
relacionamentos. Uma restrição é uma condição definida que um passo de processo deve
satisfazer antes ou depois de ser executado.

Qualidade: O termo Qualidade possui diferentes definições na literatura. O glossário do IEEE


define qualidade como “Grau de conformidade de um sistema, componente ou processo com os
respectivos requisitos”, ou, alternativamente, como “Grau de conformidade de um sistema,
componente ou processo com as necessidades e expectativas de clientes ou usuários”. Ambas
as definições refletem aspectos importantes da qualidade; diversos autores apresentam outras
definições, que geralmente giram em torno dos temas de conformidade com os requisitos e
atendimento das expectativas. Naturalmente, pode haver diferenças entre as aplicações dessas
definições se os requisitos explícitos não refletirem corretamente as necessidades reais. Como
salienta, a qualidade é definida por uma coleção de atributos; funcionalidade, confiabilidade,
satisfação do usuário e desempenho são aspectos importantes, mas parciais. A norma NBR ISO
9000:2005 define qualidade como sendo o grau no qual um conjunto de características inerentes
satisfaz aos requisitos. Ou seja, pode-se afirmar que se algum produto ou serviço atende aos
requisitos especificados, este mesmo produto ou serviço possui a qualidade desejada. Outra
visão diferente é no contexto de desenvolvimento de software: qualidade pode ser entendida
como um conjunto de características a serem satisfeitas em um determinado grau, de modo que o
produto de software atenda às necessidades explícitas e implícitas de seus usuários.

Uma forte motivação para o foco em qualidade é que o custo relativo de corrigir erros aumenta
drasticamente com a evolução do Ciclo de Vida do Software. Segundo Boehm, citado por
Pressman[5], há corrigir um erro ou defeito na fase de manutenção do software custa 100 vezes
mais que corrigi-lo na fase de requisitos. Pressman[5] indica os seguintes custos relacionados a
qualidade de software, podendo eles ocorrerem tanto na prevenção quanto no tratamento dos
problemas: - Custos de Prevenção: Planejamento da qualidade, Revisões técnicas formais,
Testes, Treinamento; - Custos de Falha Interna: Retrabalho, Reparo, Modo de análise de falha; -
Custo de Falha Externa: Resolução das reclamações, Devolução e substituição, Suporte,
Atendimento à garantia.

Modelos e Características de Qualidade de Software: - Modelos de Processo de Software: CMMI,


MPS.BR; - Padrões Internacionais de Processo de Software: ISO 12207; - Padrões Internacionais
de Qualidade de Software: ISO 9126, ISO 15504, ISO/IEC 25010 (SQuaRe); - Padrões de
certificação de Qualidade de Software: SCAMPI para o CMMI, Fórum de credenciamento e
controle -FCC para o MPS.br.

Processos de gerencia na qualidade de software: "Um Sistema de Gestão da Qualidade


compreende atividades pelas quais uma organização identifica seus objetivos e determina os
processos e recursos necessários para alcançar os resultados desejados."[11] Seus princípios
são: foco no cliente, liderança, engajamento das pessoas, abordagem de processo, melhoria
contínua, tomada de decisão baseada em evidência e gestão dos relacionamentos com as partes
interessadas. Existem quatro subcategorias de Gerência de Qualidade de Software: -
Planejamento da Qualidade de Software; - Garantia da Qualidade de Software; - Controle da
Qualidade de Software; - Melhoria da Qualidade de Software.
Para auxiliar a garantir a qualidade de software existem várias ferramentas, que podem atuar em
análises estáticas ou dinâmicas do software. Entre a grande variedade de ferramentas existentes,
é possível caracterizar alguma categorias de análise estática: - Ferramentas de apoio a revisões
e inspeções; - Ferramentas de apoio a análise de riscos de segurança; - Ferramentas de
rastreamento de problemas; - Ferramentas de análise de dados capturados em ambientes de
Engenharia de Software.

Técnicas de levantamento de dados

O método de extração de requisitos para a fase de levantamento de informações pode ser


explorado resultando em uma análise de requisitos mais consistente e realista. Dentre os
métodos de extração destacam-se:

- JAD – Joint Application Design: Também chamado de Métodos de Projeto Interativo, substitui as
entrevistas individuais por reuniões degrupo, onde participam os representantes dos envolvidos
no projeto. Essas reuniões são intensas e levam tipicamente de um a três dias. É um método
destinado a extrair informações de alta qualidade dos envolvidos, em curto espaço de tempo,
através de reuniões estruturadas que buscam decisões por consenso. Os benefícios do JAD são:
- Maior produtividade; - Maior qualidade; - Trabalho em equipe; - Custos mais baixos de
desenvolvimento e manutenção.

- Entrevista: Diálogo entre entrevistador e entrevistado. Trata-se uma situação social objetiva,
pois permite que os envolvidos interajam de maneira mais completa.

- Questionário: A utilização de um questionário se aplica quando: A distância é considerável; Se


queira obter um primeiro conhecimento. Os benefícios de se utilizar o questionário são: Economia
de tempo; Baixo custo; Anonimato; Tabulação; Pesquisa.

- Brainstorming: Buscar soluções através de geração espontânea de ideias, onde as regras são:
É permitido ter ideias; Não é permitido julgar ou criticar ideias; Ambiente é não avaliativo. Tem
como base a descontração, o pensamento de que quanto mais ideias melhor, o enriquecimento
da ideia alheia e o evitamento de discussão de ideias.

- Prototipação: Utilizado no estágio inicial do projeto. Ajuda aos stakeholders a desenvolver uma
forte noção sobre a aplicação a qual ainda não foi implementada, que através da visualização da
mesma eles podem identificar os reais requisitos e fluxos de trabalho do sistema. É muito
utilizado quando os stakeholders são incapazes de expressar os seus requisitos ou se os
mesmos não têm nenhuma experiência com o sistema.

Diagramação e técnicas de engenharia de software

Projeto de entrada de dados e saída de informações

Projeto de Arquivos

Engenharia de programas

Testes de software

Documentação
Implantação

Tempos e custos de sistemas e softwares

Melhoria do processo de software

Tendências emergentes da engenharia de software

GERENCIA DE PROJETOS DE SOFTWARE

Você também pode gostar