Buscar

TCC 1

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE PAULISTA
CRISTIAN KEVIN DE SOUSA NOLETO
JOAO PAULO DE OLIVEIRA
KALLEW CARLOS MACHADO DE OLIVEIRA
LUCIANO FERREIRA ARAÚJO
MATHEUS GONÇALVES LIMA
INTELIGÊNCIA ARTIFICIAL NA AUTOMAÇÃO RESIDENCIAL
GOIANIA – GO
2021
CRISTIAN KEVIN DE SOUSA NOLETO
JOAO PAULO DE OLIVEIRA
KALLEW CARLOS MACHADO DE OLIVEIRA
LUCIANO FERREIRA ARAÚJO
MATHEUS GONÇALVES LIMA
INTELIGÊNCIA ARTIFICIAL NA AUTOMAÇÃO RESIDENCIAL
Relatório apresentado à Banca Examinadora do Trabalho Técnico-cientifico de Conclusão de Curso de Ciência da Computação para análise e aprovação.
Orientador(a): Fabriccio Dias Canhete
GOIANIA – GO
2021
AGRADECIMENTOS
 Agradecemos Primeiramente a DEUS que nos proporcionou estarmos aqui e também por ser a base das nossas conquistas;
Somos muito gratos às nossas famílias que nos apoiaram o tempo todo claro, não poupando esforços para vencermos no final desta jornada.
Agradecemos também aos nossos amigos pelo apoio, incentivo e ajuda durante toda esta jornada.
A todos os professores que nos ajudaram nessa caminhada, com toda sua dedicação e também as orientações na elaboração deste trabalho, colaborando com toda ajuda possível para o desenvolvimento de nossas ideias.
Enfim podemos dizer Acabou, Vencemos!
RESUMO
A inteligência artificial, encontra-se em um desenvolvimento constante, a integração de sistemas usando IA com outros mecanismos que realizam algumas tarefas que facilitam o dia a dia de todas as pessoas vem sendo método e objeto de estudo e de pesquisa de profissionais de diversos ramos de conhecimento, dos quais os sistemas se destacam. O objetivo deste Trabalho de Conclusão de Curso é desenvolver um sistema capaz de ter uma interação da inteligência artificial, no caso iremos usar o jarvis com Arduino, por meio de comandos de voz que serão dados usando um microfone, com a finalidade de automatizar uma residência por completo. Por meio deste sistema será feita a comunicação de um microfone com o Arduino usando a inteligência artificial que irá gerenciar todos os dispositivos que estão na residência. Dentre vários microcontroladores utilizamos o Arduino, que tem uma gama quase infinita para automação.
Iremos utilizar um algoritmo para se comunicar com o Arduino, para que ao serem executados comandos o sistema possa se comunicar com a casa, podendo executar as tarefas que são relacionadas a automação na residência, através de comandos por aplicativo, ou por comandos de voz.
A motivação desde trabalho se dá muito por conta da necessidade de meios que promovam maior conforto, segurança e interação para os usuários e suas respectivas casas, ou escritórios. Ao final deste trabalho obteve-se um sistema que gerencia a automação de residências, em uma ou mais delas, resultando em um protótipo de casa inteligente capaz de ouvir e executar comando gerados pelo sistema.
Palavra Chave: Arduino, Inteligência Artificial, Automação residencial.
ABSTRACT
Artificial intelligence is in constant development, the integration of systems using AI with other mechanisms that perform some tasks that facilitate the daily lives of all people has been a method and object of study and research by professionals from different branches knowledge, of which the systems stand out. The objective of this Course Conclusion Work is to develop a system capable of having an interaction of artificial intelligence, in which case we will use jarvis with Arduino, through voice commands that will be given using a microphone, in order to automate a residence complete. Through this system, a microphone will be communicated with the Arduino using artificial intelligence that will manage all the devices that are in the residence. Among several microcontrollers we use the Arduino, which has an almost infinite range for automation.
We will use an algorithm to communicate with the Arduino, so that when commands are executed, the system can communicate with the house, being able to perform the tasks that are related to automation in the residence, through commands by application, or by voice commands.
The motivation for work is largely due to the need for means that promote greater comfort, safety and interaction for users and their respective homes, or offices. At the end of this work, we obtained a system that manages home automation in one or more of them, resulting in a prototype of a smart home capable of hearing and executing commands generated by the system.
Keyword: Arduino, Artificial Intelligence, Home Automation.
SUMÁRIO
1.	INTRODUÇÃO	8
2.	ABSTRACT	8
3.	INTRODUÇÃO	9
4.	COMPREENSÃO E CARACTERIZAÇÃO DOS CONCEITOS DE LEITURA, COMPREENSÃO E ANALFABETISMO FUNCIONAL.	11
4.1.	LEITURA	11
4.2.	COMPREENSÃO	12
4.3.	ANALFABETISMO FUNCIONAL	14
5.	DISCENTE DO ENSINO SUPERIOR E SEU NÍVEL DE LEITURA E COMPREENSÃO	16
5.1.	COMO ISSO AFETA SUA FORMAÇÃO ACADÊMICA?	18
6.	CONCLUSÃO	20
Introdução
O surgimento e a popularidade recente da internet, computadores pessoais Smartphones e tables tornam esses dispositivos indispensveis na vida diária de pessoas, seja na comunicação, no trabalho ou no lazer.
O atual crescimento da indústria de eletrônicos e do setor imobiliário tem Incorporar novas tecnologias na residência, visando proporcionar e Melhore a segurança, o conforto, os efeitos de economia de energia e promova os serviços de manutenção e manutenção para estender sua vida útil enquanto avalia o valor da propriedade Transação imobiliária (MATTAR, 2007). Surgiu,a domótica, que é uma combinação de palavras latinas "Domus" com o termo "robótica" é uma "casa inteligente" que os usuários podem possuir controle sua residência através do app ou sistema. Este controle visa diminuir o trabalho realiza no dia a dia com tarefas do cotidiano que não são complexas, que executamos a todo tempo, e que agora por conta da domotica, porem ser realizadas de forma automatizada, proporcionando mais comodidade, interação e praticidade no dia a dia (PINHEIRO, 2004).
De acordo com MARIOTONI E ANDRADE (2007), domótica é nada mais que a utilização da eletrocina, da eletricidade, e ou das tecnologias que a todo tempo nos fornece informações a respeito do ambiente residencial que vivemos, permitindo que o usuario possa gerenciar partes de sua casa que diretamente interferem no ambiente interno, de forma remota podendo ser de qualquer lugar do mundo ou local, o que nos dá mais segurança, um conforto bem maior, gestao de consume do Sistema eletrico de toda a casa, e uma possibilidade maior e melhor de comunicação. 
A utilização de todas estas tecnologias constitui o processo de automação residencial( ou domótica) que através do uso de um Sistema capaz de interpretar os comandos humanos e enviar comandos para um microcontrolador, irá viabilizar a comunicação entre um proprietario e sua residencia aliada a capacidade do equipamento, proporcionando comodidade e interatividade.
De acordo com autores MARIOTONI E ANDRADE (2007), os sistemas automatizados proporcionam uma melhor mobiliade, conectividade e portabilidade que outros dispositivos não sao capazes de entregar. Há uma grande espectativa para que este tipo de sistema seja mais comumente encontrado em poucas decadas ou ate anos, por conta de todos os avanços que a tecnologia, proporciona para gerar maior comodidade em todas as tarefas do cotidiano, fazendo com que o valor de mercado destas tecnologias que hoje, uma parcela menor de pessoas tem, por conta de todos os custos e valores envolvidos, para criação do Sistema, implementação e venda, os valores ainda sao altos, porem com o avanço da tecnologia, os valores irao abaixar em muito pouco tempo, fazendo com que mais pessoas possam aproveitar destas tecnologias, com a popularização da tecnologia poucas pessoas nao irão querer aproveitar de todos os avanços e melhorias que serao implementadas no contexto social em um todo, porque ligar a luz pelo interruptor se posso comprar ou programar um robo para que ligue a luz quando houver um comando ou uma movimentação em determinado cômodo?
Atualmenteo mais comumente usado para ativar qualquer dispositivo eletrônico ou equipamento eletrônico doméstico é realizado por meio de um interruptor ou controle remoto. Ambos fornecem interatividade mínima para o proprietário, exigindo que o proprietário esteja na localização do dispositivo a ser controlado.
(PINHEIRO, 2004). De um modo geral, a maioria das residencias só usa essa tecnologia, o que exige esforço desnecessário, usado para realizar tarefas simples, como por exemplo ligar ou desligar uma lâmpada.
Objetivo Geral
Objetivos específicos
Qual será o objetivo da proposta do desenvolvimento deste trabalho? Terão uma proposta de desenvolvimento de um Sistema físico que tenha como base o microcontrolador Arduino, e o Sistema de reconhecimento por voz, implementando a Inteligência Artificial com nome de Jarvis que por sua vez é uma grande aliada a interação de sistemas com inteligência artificial e Arduino para automação de residências e diversas outras interações de IA com sistemas automatizados, que por sua vez irá proporcionar ao usuário uma interação usuário-ambiente para ser automatizado. A apresentação deste Sistema se dará pela criação de uma maquete que, terá condições ideias e reais em uma residência, simulando um Sistema real em um residência real, proporcionando a avaliação.
Como objetivos principais da criação do Sistema de interação automatizada serão.
2
Qual é o motivo da criação do Sistema automatizado dentro de uma residência? Dentro da interação automatizada, precisamos compreender o funcionamento da domótica e IA(inteligência artificial) para fins de pesquisa pois o desenvolvimento de um sistema que reconheça a voz do usuário através de comandos para o Arduino devem auxiliar as pessoas que irão utilizar esse tipo de automação, e compreender o funcionamento da domótica e da IA para fins estudantis, a fim de desenvolver um Sistema que reconhecera a voz do usuário que irá mandar comandos para o Arduino, também desenvolver um protótipo em miniatura que simulara um caso real de interação homem-residência, através dos Sistema automatizado, para que seja possível construir um Sistema interativo entre as ligações elétricas necessárias entre o Arduino, a placa de automação, e o protótipo da residência, simulado um caso real, e por último para demostrar novos modelos e empregos de tecnologias para interação não só de residências, mas de tudo que pode gerar um conforto e uma interação melhores entre seus respectivos locais fisicas e o usuário.	
Revisao Bibliografica
Algoritmos
O que é algoritmo:
Algoritmo ou em inglês: script, é como se fosse uma espécie de “roteiro” para um computador, só que esse roteiro é constituído por sequências de códigos, onde leva em consideração dados de entrada (inputs) e produz dados de saída (outputs), e assim executam uma determinada tarefa computacional, onde esses resultados podem ser mostrado em uma tela (monitor) ou então a tarefa é executada em backend,e assim nós não vemos o resultado.
Um algoritmo é uma sequência extremamente precisa de instruções que, quando lida e executada por uma outra pessoa, produz o resultado esperado, isto é, a solução de um problema. (Marcos Castilho, 2020)
 
Essas sequências de códigos devem ser bem explícitas, não podendo haver ambiguidades e muitas menos várias interpretações, ou seja, um código escrito uma vez deve sempre trazer o mesmo resultado.
Para o desenvolvimento de um algoritmo eficiente é necessário obedecermos a algumas premissas básicas no momento de sua construção:
· Definir ações simples e sem ambiguidade; 
· Organizar as ações de forma ordenada 
· Estabelecer as ações dentro de uma sequência finita de passos.
 Obedecendo essas premissas terá um código e que funciona. Assim o computador conseguirá fazer pequenas tarefas automatizadas, facilitando a execução de tarefas do usuário.
Um bom código é sempre aquele que funciona, mas ele deve também ser leve, pois assim executam uma tarefa em menos tempo e facilitam as futuras manutenções no código. Para um algoritmo ser leve, deve seguir uma boa arquitetura, ser planejado antes de ser codificado, definir funções iniciais ao seu algoritmo para que não sejam um monte de código soltos e estar sempre revisando o que já foi feito na fase de implementação para que certifique-se de o algoritmo está seguindo uma boa arquitetura
O objetivo da arquitetura de software é minimizar os recursos humanos necessários para construir manter um determinado sistema (Robert Cecil Martin, 2019) 
A medida da qualidade do design corresponde à medida do esforço necessário para satisfazer as demandas do cliente. Se o esforço for baixo e se mantiver assim ao longo da vida do sistema, o design é bom, se o esforço aumentar a casa novo release ou nova versão, o design é ruim;
O que é um programa
Quando um algoritmo está finalizado e todo implementado temos enfim um programa, o resultado da implementação de um algoritmo. Tendo um programa pode então ser executado pelo computador e assim ter o resultado final da sua execução.
Um programa é a codificação em alguma linguagem formal que garanta que os passos do algoritmo sejam executados da maneira como se espera por quem executa as instruções (Fabio Silva, 2020) 
Imagine que uma pessoa vai entrar em uma cozinha pela primeira vez em sua vida e resolve fazer um bolo de chocolate. A próxima imagem representa um algoritmo com os passos para fazer um bolo de chocolate. Essa pessoa é um novato e precisa de instruções bem detalhadas, pois ele é inexperiente e por exemplo ele não sabe o que é “bater as claras em neve”.
Agora temos as instruções bem detalhadas, mas ainda assim o inexperiente ainda vai ter dificuldades como: separar gemas. Ele ainda não sabe fazer isso. E qual o tempo limite do processo de detalhamento da solução.
Nesse caso o problema é que o cozinheiro que escreveu a instrução não sabia em que nível estava a pessoa que estava lendo. Então é necessário estabelecer nível mínimo de conhecimento para quem irá executar a tarefa, assim a pessoa que irá escrever saberá em que nível de detalhamento deixar a receita.
Assim o programa poderá ser escrito de forma detalhada o suficiente para que a pessoa consiga executar a tarefa.
Como estamos pensando em deixar que o computador execute um algoritmo, precisamos escrever um programa em uma linguagem na qual o computador possa entender as instruções para posteriormente poder executá-las com sucesso. (Fabio Silva, 2020) 
Assim como um cozinheiro que faz instruções para um cozinheiro novato, os desenvolvedores de software precisam escrever instruções detalhadas para que os computadores possam executá-las, pois os computadores pois os computadores conhecem apenas instruções lógicas então é necessária cria algoritmos neste nível.
Linguagens
Todo tipo de informação que deve ser armazenada, processada ou transferida é necessário está no formato de uma linguagem. No processo de comunicação a linguagem é essencial. Quando duas máquinas se comunicam, elas estão trocando informações, nesse caso isso se chama protocolo. Para que um ser humano consiga programar, armazenar e buscar informações em um computador, é preciso uma linguagem que ele consiga entender, pois o computador entende apenas a linguagem de máquina, ou seja, não há uma comunicação direta entre eles, é necessário uma linguagem intermediária para que haja uma comunicação entre a máquina e o ser humano, essas linguagens são as chamadas linguagens de programação, classificadas como linguagem intermediária.
As linguagens de programação tem a função de intermediário entre a máquina e o ser humano devido ao seu nível complexidade, onde o nível de complexidade é definido pela capacidade que ser o ser humano tem de entender, ou seja, quanto mais difícil para nós mais baixo é o nível,e enquanto mais fácil maior é o nível. A linguagem de alto nível ela é bem parecida com nossa escrita, exemplo de linguagens de alto nível: Python, Java, Javascript, C#, Perl, PHP e várias outras. As linguagens de baixo nível são aquelas que as instruções são bemparecidas com aquelas que serão executadas no processador (binário), um exemplo de linguagem de baixo nível é a linguagem de montagem (assembly).
Os processadores não conseguem executar códigos do nível das linguagens de programação, por isso os códigos de alto nível devem ser traduzidos para códigos de baixo nível e quem faz essa tradução são os compiladores.
Quando um programa é implementado em uma linguagem de máquina, ele irá conter instruções para aquele processador específico, e a instrução funcionará apenas para aquele processador e para outros parecidos, sendo assim, se quisermos que um programa funcionasse em dois computadores diferentes, seria preciso criar dois códigos, sendo um para cada computador. Mas isso não é nem um pouco viável, pois se precisássemos que um programa rodasse em cem computadores, precisaríamos escrever esse programa cem vezes. A linguagem de programação também resolve esse problema, pois ela contém instruções abstratas, que podem ser compilado em máquinas diferentes, se seja, todos o computador com a linguagem natural diferente entendem a mesma coisa quando se recebe instrução de uma linguagem de programação, sendo assim, tem sempre o mesmo resultado final.
Compiladores
De maneira resumida um compilador é um programa de computador (ou um grupo de programas) que lê um código fonte de uma linguagem qualquer que pode ser compilada, ele cria um programa semanticamente equivalente ao que escrito originalmente pelo programador, porém escrito em outra linguagem, código objeto, ou seja, ele transcreve para linguagem de máquina.
Posto de forma simples, um compilador é um programa que lê um programa escrito numa linguagem, a linguagem fonte e o traduz num programa equivalente numa outra linguagem, a linguagem alvo. (Alfred Aho, 1995) 
De acordo com o livro Compiladores Princípios, Técnicas e Ferramentas existe uma variedade enorme de compiladores, pode até ser assustador a quantidade. Esse número enorme de compiladores é devido a uma variedade ainda maior de linguagens fonte, desde as mais tradicionais como Pascal e Fortran até as linguagens mais novas. Podendo ser classificado algumas vezes os compiladores como de uma passagem, como de passagens múltiplas, de carregar e executar, depuradores ou otimizantes. 
Existem alguns compiladores que produzem código de montagem, assim é passado para um montador que será processado futuramente. Existem os compiladores que executam a tarefa do montador, neles é reproduzido um código de máquina relocável, que pode ser passado para um carregador/editor de ligações diretamente.
O código de montagem é uma versão mnemônica do código de máquinas, nela ao invés de códigos binários são usados nomes, nas operações são fornecidos nomes aos endereços de memórias. 
Depois dos primeiros compiladores, começaram a criar ferramentas para facilitar o processo de fazer novos compiladores. Foram referidos como compiladores de compiladores, geradores de compiladores e sistemas de escrita de tradutores. Muitos dos compiladores de compiladores criam rotinas de análises lexicais fixas para ser usado no compilador gerado. As ferramentas que têm maior possibilidade de sucesso são as que escondem os detalhes do algoritmo de geração e produzem componentes que conseguem sem muitas dificuldades a serem integrados à parte restante do compilador.
Estrutura Sequencial
Nessa estrutura os passos (instruções) do algoritmo é construído de maneira sequencial, ele é executado na ordem em que os códigos foram escritos, da primeira linha até a última, durante um tempo finito.
Quando no algoritmo a presença de condições, laços de repetições e funções. O algoritmo deixa de seguir a sequência visual do código, ele ainda segue uma sequência, só não é sequência decrescente de linha que vemos na tela, ou seja, o código não vai da linha um até a última linha na sequência, pode ser que exista condições e assim precisará pular uma parte do código, ou então um pode haver um laço de repetição que quando chegar na linha 17 ele terá que voltar pra linha 10 e executar tudo de novo, e pode ser que também exista um grupo de código que pode repetir várias vezes durante o algoritmo e assim ele ficam numa parte reservada do código para quando precisar chamá-la basta apenas invoca-la.
Quando há necessidade de um implementar um algoritmo todo sequencial é por que o problema que esse algoritmo irá resolver é bem simples, pois um algoritmo todo sequencial, não é muito viável, ele fica com poucas possibilidades e perde boa parte do poder que a programação nos dá. Nos próximos itens será possível entender o porquê não é viável fazer um programa todo sequencial.
Estrutura condicional
A Estrutura Condicional são elementos no código que possibilita a escolha de um grupo de ações e estruturas para serem executadas quando determinadas condições são ou não satisfeitas pelas condições, caso existam duas ou mais possibilidades. Uma maneira melhor de entender as estruturas condicionais é imaginar uma pessoa que pretende ir ao mercado, mas não sabe se o mercado está aberto, então ele vai até o mercado e ao chegar no mercado ele terá duas possibilidades, entrar se o mercado estiver aberto ou voltar para casa caso o mercado esteja fechado. Ou seja, se o mercado está aberto, fulano entra, se não fulano volta. 
Entendo esse exemplo é possível compreender como funciona as estruturas condicionais em algoritmos
Em Estrutura Condicional existem a Estrutura Condicional Simples ou Composta, é a para melhor o entendimento é necessário aprofundar um pouco mais no assunto
Estrutura Condicional Simples
As estruturas simples são condições únicas, ou seja, o código é executado se a condição for verdadeira se não for o código continua a fazer o que já estava fazendo.
Exemplo se a condição for verdadeira:
Fulano está indo para o trabalho, mas antes deseja tomar um café da manhã, e assim vai a padaria, chegando no estabelecimento pede um café, então toma o café, continua o percurso até o seu trabalho.
Exemplo se a condição for falsa:
Fulano está indo para o trabalho, mas antes ele deseja tomar um café da manhã, assim vai a padaria, chegando no estabelecimento pede o café, mas o atendente lhe informa que o café acabou, devido a isso fulano volta para o percurso até o seu trabalho.
Fulano toma o café apenas se tiver café no estabelecimento, se não tiver o café ele continua a ir ao trabalho como ele já estava indo.
Estrutura Condicional Composta
Em estruturas compostas existem mais de uma condição, se a condição for verdadeira irá executar um grupo de ações, mas se a condição for falsa um outro grupo de ações será realizado.
Exemplo se a condição for verdadeira:
Fulano está indo para o trabalho, mas antes deseja tomar um café da manhã, e assim vai a padaria, chegando no estabelecimento pede um café, então toma o café, continua o percurso até o seu trabalho.
Exemplo se a condição for falsa:
Fulano está indo para o trabalho, mas antes ele deseja tomar um café da manhã, assim vai a padaria, chegando no estabelecimento pede o café, mas o atendente lhe informa que o café acabou, então pede para que lhe sirva um copo de leite, fulano toma o leite e volta para o percurso até o seu trabalho.
Agora na estrutura composta vemos que se uma condição não acontece como desejaria ele tenta uma outra condição. No exemplo quando não tem o café tem o leite, mas poderia acontecer de não haver leite também na padaria, então nesse caso ele poderia pedir um suco e se também não tiver pode pedir um chá ou simplesmente desistir e ir embora. E assim funcionaria a estrutura de um algoritmo condicional 
Estrutura de Repetição
Essa estrutura permite que seja executado mais de uma vez um mesmo trecho de código. Trata-se de uma maneira de executar alguns blocos de comandos quando atende uma condição, mas com a opção de repetir o mesmo bloco quantas vezes for necessário. Podemos ver que Estrutura de Repetição é uma evolução da Estrutura Condicional, a diferença entre entre-la é que se a condição for verdadeira uma parte do código podeser repetido várias vezes, de acordo com a necessidade do problema.
As estruturas de repetição são úteis, por exemplo, para repetir uma série de operações semelhantes que são executadas para todos os elementos de uma lista ou de uma tabela de dados, ou simplesmente para repetir um mesmo processamento até que uma certa condição seja satisfeita.
Exemplo:
Um marceneiro pretende pregar um prego em uma tábua, ele encosta o prego na tábua e começa dando a primeira martelada é feito uma condição para que a segunda martelada aconteça, o prego já está preso o suficiente? se não martela mais uma vez, e assim é feito até que o prego esteja preso. A condição era o prego estar preso, o laço de repetição era martelar.
Algoritmos no dia a dia:
Um exemplo bem simples. Imagine que você é um diretor(a) de uma escola e precise calcular a média dos alunos para saber se o aluno foi aprovado ou não. Um algoritmo computacional consegue resolver seu problema com muita facilidade. Estudando um pouco de desenvolvimento de algoritmos computacionais é possível compreender como desenvolver um script simples para calcular a média dos alunos e retornar se ele foi aprovado ou não, pois a ideia é bem simples, ficando fácil o desenvolvimento.
A ideia é calcular quatro valores que podem ser diferentes para cada aluno, levando em conta que será calculado o ano letivo inteiro, ou seja, a cada três meses o aluno irá fazer uma prova, que será o resultado da sua nota do trimestre. Para esses valores dos quatros trimestres chamaremos de variáveis. Nessas variáveis serão guardados os resultados das notas dos alunos, ou seja, a variável representa a nota do aluno. Para não ficar confuso podemos colocar apelidos nessas variáveis, neste caso chamaremos elas assim: nota1, nota2, nota3 e nota4. O número no final de cada “apelido” se refere ao trimestre no qual o aluno fez a prova. O computador entende que são quatro espaços diferentes alocados na memória, ele diferencia uma da outra pelo “apelido” que colocamos nelas, como mostrei no exemplo.
O cálculo para saber a média é bem simples:
Sabendo como funciona a formula só precisamos adpatar ao nosso contexto, ficando assim:
media = nota1 + nota2 + nota3 + nota4 / 4
Ou seja, o resultado da média é a soma de todas as notas dividido pela quantidade das notas. Agora que a fórmula está adaptada ao nosso contexto, precisamos passar a fórmula para o computador, e para isso é necessário a linguagem de computação. Hoje existem várias linguagens de computação, e cada uma delas tem suas vantagens, mas para o exemplo irei utilizar a linguagem “Python”, pois é bem simples e fácil de entender. 
Primeiro precisamos declarar as variáveis que receberão a nota do aluno.
nota1 = float(input('nota do 1º semestre '))
Essa linha de código significa: nota1 recebe um input, ou seja, qualquer coisa que for digitado quando esse código for executado. Entre as aspas simples é um texto que será mostrado no console para orientar quem está executando o código. Note que tanto o texto entre as aspas e o “input” então dentro de parênteses, mais precisamente então dentro do “float”, e com isso, o computador entende que o que será digitado será um número com vírgula, exemplo: 1.5, 2.3, 7.7.
Entendendo essa primeira linha de código já conseguimos receber as notas dos alunos. Agora só precisamos replicar para receber as notas dos semestre 2, 3 e 4. Ficando assim:
nota1 = float(input('nota do 1º semestre '))
nota2 = float(input('nota do 2º semestre '))
nota3 = float(input('nota do 3º semestre '))
nota4 = float(input('nota do 4º semestre '))
Agora que já conseguimos receber as notas precisamos calcular a média delas: 
media = (nota1 + nota2 + nota3 + nota4) / 4
Para isso precisamos de mais uma variável, que irá guardar o resultado do cálculo. Essa variável recebeu o apelido de “media”, pois ela vai guardar a média do aluno. A variável média receberá a soma da nota1, nota2, nota3 e a nota4 e dividirá por 4, que é a quantidade total de notas. Feito isso o computador já sabe a média do aluno, mas o resultado não será apresentado na tela, pois não mandamos o script mostrar o resultado. Para isso usará o comando “print()” , que serve para imprimir tudo que estiver dentro dos parênteses na tela. Vale ressaltar que, qualquer caractere que estiver entre aspas simples ou duplas será mostrado na tela, e se estiver fora das aspas o computador entende como variável, lista ou objeto, e ao invés de mostrar os caracteres escritos ele mostrará o valor que os caracteres representam. Ficando assim:
print('Média: ', media)
O comando irá mostrar a palavra “Média:” e em seguida o valor da variável média. 
Indo um pouco mais além, podemos acrescentar
if media >= 6:
 print('Aprovado')
else:
 print('Reprovado')
Esse código retorna se o aluno foi aprovado ou não. A primeira linha significa: Se o valor da média for maior ou igual a 6 execute a próxima linha. Agora a terceira linha: Se a condição da primeira linha não acontecer execute a quarta linha. Resumindo, Se a média for maior ou igual a 6 escreva “Aprovado” senão escreva “Reprovado”. 
Conclusão
Os algoritmos ou scripts, tem nos dados imensas possibilidades do que fazer, ela está presente no nosso dia a dia para executar desde tarefas simples até as mais complexas, como elaboração de redes neurais. A evolução das linguagens de programação tem sido algo extraordinário nos últimos anos, com sintaxes mais simples e com muito mais funcionalidades. Cada vez mais pessoas têm entrado no mundo da programação pois percebem a grandiosidade que é a programação. ela é uma ferramenta muito poderosa para as empresas nos dias atuais, podendo automatizar tarefas como geração de relatório, coleta de dados, envio de e-mails e etc. Tendo o benefício de executar a tarefa com mais agilidade e livre de erros humanos. Dominar a área de desenvolvimento dará grandes vantagens para a vida pois sempre que precisar automatizar uma tarefa você poderá desfrutar dos benefícios dos códigos computacionais para que realizem a tarefa para você.
Arduino
Sistemas Digitais
Uma das opções disponíveis atualmente são os Circuitos Integrados de Aplicativos Específico ou ASIC (Circuito Integrado Específico de Aplicativo). ASICs representam o máximo que podemos obter em termos de desempenho e eficiência energética, mas seu desenvolvimento é tempo complexo e exigente, ferramentas sofisticadas e profissionais altamente treinados. A ASICs também é cara de fabricar, geralmente variando de centenas de milhares de dólares a Milhão de dólares. Além disso, dada a sua natureza estática, uma vez que um projeto é fabricado e contém um defeito, não pode ser corrigido após o produto ter sido lançada no mercado, introduzindo importantes fatores de risco no seu desenvolvimento.
Arduino
O objetivo era conceber um dispositivo que fosse económico, funcional e fácil de programar, sendo assim acessível a estudantes e designers amadores. Além disso, foi adotado o conceito de hardware livre, o que significa que qualquer pessoa pode montar, modificar, melhorar e customizar o Arduino, a partir do mesmo hardware básico.
Atualmente, qualquer dispositivo eletrônico possui algum tipo de inteligência embutida. Essa capacidade de analisar e responder a estímulos pode ser implementada usando uma série de tecnologias. 
Como alternativa aos ASICs, por exemplo, dispositivos programáveis, como Processadores de uso geral - GPPs, processadores para tratamento digital de sinais e microcontroladores. Todos esses dispositivos têm o mesmo princípio de operação, executando uma série de instruções previamente armazenadas em uma memória externa para eles. A capacidade que esses dispositivos têm para ter seus a programação alterada, praticamente em qualquer lugar e a qualquer hora, introduz uma grande flexibilidade para produtos desenvolvidos com este tipo de tecnologia. O revés introduzido através do uso de dispositivos programáveis está no maior consumo de energia e com baixo desempenho ASICs, pois seu funcionamento é limitado à execução sequencial de instruções.Uma categoria intermediária entre ASICs e dispositivos programáveis são dispositivos configuráveis, como FPGAs (Field Programmable Gate Arrays). A diferença entre os termos empregado no presente trabalho, programável e configurável, reside na granularidade de computação que pode ser modificada em tempo de execução. GPPs modificam a função realizada em uma ALU com cada nova instrução - granularidade no nível da palavra, enquanto em FPGAs em cada arquivo de configuração alteram as funções executadas no hardware no nível função lógica - granularidade de nível de bit. FPGAs podem oferecer desempenho próximo circuitos dedicados (ASICs) com a flexibilidade de circuitos programáveis. Estima-se que, em média, os projetos implementados em FPGA sofrem uma perda de eficiência de 5 a 25% em termos de área ou velocidade quando comparado a uma implementação ASIC.
Field Programmable Gate Array 
Eles também oferecem a flexibilidade de sistemas programáveis. comportamento configurado de forma rápida e fácil.
FPGAs representam uma classe de dispositivos que têm a capacidade de implementar diferentes funções lógicas em hardware, permitindo obter desempenho semelhante ou próximo ao dos ASICs, ao possibilitar a implantação de sistemas com alto grau de paralelismo.
Além desses benefícios, cita-se a vantagem financeira da utilização de FPGAs, por serem 12 (doze) produzido em altíssima escala, chegando ao mercado com um preço bastante competitivo.
Deve-se notar que o custo dos produtos eletrônicos desenvolvidos com dispositivos FPGA é competitivo com ASICs apenas para pequenos e médios volumes de produção. No entanto, os dispositivos FPGA têm a limitação de implementar apenas circuitos digitais. Esta classe de circuitos integrados também representa o estado da arte em termos de processos de fabricação. Para efeito de comparação, no momento em que este trabalho está em andamento desenvolvido, a mais recente série Xilinx de FPGAs, Virtex-7, é fabricado usando um Processo de 28 nm, enquanto o processador mais recente lançado pela Intel usa tecnologia de 32 nm.
Junto com as funcionalidades básicas de um FPGA, é comum que esses dispositivos também incluem módulos de hardware auxiliares, como memórias RAM, gerenciadores de relógio, multiplicadores, controladores de rede (MAC Ethernet) e até mesmo processadores, tornando-os verdadeiras plataformas para o desenvolvimento de SoCs (Sistemas em um Chip).
Fluxo Genérico 
No fluxo do projeto para FPGAs, é comum o uso de estratégias top-down de, ou seja, após definir uma arquitetura para o projeto a ser implementado, a implementação dos primeiros passos não influencia no resultado final que será mapeado no FPGA. Recomenda-se segmentar o projeto em níveis hierárquicos, mas isso não é obrigatório para uma estratégia de design convencional de cima para baixo. Abordaremos a seguir as etapas de um fluxo de projeto convencional para FPGAs.
Independentemente do fabricante do dispositivo a ser utilizado, todos seguem fluxos semelhantes. O fluxo geral de projetos para FPGAs segue as seguintes etapas: síntese lógica, mapeamento, posicionamento e roteamento e geração de fluxo de bits.
Síntese Lógica
As ferramentas de síntese buscam identificar estruturas que foram descritas no código-fonte HDL e gerar seus equivalentes em componentes lógicos ainda genéricos. Após esta etapa, é comum que o diagrama de visualização do projeto sintetizado seja disponibilizado pelas ferramentas CAD.
Mapeamento
As ferramentas buscam nesta etapa otimizar a implementação da arquitetura definida pela descrição HDL, por exemplo, ser capaz de definir as estruturas que armazenam informações como um conjunto de flip-flops, ou como um bloco específico de memória disponibilizado pelo dispositivo usado.
Para esta etapa, é obrigatório definir a arquitetura e o membro da família FPGA que será usado, para que a ferramenta CAD possa inferir corretamente os componentes de lógica a ser usada.
Estrutura e Funcionamento dos dispositivos FPGAs
Para entender como funciona, podemos pensar no FPGA como um dispositivo composto por duas camadas. Um, a camada lógica, que abriga estruturas lógicas genéricos, cujo comportamento é definido pelo estado dos bits armazenados na camada de Memória de Configuração.
FPGA visto como duas camadas: Lógica e Memória de Configuração
Basicamente, na Camada Lógica encontraremos três tipos de estruturas configuráveis: Bloco lógico configurável (CLB), interconexões e blocos de entrada / saída.
Estrutura básica de um FPGA formado por Blocos Lógicos interconectados
O multiplexador M1 implementa uma tabela, chamada Lookup Table (LUT), responsável por implementar tabelas de verdade de funções booleanas selecionando as saídas do Registradores R, permitindo a criação de qualquer lógica combinatória. O registro R1 é usado para registrar a saída em circuitos lógicos que requerem status de manutenção. O multiplexador M2 seleciona se a saída do circuito será o LUT ou o estado armazenado em R1.
Reconfiguração Parcial e Dinâmica
Podemos definir Reconfiguração Parcial e Dinâmica (RPD) como a técnica que permite, após a configuração de um FPGA com uma determinada implementação, ser possível reconfigurar partes deste mesmo FPGA sem comprometer a integridade ou interromper o funcionamento de suas outras partes. Esta reconfiguração pode ser realizada de forma autônoma pelo próprio FPGA
Vantagens e desvantagens de RPD
A aplicação do RPD também apresenta algumas desvantagens, como uma degradação de aproximadamente 10% na frequência do relógio, em parte devido à restrição que impõe às otimizações em circuitos reconfiguráveis. Outra desvantagem é a adição de novas etapas no fluxo de design.
Exemplos de Aplicações de RPD
Interface de rede multiporta.
Podemos considerar um switch de rede como um exemplo típico de uma possível aplicação RPD. Freqüentemente, os switches implementam diferentes protocolos de rede em suas portas, mas apenas um é usado. Nesse caso, o uso de técnicas de RPD pode evitar o desperdício de manter o hardware dedicado ao implementar os outros protocolos não utilizados.
Dispositivo periférico usando barramento PCI Express.
Podemos encontrar FPGAs em dispositivos conectados a um barramento PCI-Express. A especificação deste barramento estipula um tempo máximo para que todos os dispositivos respondam ao controlador. Muitas vezes, esse tempo não é suficiente para que todo o processo de configuração do FPGA seja concluído.
Processador de pacotes reconfigurável dinámicamente
Em uma aplicação que necessita processar um grande número de pacotes de rede, é possível aplicar a técnica RPD para que o hardware implementado no FPGA possa ser alterado em tempo real dependendo do tipo de pacote recebido.
Arquitetura Virtex 5
No caso da arquitetura Virtex 5, os LUTs são implementados usando RAMs de 64 bits cada. Cada LUT tem seis entradas e duas saídas independentes, de modo que cada LUT é capaz de para implementar qualquer função booleana com 6 entradas, ou duas funções booleanas com 5 entradas, desde que essas funções compartilhem algumas das entradas.
Na arquitetura Xilinx, cada CLB é dividido em estruturas chamadas Slices. No caso de Virtex 5 cada CLB contém duas fatias, cada uma delas conectada a uma matriz de chaveamento.
CLB contendo Slices conectados a uma matriz de chaveamento
Cada fatia contém 4 LUTs, quatro registros para manutenção de estado, além de circuitos que auxiliam na implementação da lógica de transporte em operações aritmética.
Os Slices também possuem outras estruturas para auxiliar na implantação de circuitos comum na maioria dos projetos. No caso de SLICEMs, LUTs podem ser configurados para, junto com as caixas registradoras disponíveis no Slice.
Recursos de memória RAM interna
A arquitetura FPGA Virtex 5 oferece duas alternativas para implementação de memória Intrachip RAM, o uso de memórias RAM internas chamadas Block RAMs ou BRAMs e o uso de Memória RAM distribuída usando LUTs disponíveis em cada CLB.As memórias RAM dedicadas da arquitetura FPGA Xilinx são chamadas BRAMs. Estessão blocos de memória posicionados em todo o dispositivo para uso como memórias de acesso rápido para lógica dedicada ou como FIFOs. Cada BRAM é uma memória RAM de porta dupla com 36kbits de capacidade.
É possível definir diferentes domínios de relógio para cada porta a fim de gerar um FIFO assíncrono. Para evitar problemas de acesso simultâneos é possível definir a seqüência de prioridades de operação em cada porta através dos primitivos Xilinx. Ambas as portas de cada BRAM possuem primitivas de prioridade do tipo ler primeiro ou gravar primeiro.
Recursos Aritméticos
Além da lógica Fast Carry Chain já mencionada em 2.1.1, FPGAs da família Virtex 5 eles também têm blocos DSP (Processador de Sinal Digital). Esses blocos têm estruturas otimizadas para realizar várias operações aritméticas, como multiplicação, soma e comparação.
Recursos de Hardware para RPD
O elemento chave para a implementação do RPD em um FPGA reside em seus mecanismos programação. No caso da tecnologia Xilinx, mais especificamente um dispositivo embutido no FPGA, denominado ICAP (Porta de Acesso à Configuração Interna). Compreendendo o 19 a operação do ICAP se torna simples depois de estudar outra interface de programação Xilinx, Chamada SelectMap.
Internamente, a memória de configuração FPGA é organizada em uma matriz contendo linhas e colunas. A menor unidade endereçável nesta memória é chamada de quadro, ou quadro. Uma tabela não corresponde necessariamente a um CLB, geralmente correspondendo a vários CLBs.
Assim, embora o ICAP seja capaz de acessar e reconfigurar os frames do FPGA tanto em linhas quanto em colunas, não é possível reconfigurar um CLB particular. A granularidade de reconfiguração parcial em dispositivos Virtex 5 compreende:
•	 Regiões de corte: 20 CLBs de altura por 11 CLBs de largura
•	 Regiões BRAM: 4 RAMB36
•	 Regiões DSP: 8 DSP48
•	 Regiões IOB: 40 IOB (um banco)
Do ponto de vista prático, a reconfiguração parcial pode ser realizada de forma 2D, ou seja, módulos retangulares, que não cobrem necessariamente toda a altura do dispositivo.
Lógica de interface entre lógica estática e lógica reconfigurável
A interface entre a parte estática e a reconfigurável do projeto é feita pelos pinos atribuídos à partição reconfigurável. Nestes pontos está inserido na periferia da lógica estático um componente âncora para lógica reconfigurável. Este elemento de a ancoragem é chamado de lógica de proxy, normalmente uma LUT é usada para esta finalidade que terá apenas uma entrada usada, então chamada LUT1. 
A existência destes elementos é o que torna possível e garante a conexão física correta entre o roteamento lógico módulos estáticos e reconfiguráveis.
A atribuição desses elementos é feita automaticamente pela ferramenta, mas se for necessário ou desejável, também é possível atribuir a localização desses pinos virtuais usando restrições específicas no arquivo UCF do projeto.
Arquitetura dos bitstreams parciais
Os fluxos de bits parciais possuem um cabeçalho com informações sobre sua implementação, essas informações são adicionadas pela própria ferramenta bitgen, que é responsável pela geração dos fluxos de bits no ambiente Xilinx. 
Isso ilustra a composição desse cabeçalho, que contém informações como nome do módulo, data de implementação e dispositivo alvo da implementação. Depois disso, o resto da composição do fluxo de bits segue a estrutura básica usada pelos dispositivos Virtex.
Fluxo Genérico do Projeto
No fluxo de projeto para FPGAs é comum a utilização de estratégias de desenvolvimento top-downde, ou seja, após a definição de uma arquitetura para o projeto a ser implementado, a execução dos primeiros passos não influencia no resultado final que será mapeado no FPGA .
 Recomenda-se segmentar o projeto em níveis hierárquicos, mas isso não é obrigatório para uma estratégia de design convencional de cima para baixo. Abordaremos a seguir as etapas de um fluxo de projeto convencional para FPGAs. Independentemente do fabricante do dispositivo a ser utilizado, todos seguem fluxos semelhantes. 
O fluxo geral de projetos para FPGAs segue as seguintes etapas: síntese lógica, mapeamento, posicionamento e roteamento e geração de fluxo de bits.
Esses dispositivos estão cada vez mais sendo utilizados na indústria de sistemas eletrônicos, embarcados e em tempo real, devido à facilidade de configuração e alto nível de desempenho. Eles também têm um longo ciclo de vida e baixa dissipação de energia, um recurso antes presente apenas em dispositivos ASIC. Além dos diversos dispositivos e periféricos integrados aos FPGAs, outro atrativo é a grande versatilidade na utilização de seus recursos, podendo inclusive ter parte de sua funcionalidade alterada na operação para atender a demandas específicas, conforme demonstraremos utilizando RPD.
 	Tendo em vista esta característica de configurabilidade, que agrega a flexibilidade do software ao hardware, uma solução de fluxo de projeto utilizando RPD é apresentada no decorrer desta proposta, para aumentar a flexibilidade dos projetos e diminuir o consumo de área em projetos lógicos programáveis plataformas que usam FPGAs com essa funcionalidade. Este fluxo de projeto será desenvolvido utilizando as ferramentas fornecidas pela Xilinx, que hoje é um dos principais fabricantes de FPGA.
 	O fluxo de design para aplicativos que usam a Reconfiguração Parcial Dinâmica é estável e muito mais acessível e automatizado do que antes. No entanto, o design de um projeto inteiro que necessitou de um processador embarcado é muito extenso, o que pode confundir ou atrapalhar o fluxo de desenvolvimento do projeto.
Inteligencia artificial
Introdução a Inteligência artificial
A inteligência artificial e a robótica sempre foram alvo de especulação, debate e crítica desencadeada por pensamentos inspirados em muitos romances e contos de ficção científica. Neste capitulo iremos abordar detalhes sobre a inteligência artificial aplicada a automação residencial.
Definição de Inteligência artificial
Para Entender mais sobre o assunto, devemos primeiramente entender o que é ser inteligente, e também o que é ser artificial. Pessoas inteligentes têm sabedoria, são capazes de entender, são espertas e habilidosas. Segundo o autor Inteligência é a faculdade de saber, aprender, conceber e compreender, é o que difere o animal do ser humano. A inteligência artificial é um conjunto de teorias e técnicas usadas com o objetivo de desenvolver uma máquina que possa simular a inteligência humana (Larousse, 1999)
Os dois grandes pesquisadores Marvin Minky e Herbert Simon se empenharam para descrever o cérebro humano em forma de máquina, mais precisamente em forma de computador. O termo de Inteligência artificial foi utilizado por McCarthy em 1956, termo este que após vários anos sendo um dos maiores temas de filmes de ficção, a cada dia tem se tornado mais real, exemplo disso que existem várias maquinas que simulam seres humano, mesmo que com uma inteligência anos luz abaixo da do ser humano, algumas ações podem ser comparados aos de seres humanos, podendo ter semelhanças não somente na parte intelectual, mas também na parte física.
Sistemas inteligentes a vários anos andam em constante evolução (Nikolopoulos,1997), eles se baseiam em arquitetura que tem como base de conhecimentos, motores de inferências, módulos de aquisições de conhecimentos, módulos de explicações e a interface com o usuário. Até o momento em que perceberam que a alimentação de conhecimentos não foi automática, e que sempre era necessário alguém para operar e alimentar sua base de conhecimentos. Já na segunda geração dos sistemas foram adicionados o aprendizado automático, ou o aprendizado de máquina simbólico (symbolic machine learning).
No meio de todo o processo de implementação do sistema de aprendizado automático algumas linguagens de programação foram implementadas e apresentadas, algumas delas são, a linguagem Prolog, Fortan, Cobol e a Lisp, cada uma delas tem uma base diferente, mas todas foram utilizadas no meio deste processo de implementação.
SegundoKolodner et al. (1993) Analogia, Instancia, Evolução, Seleção, Reforço não supervisionado, bayesiano, explicações e indução são os métodos que mais tem influencia no aprendizado simbólico, sendo eles as bases para aplicação do sistema automatizado. O aprendizado é o principal motivo que levou o ser humano ter sua superioridade, é o princípio da inteligência. (SANCHES; GEROMINI, 2001).
Aprendizado denota mudanças no sistema, que são adaptáveis no sentido de que elas possibilitam que o sistema faça a mesma tarefa ou tarefas sobre uma mesma população, de uma maneira mais eficiente a cada vez (SIMON, 1983).
 
Tal definição nos apresenta uma dimensão do quão importante é o aprendizado automático, e quais mudanças podem ocorrer, nessas mudanças é necessário ter o sistema pronto para qualquer e eventuais adaptações, por conta que estas mudanças serão feitas automaticamente, com a maior eficiência e precisão possível. As técnicas e ferramentas usadas para automatizar o processo de aprendizado automático são coletadas a partir de conjunto de banco de conhecimentos (MITCHELL, 1997).
Um dos maiores desafios do aprendizado automático é criar softwares que tenham uma maior capacidade de aprender automaticamente com as experiencias dotadas, para obter uma prevenção deste problema é necessário entender os erros da maneira certa, para que sejam prevenidos erros maiores, que causariam uma queda no sistema ou algo similar.
Pode-se afirmar que um programa computacional é capaz de aprender a partir da experiência E com respeito a um grupo de tarefas T e segundo a medida de desempenho P, se seu desempenho nas tarefas T, medido segundo P, melhora com a experiencia E. (MITCHELL, 1997).
 
Baseado no modelo simbólico o paradigma de aprendizado automático, onde as representações estão expostas de formas logicas, com arvores de decisões e redes semânticas. Os algoritmos ID3 (QUINLAN, 1986) e C4.5 (QUINLAN, 1993) são unicamente utilizados em induções de arvores de decisão, que são constantemente utilizadas por pesquisadores que trabalham na área da Inteligência artificial.
De acordo com o autor (OSÓRIO, 1999) os sistemas de aprendizado automático podem ser classificados em três categorias, primeiramente o aprendizado supervisionado, que é quando se sabe o roteiro que o software segue, podendo ser possível generalizar aplicando-se de qualquer entrada, também o aprendizado não-supervisionado, que é quando não existe informação de um comportamento predefinido dos dados, sendo necessário o uso de algum algoritmo que tenta organizar ou classificar, procurando padrões que consigam identificar este comportamento, por último o aprendizado semi-supervisionado, que basicamente é a junção do supervisionado e o não-supervisionado, que realiza a busca por todos os resultados que foram abstraídos, atribuindo pontuações que possam medir a quantidade de erros e acertos, sendo possível com isso ajustar o melhor comportamento, e buscando o melhor resultado.
Domótica Inteligente
Antes de começar a falar sobre o assunto de domótica, iremos explicar o que é a domótica, o termo tem relação a automatização de residências e escritórios com equipamentos eletrônicos inteligentes, que são capazes de processar, gerenciar e terem um autopoder de aprendizado.
O termo de domótica, pode ser implementado e aplicado de varias formas, tendo como objetivo principal de quem o utiliza a comodidade, para melhor qualidade de vida de quem não quer mais se preocupar detalhes podendo automatizar trabalhos domésticos que são mais simples, como abrir uma porta, ligar uma luz, desligar um ar condicionado e afins, trazendo mais segurança e organizando diversos recursos que existem em uma residência (ANGEL, 1993).
Sistemas que utilizam a domótica precisam de vários outros dispositivos para auxilia-los no processamento e gerenciamento de dados, a quantidade de processos sendo executados ao mesmo instante é muito alta, permitindo assim um controle maior do equipamento sem perder todo o conforto que foi prometido e adicionado ao se instalar este sistema (BOLZANI, 2004).
As principais características da domótica inteligente são ter memoria, uma percepção inteligente de tempo, fazer variadas funções, ter uma interação inteligente com o habitante, capacidade de uma auto reprogramação e autocorreção. São necessárias várias técnicas de inteligência artificial para implementar todas essas ideias e conceitos inteligentes, termo este que está ligado a adaptação de regras, para adaptação dos habitantes nas residências.
A domótica antiga era muito medíocre em termos de inteligência, e isso a tornava pouco favorável para o usuário, por conta de que era muito cara, não havia nenhuma padronização, e só eram utilizadas funções básicas de sensores, exemplo disso são os medidores de temperatura, umidade que eventualmente transformavam parâmetros físicos em sinais elétricos capazes de tornarem legível para os sistemas de domótica, conectados a um controlador são usados atuadores que tem suas funções alteradas conforme os impulsos elétricos recebidos.
The Intelligent Room Project (BROOKS, 1997), do MIT ¹, é um dos artigos de maior importância e relevância quando se fala em Domótica inteligente, nele é descrito informações sobre salas inteligentes que fazem o uso de técnicas de reconhecimento de voz, visão computacional, que auxilia os habitantes em tarefas do cotidiano, projeto com foco em interação homem maquina, para estudos.
Os Autores (RUTISHAUSER; SCHÄFER, 2002) apresentam modelos de domótica inteligente que são baseados logicamente em Fuzzy e multi-agentes. O desenvolvimento do artigo cita a adaptação dos sistemas com o comportamento dos habitantes, que podem dinamicamente ser alteradas através de mudanças do cotidiano, utilizando uma politica que é conhecida desde a Idade media que é a de punição e recompensa. No fim do projeto foi concluído após teste em sistema real que o obteve-se êxito no processo. Porem alguns desafios ainda precisaram e precisam serem quebrados mesmo com todo o avanço tecnológico dentro do processo de execução, como por exemplo a interação com os habitantes que de uma forma geral abre espaço para novas regras serem usadas no processo de aprendizado que ocorre com o tempo de forma automática e não avalia de forma especifica.
Interagir, aprender, executar e automatizar um processo devem ser um dos papeis que uma residência inteligente deve executar, sendo necessário estar pronta para tomar decisões que são de grande importância que inclui o bem estar dos habitantes ate o gerenciamento de tarefas simples e dos dispositivos existentes na residência. É requisito principal que a residência se adapte ao comportamento dos habitantes, sendo possível assim que qualquer pessoa mesmo com menor familiaridade com o sistema possa utilizar e entender como funciona mesmo depois de vários anos que o sistema foi criado e implementado
 
Depois de o público conhecer uma residência automatizada, não haverá como retroceder, toda a cadeia de concepção da moradia, (a arquitetura construção etc.), evoluirá, e, principalmente, o ocupante do imóvel. Assim, deverão ser necessários vários profissionais que, interagindo, permitirão o real desenvolvimento das técnicas da domótica. (MITCHELL, 1997).
 
Domótica em negócio de expansão
Para o autor (LIPOVESTKY, 2005) o mercado vive uma nova fase, que apresenta novos aspectos, focando em maximização da vida e deixando mais de lado o luxo que uma vida pode trazer, onde a maioria das pessoas escolhem investir seu tempo e dinheiro nas coisas que proporcionam prazer. “Vivemos numa sociedade de consumo alimentada pela autonomia do indivíduo. Ela valoriza o bem-estar, as necessidades individuais.”
No começo da automação residencial o foco era para construções de casas que atendessem os seus proprietários que tinham uma renda elevada ou para aumentar o valor de mercado dos imóveis por conta de todas as automações. Com o tempo houveram mudanças de tendencias que passaram a considerar a evolução dos elementos que tornaram parte do dia a dia de pessoade classe media ou baixa como os microcomputadores, smartphones, tablets e a internet. No geral os valores de mercado dos itens de automação diminuíram consideravelmente foi o que possibilitou os profissionais da área de construção terem maiores possibilidades de desenvolver projetos com mais adequações as famílias modernas.
Depois de o público conhecer uma residência automatizada, não haverá como retroceder, toda a cadeia de concepção da moradia, (a arquitetura a construção. Etc.) evoluirá e principalmente, o ocupante do imóvel. Assim deverão ser necessários vários profissionais que interagindo, permitirão o real desenvolvimento das técnicas da demótica. (WERNECK, 1999).
 
Várias empresas e grupos trabalham no desenvolvimento de tecnologias, centradas em sistemas de automação residenciais. Em vários países desenvolvidos, a casa automatizada é um mercado consolidado, com várias soluções disponíveis e apropriado para atender às suas necessidades. O alto custo dos componentes continua sendo o principal obstáculo para aumentar a popularização da automação residencial (SAHUN, 2003). No próximo capitulo iremos falar sobre banco de dados e como pode ser feita a interação dentro da inteligência artificial e a domótica dentro do banco de dados, quais os frutos e vantagens que uma interação a tal nível pode acarretar e bonificar os desenvolvedores de um sistema inteligente.
Sistema de banco de dados
Neste capitulo iremos explorar a área de pesquisa determinado no trabalho. Iremos história explorar a história de banco de 
Introdução ao Banco de dados
Ao usar um cartão de crédito ou fazer uma transação de qualquer forma que possa ser realizada online, como em uma loja e em compras online o simples fato de visitar um determinado site é o mesmo que interagir com alguns bancos de dados. (WADE; CHAMBERLIN, 2012).
A partir de 1970 a tecnologia de Sistemas de Banco de dados ficou conhecida e acabou se tornando uma base para que desenvolvedores pudessem criar aplicações, de órgãos do governo e também de empresas da indústria em geral. Permitindo através de toda esta tecnologia a criação de aplicativos que teriam uma comunicação online, que servia para desktop de uma maneira mais rápida e que não acumulasse tantos custos para quem estivesse criando a aplicação. (GRAD; BERGIN, 2009).
Com a tecnologia avançando a cada momento, houveram mudanças significativas para todo o sistema de banco de dados, criando vários modelos novos que a cada implementação puderam acrescentar e fazer mudanças no sistema de banco de dados neste capitulo iremos citar os mais importantes, que são os que mais se falam, como exemplo:
· Relacional: O modelo de banco de dados relacional é uma coleção conjuntos variados de dados organizados em uma tabela por si possuindo relações com uma definição bem organizada entre elas. Com a criação do modelo relacional, houve também a criação de uma linguagem que pudesse interpretar os dados que o usuário deseja que o sistema execute, esta linguagem tem por nome SQL(Structured Query Language)linguagem essa que facilita muito a interpretação do banco, podendo ter uma interação melhor entre homem máquina. (WADE; CHAMBERLIN, 2012).
· Em memória: O modelo de banco de dados na memória é Sistema de gerenciamento de banco de dados que ao contrário dos modelos convencionais que utilizam a memória auxiliar do sistema, eles usam a memória principal para armazenar dados. Estes sistemas são usados geralmente em programas ou aplicações que demandam de um menor tempo para resposta, como em sistemas de comunicação em tempo real, que devem ter o tempo de resposta em altíssimo nível e qualidade (MOLKA; CASALE, 2015).
Conceitos
O Sistema de banco de dados, é um sistema que armazena registros em um computador, ele basicamente, serve como uma prateleira de arquivos para sistemas de computadores. Eles são gravados em sistemas de banco de dadas que usam tabelas e colunas para salvar cada dado, contendo vários formatos para salvar os dados em quantas tabelas o usuário quiser.
Ele armazena uma grande quantidade de arquivos e dados, sendo necessário um sistema para que o usuário possa requisitar os dados, para fazer alterações como criar, editar e excluir, porem para que o usuário possa obter o acesso a esses dados, é necessário usar o sistema de gerenciamento de banco de dados.
O objetivo do SGBD é criar um ambiente em que é possível o armazenamento e a recuperação dos dados, como uma ide, mas para banco de dados. Um sistema SGBD consiste em um modelo que é uma coleção de dados que se inter-relacionam em vários programas que o fazem acessível, eles existem de duas formas os bancos de dados centralizados, e os descentralizados ou distribuídos. O sistema centralizado todas as maquinas que fazem parte deste sistema ficam em apenas um computador ou em somente um site. E os seus integrantes são somente os dispositivos para armazenamento, os aplicativos de gerenciamento de dados e todos os dados, mas mesmo com esse sistema sendo centralizado, ele ainda pode ser acessado através de terminais diferentes, basta somente se conectar a ele, e ter acesso aos dados, porem o sistema em si, fica situado em somente um site ou máquina.
Juntamente com o avanço das tecnologias, melhorias nas áreas de bancos e dados e tecnologia de processamento em rede, e computadores com sistemas distribuídos em vários sites na rede, sistemas novos de banco de dados apareceram, foram eles os sistemas distribuídos que foi uma nova forma para se trabalhar com SGBDs, uma forma mais simples e mais interativa.
Segundo ÖZSU et al. (2001), “sistema de gestão de banco dados distribuídos são conceituados como um arquivo um sistema que permite a gestão de bases de dados distribuídas e isso transforma a distribuição de dados de forma clara para usuários como se fosse um sistema centralizado”.
TIPOS DE SGBDs DISTRIBUÍDOS
Segundo ÖZSU e KORTH existem dois tipos de SBDD, o SBDD homogêneo e o SBDD heterogêneo. Em todos os sites, os DBMS locais são semelhantes, ou a estrutura do banco de dados em todos os sites é a mesma. Já o SBDD heterógeno pode haver dois ou mais SBDD As diferenças se espalham entre sites ou na estrutura do banco de dados também diferente.
Os SGBDs homogêneos consistem em SGBDs locais que ofereçam interfaces idênticas ou pelo menos da mesma família (mesma empresa ou versões diferentes) e que forneçam os mesmos serviços aos usuários em diferentes sites (CASANOVA, 1985).
 
Os SGBDs distribuídos heterogêneos existem quando há necessidade de
integrar sistemas já existentes. (CASANOVA, 1985).
Quando não há homogeneidade entre os bancos de dados, é necessário converter Entre SBDD. De um modo geral, esse mecanismo de conversão envolve uma forma para facilitar a conversão de dados e modelos, programa usado para converter instruções de manipulação de dados. Normalmente está heterogeneidade é introduzida, quando Construímos um SGBD distribuído a partir de vários SGBDs autônomos e centralizados. Na verdade, eles devem ser considerados como suplementos em termos dos seguintes aspectos. Relacionamento com SGBDs distribuídos.
Existem dois tipos de distribuição dos dados no SBDD: particionar e replicar. Particionando, o banco de dados se separa em diversas partições disjuntas, e cada partição é colocada em um site. Replicando, pode ser totalmente ou parcialmente replicado. Totalmente replicado, cópias do banco de dados inteiro são armazenados em cada site. E parcialmente replicado, cada partição do banco de dados é armazenado em mais de um site. (ÖZSU, 1985).
 
Banco de Dados Relacional
O surgimento dos Sistemas de Gerenciamento de Banco de Dados Relacionais (SGBDRs) segundo Wade e Chamberlin (2012), pode ser considerado um dos mais bem-sucedidos e influentes diretamente na vida das pessoas. Só porque Edgar Frank Codd ingressou no início dos anos 70 Do IBM® Research Lab em San José. 
Em contrapartida, Darwen (2012) dizia que antes mesmo da existência de um modelo relacional a IBM® já usava um sistema com um modelo de gerenciamento de dados parecido com o relacional,porém com menos recursos, que tem por nome “Terminal Business System” (TBS). TBS Contém métodos de acesso que podem ser processados fazendo os pedidos, por exemplo, usando pares de valores-chave ou ponteiro. O modelo fornece alguns utilitários gerais, escrito na própria linguagem do TBS para manutenção e geração relatório. O utilitário de manutenção permitia que os usuários realizem as seguintes operações: Adicionar, alterar e excluir registros de arquivo. Geração de relatórios como o nome sugere, os relatórios permitem que sejam gerados a partir dos seguintes locais, dado um arquivo você pode selecionar o registro a ser selecionado apresentar e calcular um total, subtotal e outras formas de projeto.
Porém, este modelo se diferenciava por vários motivos do que seria criado, a partir de agora iremos citar algumas limitações que haviam no antigo sistema.
· Apenas um arquivo pode ser acessado por vez;
· Os registros no arquivo devem ser todos iguais formato;
· Esses registros não podem apontar para outros registros, isso é mesmo em registros contidos no mesmo arquivo.
No início dos anos 1970, quando Cord estava trabalhando no laboratório No estudo da IBM® em San Jose, ele escreveu um artigo O novo foco do armazenamento de informações Computador chamado “A Relational Model of Data for Large Shared Databanks”, que posteriormente foi batizado de “Modelo de Dados Relacional”, porque é baseado na teoria matemática das relações. Também descreve Chamado de "formas normais" e seu objetivo é eliminar Redundância e evitar inconsistências no conteúdo armazenado no banco de dados (WADE; CHAMBERLIN, 2012).
Através da implementação dessa ideia que mesmo após uma demora de aproximadamente dez anos para a aceitação em larga escala por parte de programadores de sistemas comerciais de banco de dados, se tornou um motivo de aumento de produtividade por parte de todos os programadores que utilizavam banco de dados, por que ao diminuir algumas estruturas fisicas de dados, como os índices de conteúdo a criação de ponteiros e outras estruturas necessárias para obter um melhor desempenho, então o programador precisará de um Modelo de dados composto pelos valores da tabela.
Modelo relacional
O conceito de modelo relacional foi criado por Edgar Frank Codd em 1970, sendo explicitado e descrito no artigo que tem por nome o "Relational Model of Data for Large Shared Data Banks". Segundo Strawn e Strawn (2016), o modelo relacional fornece uma clara separação de como a representação é representada, se é de forma física ou de forma de logica da informação. Com dados sendo processados e projetados em formas de tabelas fica a cargo do sistema o gerenciamento dos dados, e ele define como armazenar as informações, a fim de que os elementos que suportam o modelo relacional tornam-se importantes, é traçado um plano de controle de transação, padronização de dados e definição de dados e linguagem de consulta.
Banco de Dados em Memoria
Segundo Wang et al. (2015) a capacidade das memórias RAM (Random Access Memory) vem aumentando consideravelmente enquanto que o preço vem decaindo. Este fato torna possível armazenar completamente O banco de dados na memória principal do sistema está ficando cada vez maior. Esta Desta forma, o conceito de banco de dados in-memory torna-se cada vez mais Realidade e tendência. A diferença entre este conceito e o modelo tradicional é os dados são armazenados na memória principal, não no disco, o que acaba levando a nos seguintes casos, o tempo de resposta da transação foi melhorado comparado com a cópia tradicional baseada em disco.
Para Wang, Zhong e Kun (2015), outra função
A diferença das áreas de armazenamento tradicionais é a falta de
Operações de "entrada e saída" (E / S), causando a eliminação deste gargalo possível. Pois, em um sistema baseado em disco, a informação passa pelo leitor, que é o braço robótico não pode garantir o desempenho necessário operações mais complicadas. Autores que também concordam com esta afirmação são Gupta, Verma e Verma (2013) quando eles enfatizam armazenar informações na memória principal, eliminando operações a velocidade de E / S melhora muito a velocidade de leitura e gravação.
Bancos em memória
Nos últimos anos, o mercado de banco de dados tem tido várias soluções de memória expandidas empresas famosas na indústria global por exemplo, IBM®, Oracle®, SAP®, etc. Mas, por mais que todos suportem o padrão SQL e têm a capacidade de manter armazenados completamente na memória, eles têm vários recursos uns aos outros (GUPTA; VERMA; VERMA, 2013).
Existe uma lista de divisões entre os bancos de dados e seus diferentes blocos, no próximo tópico, iremos enfatizar e explicar cada tópico e seus diferentes focos.
Foco em tecnologias novas:
· VoltDb: É um sistema baseado no conceito NewSQL, desenvolvido por Mike Stonebraker e suporta atributos ACID. VoltDB é um projeto de código aberto focado em tempo de resposta curto entre transações, por exemplo, aplicativos financeiros e de telecomunicações. (VOLTDB,2016).
· MongoDB: É um sistema baseado no conceito NoSQL, desenvolvido pela empresa de publicidade DoubleClick®.O modelo que foi utilizado é o de orientação a documentos este é um projeto open source, realiza operações de manutenção em seu próprio idioma e consulta dados em vez de SQL (MONGODB, 2016).
Foco em sistemas embarcados:
· SQLite: É um sistema que foca na memória dispositivos com espaço e recursos de memória limitados, como por exemplo, smartphones e tablets. Foi desenvolvido por Dwayne Richard Hipp sua principal característica é um projeto de código aberto (código aberto), e não requer um servidor externo ao dispositivo que usa o dispositivo (OWENS, 2006).
Foco comercial:
· eXtremeDB: É um sistema de memória, criado por McObject®. Sua principal característica é propriedades ACID e a capacidade de ser usado em sistemas embarcados usando muito pouca memória. (McObject, 2016).
· TimesTen: É um sistema de banco de dados na memória, propriedade da Oracle® baseado em modelo relacional. Seu principal a função é: suportar atributos ACID e tempo de resposta informações quase instantâneas exigidas por aplicativos em tempo real, como aplicações de telecomunicações (ORACLE, 2016).
O objetivo de realizar estudo com abordagens de Banco de Dados, considerando aspectos diversos, como de desempenho em que tange a consulta de dados e toda a população que a usa, também foi possível identificar que o sistema de banco de dados é basicamente um sistema que guarda dados em um computador, cujo o objetivo é registra-los e deixá-los armazenados.
O principal objetivos de um banco de dados não somente é atender as necessidades de uma organização e de seus usuários, além é claro de armazenar dado, contando que deve haver “flexibilidade”. Flexibilidade esta que deve existir, porque a cada necessidade que for requisitada deverá haver outras novas soluções para que o sistema não pare e se torne inutilizável. No próximo capitulo, iremos abordar um tema que tem grande relação com o sistema de banco de dados, ao criar um Sistema relacional, é preciso fazer um diagrama que tenha os passos e os dados definidos em cada um, sendo possível fazer a organização de todo o banco, ao fazer edições, também tem uma interação de alto nível entre os dois tópicos, resumindo os dois caminham juntos, e agora iremos entender como eles interagem entre si
UML
É notável que hoje em dia o uso da UML é essencial para o desenvolvimento de um software e como sabemos a diversas ferramentas para orientação a objetos, mas e as dificuldades para planejar, visualizar, imaginar um projeto complexo inteiro? Isso certamente não é um trabalho muito fácil para ficar apenas na mente, e com isso foram surgindo as linguagens de modelagem orientadas a objetos, existiam vários métodos usados para modelagem, dentre eles alguns se destacavam mais como: método de booch, OOSE (Engenharia de Software Orientada a Objetos) de Jacobson e também a OMT (técnica de modelagem de objetos) de Rumbaugh.
E então chegamos ao grande momento que é quandofoi reunido um conjunto de ideias por Grady Booch, Ivar Jacobson e James Rumbaugh, da qual seus métodos já estavam sendo conhecido como os principais métodos orientados a objetos. Então surgiu uma grande motivação para que fosse criado uma linguagem Unificada de modelagem.
UML (Linguagem unificada de modelagem) é um grupo de notações gráficas, que favorece a apresentação na proposta de programas computacionais, principalmente aos que são orientados a objetos. Essa é uma definição simples. Na realidade para várias pessoas uma UML tem o uma representação diferente, isso por causa de sua própria história que é feito de maneira diferente das maneiras que é vista para compor um método de criação de um software eficiente. Como solução grande parte a tarefa é equipar a situação para que este livro possa explicar diferente maneiras por quais as pessoas possam utilizar uma UML.
Ainda que as linguagens gráficas de modelagem estão a um período grande, existe uma discordância relacionada a sua função no desenvolvimento dos sistemas operacionais. E essa discordância influenciam de modo direto como os indivíduos olham a função da UML em si.
Na perspectiva conceitual, a UML representa uma descrição dos conceitos de u m domínio de estudo. Aqui, não estamos falando a respeito de elementos de software, tanto quanto estamos construindo um vocabulário para falarmos sobre um domínio em particular. (FOWLER, 2005, p. 28).
 
	Em um projeto de automação não é diferente o uso da UML para elaboração de tal objetivo, pois com ele pode se ter uma visão maior sobre como ira funcionar a ferramenta para comunicar com o usuário através do uso do Caso de Uso, assim como também de outros UML como o de Classes e a Máquina de Estado que irá favorecer e enriquecer o projeto como um todo para a equipe que está a desenvolve-lo.
Características do Processo Unificado
O processo Unificado é direcionado a arquitetura, este por sua vez é a forma da qual direcionamos o olhar perante um sistema computacional em geral. Ao traçarmos questões relacionada a orçamento, tecnologias e também espaço de software visando o que será traçado no novo sistema. Dando uma estrutura de um software pode ser apresentada com os documentos e diagramas a seguir:, Diagrama de Caso de Uso, Diagrama de classes e estado, que nos permite ter uma perspectiva de uma estrutura de um software.
As fases do processo de Unificação 
Existem quatro principais fases pro Processo Unificado que são: Concepção, Elaboração, Construção e Transição. Internamente em cada uma das fases são executadas as interações. Cada uma dessas fases poderia ter uma ou mais interações pois não existe número determinado que limite esse número de interações que poderia existir nelas.
Durante a fase de concepção, é olhado para o Sistema operacional, no qual o arquivo com a mesma nomenclatura é criado, relacionando os principais riscos ou mais aparentes, avaliamos a tecnologia que se apresenta, e é feito a detecção nas áreas que são mais críticas a serem tratadas.
Esta fase é o período onde será feito a tentativa de escrever os Casos de Uso do componente bem complicada. No termino dessa fase, pode ser entregue uma sugestão, o documento de visão, a apresentação das partes mais graves do diagrama de caso de uso do sistema. Por outra forma, uma parte, um diagrama de classes e do máquina de estado do seguimento mais complicado do sistema. Tendo essas informações podemos agora então com mais clareza, informar um prazo do que será feito.
A fase da concepção tem como função uma interação para acrescentar um melhor entendimento do software em geral para os membros que atuam no projeto.
Na fase de elaboração é a fase em que são levantados os requisitos apresentados nas áreas mais críticas (os que foram apresentados no Casos de Uso). Aqui consolida a fase de Concepção atribuindo valor a cada relação que sofre. Esta fase de elaboração é repetida no decorrer do desenvolvimento em ressalta durante todo o período do sistema.
Já aqui na fase de construção, sempre que vem em mente sobre protótipos e nas relações com campos de um banco de dados, enquanto funções ou stored procedures interagem com partes no Servlets ou EJB, nos encontramos na fase de construção do Processo Unificado. Os envolvidos irão avaliar o Sistema no momento em que ele esteja na versão beta. O conceito de que sempre irá ter uma versão beta para avaliação é uma mostra de que essa fase passa por uma interação.
Com isso é nessa fase em que ocorrem os testes para que possa ser resolvido quaisquer erros ou problemas relacionados ao projeto que está sendo colocado para ser desenvolvido.
No momento na qual o Sistema sai de sua fase beta que permite ele ser avaliado como uma versão de produção, é nesse momento em que se encontra na fase de transição, onde a taxa de erros a serem encontrado deverão ser mínimos possíveis. Se alcançarmos a aprovação da parte que está a ser analisada, o ciclo do projeto é enfim encerrado.
Diagramas UML
Existem vários diagramas oficiais que nos são apresentados no UML 2, iremos apresentar alguns que estarão citados e classificados na figura 1.1 abaixo.
 Embora esses tipos de diagrama sejam a maneira como muitas pessoas encaram a UML e como eu organizei este livro, os autores da UML não veem os diagramas como a parte central da UML. (FOWLER, 2005, p.32)
Com isso em mente, podemos ver que esses diagramas não são nenhum pouco rígidos para o seu uso. Com muita frequência pode ser usar componentes de um diagrama em qualquer outros sem quaisquer problemas. Por padrão um UML tem seus próprios elementos, mas isso não é regra estabelecida, que permite certos elementos que são desenhados para um tido de diagrama, possa passar a ser desenhado eu um outro diagrama.Figura 1.1 Classificação dos tipos de diagrama da UML
Fonte: Desenvolvendo software com UML (2004)
Início de um Diagrama
Não tem uma maneira exata que lhe fara ter o uso completo que te fará ter acesso de todas possibilidades que há em uma UML. “Ninguém, nem mesmo seus criadores, entende ou utiliza tudo que há na UML.” Martin Fowler (2005, p.37)
Nos é sugerido ao iniciar com o uso de diagramas, que sim podemos começar apenas com as formas básicas dos diagramas para então após domínio deles, começar o uso de diagramas mais avançados, fazer alguns testes, experimentar de fato, e olhar como eles podem servir para nossas aplicações sem medo de descartar aquilo que não eficiente para nossas necessidades em particular.
Diagrama de Classes
Se alguém chegar perto de você em um beco escuro e disser: “Psiu, quer ver um diagrama UML?”, esse provavelmente seria um diagrama de classes. A maioria dos diagramas UML que vejo é composta por diagramas de classes. (FOWLER, 2005, p.52)
O diagrama de Classes conta os variados objetos que estarão nos sistemas e muitos outros relacionamentos estáticos presentes com eles, apresenta também propriedades e as operações de classe e as restrições que são aplicadas a forma que esses objetos são conectados. A palavra característica é usada na UML como um termo amplo que cobre a operação e propriedades de uma classe.
Casos de Uso
Os casos de uso é uma técnica que nos permite obter os requisitos necessário para o sistema, ele serve para apresentar uma típica relação entre o usuário e o sistema, fornecendo uma apresentação de como será usado.
Não maneiras padrão de descrever um diagrama de casos de uso, pois cada um tem seu formato único conforme a sua necessidade, cada caso de uso, é uma interação do usuário com o sistema, mostrando a interação entre eles para melhor construir um cenário principal onde fornecerá o que será necessário na visão geral que está sendo desenvolvida.
Diagrama de Estado 
Diagramas de estado é conhecido por mostrar o comportamento de um sistema. Existe muitos tipos de diagramas de estado dês de os anos 90 é uma das mais antigas técnicas de orientação objeto e adotaram para apresentar comportamentos. Neste diagrama você desenha um diagrama de máquina de estado para uma classe e para mostrar um ciclo de vida de um único objeto.
Martin

Outros materiais