Você está na página 1de 26

SISTEMA DE ENSINO PRESENCIAL CONECTADO ANLISE E DESENVOLVIMENTO DE SISTEMAS RICHARD MARTINS BUENO

PORTFLIO INDIVIDUAL

Poos de Caldas 2011

RICHARD MARTINS BUENO

PORTFLIO INDIVIDUAL

Trabalho apresentado a produo textual interdiciplicar indivual do 3 semestre do curso de analise e desenvolvimento de sistemas da Universidade Norte do Paran - UNOPAR Prof. Mrcio Chiavelli Profa. Merris Mozer Prof. Roberto Yukio Nishimura Profa. Simone Tanaka

Poos de Caldas 2011

SUMRIO 1 INTRODUO...........................................................................................................3 2 DESENVOLVIMENTO...............................................................................................4 1 CONCLUSO...........................................................................................................25

1 INTRODUO Este trabalho apresenta a produo textual interdisciplinar individual do 3 semestre do curso de anlise e desenvolvimento de sistemas e tem como objetivo aplicar os conceitos das disciplinas apresentadas. O trabalho foi dividido em 04 (quatro) partes para facilitar o entendimento, sendo cada parte relacionada a uma disciplina apresentada no mdulo, conforme abaixo: 1 Algoritmos Pesquisa sobre listas lineares definindo os conceitos de FIFO, FILO, seus apontadores suas ordens para incluso, excluso e pesquisa, exemplos do cotidiano e da informtica sobre listas lineares. Definio dos conceitos de alocao simplesmente encadeada, alocao duplamente encadeada, representao grafica das duas alocaes de encadeamento e resposta a qual delas tem maiores vantagens e o motivo. 2 Banco de Dados II Definio dos conceitos das propriedades ACID de uma transao. 3 Programao Orientada a Objetos Qual a vantagem de se utilizar Orientao a Objetos? Como e quando utiliza-se polimorfismo? 4 Anlise de Sistemas II Como pode-se representar polimorfismo no diagrama de classe, explique como voc representou o polimorfismo ?

2 DESENVOLVIMENTO

2.1 ALGORITMOS

2.1.1 Listas Lineares Lista linear a estrutura que permite representar um conjunto de dados afins, de forma a preservar a relao de ordem linear de seus elementos. Exemplos diarios de listas lineares: - Pessoas esperando nibus - Letras de uma palavra - Palavras de uma frase 2.1.1.1 Conceito de FIFO (First In First Out) O primeiro elemento que entrou o primeiro a sair. Estruturas lineares com esta disciplina de acesso so denominadas filas. Uma fila possui duas funes bsicas: ENQUEUE (incluir - INC), que adiciona um elemento ao final da fila, e DEQUEUE (retirar - DEL), que remove o elemento no incio da fila. Vantagens:

O mais simples entre os processos de escalonamento Todos os processos tendem a serem atendidos Desvantagens:

Muito sensvel a ordem de chegada. Se processos maiores chegarem primeiro aumentaro o tempo mdio de espera. No garante um tempo de resposta rpido.

No eficiente em sistemas de tempo compartilhado. No eficiente em sistemas em tempo real.

Exemplo do cotidiado: fila de bancos. Exemplo de Fila:

inicio Y F C

INC X INC T DEL DEL INC R INC J DEL

Resposta: CXTR-J

2.1.1.2 Conceito de FILO (First in, Last Out) O ltimo elemento que entrou o primeiro a sair. Estruturas lineares com esta disciplina de acesso so denominadas pilhas. uma lista linear em que todas as inseres, as remoes e os acessos so feitos em uma nica extremidade, chamada topo. Existem duas funes que se aplicam a todas as pilhas: PUSH, que insere um dado no topo da pilha, e POP, que remove o item no topo da pilha. Exemplos do cotidiado: -Pilhas de pratos, pilhas de livros, etc. Exemplo: Considere a pilha abaixo:

13 19 14 10

Qual ser seu o estado final, aps executar as seguintes instrues: Pop x Pop y Pop z Push y Push x Push z

14 13 19 10 Resposta

2.1.1.3 Alocao Simplesmente Encadeada Cada n da lista ponta para o prximo n. A alocao simplesmente encadeada s pode ser percorrida em um nico sentido. A grande diferena da lista para as outras estruturas de dados, que as listas no possuem critrio de incluso e remoo de dados. Uma lista encadeada tem necessariamente uma varivel ponteiro apontando para o seu primeiro elemento. Essa varivel ser utilizada sempre, mesmo que a lista esteja vazia, e dever apontar sempre para o incio da lista (primeiro elemento). Caso esta primeira varivel no seja atualizada corretamente (no caso da incluso de um elemento na primeira posio), a lista poder se perder na memria e no ser mais acessvel. Um elemento da lista composto de duas partes: a informao propriamente dita e uma conexo com o prximo elemento. So chamadas de simplesmente encadeadas porque possuem somente o endereo do seu prximo (prximo elemento).

typedef struct celula { int dados; struct celula *proximaCelula; }tipoCelula;

/* campo para os dados */ /* ponteiro para a proxima celula */ /* nome do novo tipo de estrutura */

Uma lista encadeada toda alocada dinamicamente. Sabemos que a memria alocada dinamicamente no possui um nome como acontece nas variveis comuns, portanto, todas as listas devem possuir uma varivel padro, do tipo ponteiro, que vai apontar para o seu inicio. Uma vez que o primeiro elemento ser uma clula, e cada clula uma estrutura, ento a varivel que apontar para o incio da lista ser um ponteiro de estrutura. A varivel incio mostrada na figura acima ser ento definida como: TipoCelula * inicio; /* ponteiro para uma estrutura tipoCelula */

Uma vez que a lista no possui elementos ainda, ento: inicio = NULL; Para uma lista vazia (sem clulas), a varivel inicio possui valor NULL: Incluindo o primeiro elemento (primeira clula): TipoCelula aux; /* variavel auxiliar: ponteiro para uma estrutura tipoCelula

Para reservar memria para nova clula, utilizamos o comando

malloc. aux = malloc (sizeof (tipoCelula)); Temos ento:

E precisamos atualizar os ponteiros para que a lista receba seu primeiro elemento. Sendo assim: 1) aux->proximaCelula = NULL; // atribui NULL ao campo proximacelula da clula apontada por aux 2) inicio = aux; // copia o endereco de aux em inicio

Para inserir dados nesta primeira clula, podemos utilizar o ponteiro aux, que permanece apontando para a clula. aux->dados = 10; /*atribui o valor 10 ao campo dados da clula pontada por aux

Obs: Cada clula de uma lista tambm chamada de n ou nodo Exemplos: O programa a seguir cria uma lista com trs ns, conforme exibida a abaixo

inicio
matricula proximo

1 1

#include <stdio.h> #include <stdlib.h> main( ) { typedef struct no {int matricula; stuct no *proximo; } tipoNo; tipoNo *inicio, *novo, *atual;

*/

/* cria o primeiro registro (nodo 1) */ novo = malloc(sizeof (tipoNo)); /* aloca o n na memria */ novo->matricula = 1; /* atribui 1 para amatrcula */ novo->proximo = NULL; /* NULL = Fim */ inicio = novo; /* inicio aponta para o primeiro n atual = novo;

/* cria o segundo registro (nodo 2) */ novo = malloc(sizeof (tipoNo)); /* instancia o segundo n */ novo->matricula = 2; novo->Proximo = NULL; /* NULL = Fim */ atual->proximo = novo; /* n anterior aponta para o segundo lista */ atual = novo; /* cria o terceiro registro (n 3) */ novo = malloc(sizeof (tipoNo)); /* instancia o terceiro n */ novo->matricula = 3; novo->Proximo = NULL; /* NULL = Fim */ atual->proximo = novo; /* n anterior aponta para o segundo lista */ atual = novo; /* exibe os ns da lista */ atual = inicio; while (atual != NULL) { printf("\n matricula = %d ",atual->matricula); atual=atual->proximo; } getchar(); }

O programa abaixo cria uma lista dinmica (FILA) com 5 ns, contendo as matrculas: 1, 2, 3, 4, e 5, respectivamente.
#include "stdio.h" #include <stdlib.h> main() { typedef struct no {int matricula; struct no *proximo; }tipoNo; tipoNo *inicio, int i; clrscr(); *novo, *atual;

inicio = atual = NULL; for (i=1;i<6;i++) { novo = malloc(sizeof(tipoNo)); novo->matricula = i; novo->proximo=NULL; if (inicio == NULL) inicio = novo; else atual->proximo = novo; atual = novo; /* exibe a lista */ atual = inicio; while (atual != NULL) { printf("\n matricula = %d ",atual->matricula); atual=atual->proximo; } getch(); }
Inicio
matricula prox

1 1

O programa abaixo cria uma lista dinmica (tipo Pilha) com 3 ns, contendo as matrculas: 1, 2, e 3.

topo

#include <stdio.h> main() { typedef struct no {int matricula; struct no *proximo; }tipoNo; tipoNo clrscr(); *topo, *novo,

matriculaa prox

*atual;

/* inclui primeiro registro na pilha */ novo = malloc(sizeof(tipoNo)); novo->matricula = 1; novo->proximo = NULL; topo = novo; /* inclui segundo registro na pilha */ novo = malloc(sizeof(tipoNo)); novo->matricula = 2; novo->proximo = topo; topo = novo; /* inclui terceiro registro na pilha */ novo = malloc(sizeof(tipoNo)); novo->matricula = 3; novo->proximo = topo; topo = novo;

/* exibe os registros da pilha */ atual = topo; while (atual != NULL) { printf("\n matricula = %d ",atual->matricula); atual=atual->proximo; } getch(); } Ser exibido: matricula = 3 matricula = 2 matricula = 1

O programa abaixo cria uma lista encadeada do tipo Pilha, com as matrculas, 1, 2,3,4 e 5.
#include "stdio.h" main() { typedef struct no {int matricula; struct no *proximo; }tipoNo; tipoNo int i; clrscr(); topo = atual = NULL; for (i=1;i<6;i++) { novo = malloc(sizeof(tipoNo)); novo->matricula = i; if (topo == NULL) novo->proximo = NULL; else novo->proximo = topo; topo = novo; } /* exibe os registros da pilha */ atual = topo; while (atual != NULL) { printf("\n matricula = %d ",atual->matricula); atual=atual->proximo; } getch(); } Ser exibido: matricula matricula matricula matricula matricula = = = = = 5 4 3 2 1 *topo, *novo, *atual;

topo
matricula proximo

1 5

Percorrendo a lista Para percorrer uma lista (fila ou pilha) temos que utilizar uma varivel auxiliar (ponteiro auxiliar). Inicialmente, aux dever apontar para o incio da fila (ou para o topo, no caso das pilhas). Depois, aux receber o endereo contido no campo proximo, ou seja, receber o endereo da prxima clula (prximo n). Enquanto aux for diferente de NULL, repete-se o processo acima. Observe o trecho de programa a seguir que exibir todos os ns da lista.

aux = inicio; while (aux != NULL) { printf("\n matricula = %d ",aux->matricula); aux = aux->proximo; } getchar(); }

Inicio

matricula proximo

1 1

Incluindo um n no final da lista (Fila) O ltimo n da lista no apontava para nenhum outro, agora, este dever apontar para o novo n. Incio 1 0 valor 27 Prximo valor Proxi mo

- se a lista no vazia, percorrer a lista at a ltima clula (aux apontar para o ltimo n) - alocar memria para o novo n (malloc) - atribuir dados aos campos de dados - atribuir NULL ao campo ponteiro da nova clula includa - atribuir ao campo ponteiro da ltima clula o endereo da nova clula
TipoNo *aux, *inicio, *novo;

if (inicio != NULL) { aux = inicio; while(aux->proximo != NULL) aux = aux->proximo; novo = malloc(sizeof(tipoNo)) novo->valor = 55; novo->proximo = NULL; aux->proximo = novo; }

Desta forma, a lista ficar assim: Incio 55 Valor

10 valor

Proximo

27 valor

Proximo

Proximo

Excluindo o primeiro n da lista

Incio

2 Dado Prox

7 Dado Prox

3 Dado Prox

apontar aux para o inicio da fila (aux = inicio) incio recebe o endereo do segundo n (inicio = aux-prox >prox) retirar o primeiro n da memria ( free(aux) ); ou inicio = inicio-

tipoNo *aux, *inicio; aux = inicio; inicio = aux->prox; free(aux);

/* aux aponta para o incio da fila */ /* inicio aponta para o segundo n */ /* libera da memria do primeiro n */

A lista ficar da seguinte forma:


inicio

Dado

prox

1 7

Excluindo um n qualquer da lista


Observe a lista:

Incio

2 Dado Prox

7 Dado Prox

3 Dado Prox

Desejamos fazer a excluso do n com valor 7 (segundo n) - percorrer a lista at o n anterior ao de valor 7 (primeiro n) - atribuir o endereo do n de valor 7 a um ponteiro auxiliar (para poder liberar a memria) - alterar o endereo apontado pelo n 1, para que ela aponte para onde o n de valor 7 aponta atualmente (n 3). - liberar a memria do n de valor 7 ( free(aux) ) A lista ficar da seguinte forma:

Incio

2 Dado Prox

7 Dado Prox

3 Dado Prox

tipoNo aux, apaga; aux = inicio; while(aux->prox->valor != 7) aux = aux->prox; apaga = aux->prox; /* apaga recebe o endereo do n 2 */ aux->prox = apaga->prox; /* n 1 aponta para o n 3 */ free(apaga); /* libera rea do n 2 */

2.1.1.4 Alocao Duplamente Encadeada A alocao duplamente encadeada aquela em que cada n possui no s o endereo do n anterior mas tambm o endereo do prximo n. pode ser percorrida em ambos os sentidos. Observe o grfico e a declarao abaixo:

typedef struct celula { struct celula int char struct no } tipoCelula; *anterior; indice; nome[15]; *proxima;
/* ponteiro da celula anterior */ /* campo de dado

*/

/* campo de dado */ /* ponteiro da proxima clula */

tipoCelula *cabeca, *cauda;

2.2 BANCO DE DADOS

2.2.1 ACID Acrnimo de Atomicidade, Consistncia, Isolamento e Durabilidade. 2.2.1.1 Atomicidade A propriedade de atomicidade garante que as transaes sejam atmicas (indivisveis). A transao ser executada totalmente ou no ser executada. Exemplo: Em uma transferencia de valores entre contas bancrias, necessrio que, da conta origem seja retirado um valor X e na conta destino seja somado o mesmo valor X. As duas operaes devem ser completadas sem que qualquer erro acontea, caso contrrio todas as alteraes feitas nessa operao de transferncia devem ser desfeitas; 2.2.1.2 Consistncia A propriedade de consistncia garante que o banco de dados passar de uma forma consistente para outra forma consistente. 2.2.1.3 Isolamento A propriedade de isolamento garante que a transao no ser interferida por nenhuma outra transao concorrente. O resultado de uma transao executada concorrentemente a outra deve ser o mesmo que o de sua execuo de forma isolada. Operaes exteriores a uma dada transao jamais vero esta transao em estados intermedirios. Ex: Duas transaes executadas juntas. Transao Y altera o nome do cliente. Transao X altera o nome do mesmo cliente;

Ao fazer insert, update ou delete enquanto a transao estiver em andamento todos os dados da tabela sero alocados para aquela transao, portanto a transao X s poder ser executada aps a concluso da transao Y. Esta escolha feita pelo banco de dados e ele executa primeiro uma transao depois a outra. Duas transaes s podem ser simultneas se elas no alterarem os mesmos dados. 2.2.1.4 Durabilidade A propriedade de durabilidade garante que o que foi salvo, no ser mais perdido.

2.3 PROGRAMAO ORIENTADA A OBJETOS

2.3.1 Qual a vantagem de se utilizar Orientao a Objetos? Agrupar os conceitos do mundo real e represent-los atravs de objetos um dos maiores benefcios oferecidos pela OO, pois para ns se torna bem mais fcil a compreenso. Pode-se citar tambm como benefcios da OO: - A Reutilizao de cdigo considerada uma grande vantagem oferecida pela OO; - Utilizao da mesma notao, durante todo o ciclo de vida do software, da anlise, projeto at a implementao. - Facilita o reaproveitamento de cdigo, pois temos objetos que se comportam de formas semelhantes alm de permitir reduo no tempo de desenvolvimento; - Herana torna o programa menor e facilita a manuteno. Utiliza-se as classes para implementar novas funcionalidades podendo-se herdar o comportamento (que est codificado) de outras classes anteriormente implementadas. - Escalabilidade, que a capacidade de uma aplicao adaptar-se facilmente s exigncias de novos requisitos do sistema sem aumentar muito a sua complexidade e sem comprometer o desempenho. Para aumentar a escalabilidade a aplicao construda utilizando-se a composio de objetos e a troca de mensagens entre estes objetos. - O encapsulamento no permite que seja feito o acesso direto ao estado interno de um objeto, isto , oculta e protege as informaes dos objetos. O acesso aos mesmos deve ser feito atravs das mensagens que o objeto pode receber. O programador no necessita conhecer o cdigo, precisa apenas da documentao dos objetos para que possa utiliz-los.

- A apropriao, que possibilita agrupar em classes os objetos com comportamento semelhante e estas classes podem ser agrupadas em hierarquias de herana , pode ser uma vantagem e tambm uma desvantagem. A vantagem podermos utilizar um agrupamento de objetos e fornecermos uma soluo para um problema. A desvantagem que estes objetos sero tratados em grupos e no de forma individual.

2.3.2 Como e quando utiliza-se polimorfismo? A aplicao do polimorfismo torna o cdigo mais legvel, mais enxuto e facilita manuteno dos sistemas pois permite que se utilize mtodos com o mesmo nome para objetos diferentes. A mesma operao, que foi implementada atravs da codificao um mtodo, pode atuar de modo diferente em classes diferentes. Isto significa que objetos diferentes podem responder a uma mesma mensagem de forma diferente. Ex.: Ao tentarmos inserir uma nova pessoa, precisaramos de trs mtodo diferentes, para usurio, um para Professor e um mtodo para Funcionrio.
If Pessoa then {mtodo} If Pessoa = Professor then Pessoa.InsereProfessor else if Pessoa = usurio then Usurio.InsereUsurio else if Pessoa = Funcionrio then Funcionrio.InsereFuncionrio Professor.InsereProfessor; {chamada do mtodo} Usurio.InsereUsuario; Funcionrio.InsereFuncionario;

Professor, Usurio e Funcionrio so instncias de objetos das respectivas subclases Professor, Usurio e Funcionrio. Utilizando-se o polimorfismo, teremos trs classes e apenas um mtodo Insere:
Pessoa.Insere; {mtodo} Professor.Insere;{chamada do mtodo}

Usurio.Insere; Funcionrio.Insere;

O exemplo mostra que a operao Insere pode atuar de forma diferente em objetos diferentes. A utilizao do polimorfismo no facilita a reutilizao de cdigo, mas diminui o nmero de linhas de forma significativa quando temos muitos objetos com comportamentos ligeiramente diferentes. Este conceito no exige que se conhea a implementao do mtodo insere para cada objeto. O tipo de polimorfismo acima um exemplo de mtodos com implementao diferente com o mesmo nome em classes diferentes. Existe outro tipo de polimorfismo, chamado polimorfismo paramtrico ou sobrecarga de operadores, onde podemos ter mtodos com o mesmo nome, implementados na mesma classe, mas que diferem apenas pelo nmero de parmetros que utilizam. Algumas linguagens OO implementam o polimorfismo com ligao (binding) dinmica ou com ligao esttica. A ligao dinmica feita em tempo de execuo e poder ser alterada durante a execuo do programa, entretanto, esta facilidade torna a execuo do sistema mais lenta. A ligao esttica feita em tempo de compilao ou interligao (linking) no podendo mais ser alterada no decorrer da execuo do programa. Tipos Clssicos de Polimorfismo: 1) De operadores (distino pelo tipo do elemento): j vem implementado em todas as linguagens. Por exemplo, se voc deseja somar dois nmeros inteiros. 2) Redefinio de operadores: utilizada quando necessita-se de operaes que normalmente no so disponveis na linguagem de programao. Por exemplo, soma de matrizes. 3) Dois mtodos iguais na mesma classe: distinguem-se pelo nmero e/ou tipo de parmetros ou objetos referenciados.

2.4 ANLISE DE SISTEMAS

2.4.1 Como pode-se representar polimorfismo no diagrama de classe, explique como voc representou o polimorfismo? Para exemplificar um diagrama de classe representando um polimorfismo, veja o exemplo abaixo:

Neste exemplo temo suma superclasse Mamfero e as subclases Cachorro, Macaco, Homem, que herdam de Mamfero. Podemos dizer que Cachorro um Mamifero, Macaco um Mamfero, Homem um Mamfero. As caractersticas definidas na classe Mamfero estaro presentes nas chasses que herdam dela. Todos os Mamferos tero Mamas e Pelos. Isto Herana. Alm disso, cada classe que herda de Mamfero poder ter seus prprios atributos que se somaro aos da superclasse. Note que a classe Homem contm uma definio dos atributo Pelos. Dando uma razo lgica para nosso exemplo, isto porque o Homem tem pelos diferentes dos outros mamferos. Podemos portanto re-definir na subclasse um atributo que j estaba presentes na superclasse, dando a ele caractersticas diferentes. Isto Polimorfismo: o mesmo mtodo ou atributo pode ter funcionamento diferente em

clases diferentes, mesmo que uma hede da outra. Veja outro exemplo abaixo, Em geral, pode-se ter uma hierarquia de classes relacionadas por herana / generalizao. Em cada classe da hierarquia colocam-se as propriedades que so comuns a todas as suas subclasses, evitandose redundncia, promovendo a sua reutilizao.

1 CONCLUSO O trabalho realizado buscou apresentar a matria solicitada pelas quatro matrias do 3 semestre do curso de Anlises de Sistema.