O Linux está desaparecendo... como e por quê??


Quando o Linux foi criado, em meados de 1991, a ideia era apenas um projeto paralelo feito em casa, para fins recreativos. Nada de um sistema operacional completo como o que hoje temos. Na realidade, o primeiro anúncio do Linux, em 25 de agosto de 1991, foi feito na Usenet, em um post com a seguinte frase: “Olá pessoal que usa o minix. Eu estou fazendo um sistema operacional (gratuito) (é só um passatempo, não vai ser nada grande e profissional como o gnu) para 386 (486) AT clones”. Assinado por Linus Torvalds.

Todos sabemos que o Sr. Torvalds estava errado, e o Linux entrou para a história como o sistema operacional livre mais amado que existe. Mas sua forma, sua ideia central – um sistema operacional para computadores pessoais – está morrendo. Grandes distribuidoras, como Fedora, DebianMandriva e Slackware, têm, ano após ano, diminuído suas participações relativas de mercado. A única distribuição de grande porte que parece ter invertido suas chances é o Ubuntu.

O que está acontecendo? O Linux está morrendo? O Linux vai virar o Ubuntu (ou o contrário)? Não é bem assim, minha gente. O Linux está morrendo sim, mas apenas como nós o conhecemos. Sistemas operacionais para dispositivos móveis como o Android e o WebOS são baseados na plataforma Linux.



Muitos projetos científicos, como o Grande Colisor de Hádrons, por exemplo, têm suas bases de programação e softwares de interpretação de dados e interface construídos sobre o kernel do Linux.


O Linux está mudando, e seu sistema de distribuição vai mudar também. Segundo o NetMarketShare.net, a porcentagem de usuários acessando a internet atualmente em desktops e laptops com Linux é apenas 1,07% do total.

Se alterarmos para acessos à internet em dispositivos móveis, a porcentagem de usuários com Linux passa para mais de 16% (lembrando que Android, MeeGO, WebOS e Bada são baseadas no kernel do Linux e, portanto, entram nessa conta).

É claro que as distribuições de Linux não vão simplesmente desaparecer de centenas de milhares de computadores ao redor do mundo. Iniciativas como a Computador para todos, do Governo Federal, utilizam o Linux como forma de barateamento dos dispositivos para aumentar o alcance da inclusão digital. Além disso, muitos computadores de órgãos públicos (e muitas iniciativas privadas) também usam distribuições do software.

No entanto, a forma com que o Linux está sendo usado está mudando. O que está morrendo é a forma de distribuição do sistema. Em breve, teremos centenas de milhares de dispositivos rodando esse maravilhoso software livre sem que seus usuários saibam que o estão fazendo. Sejam eles celulares, tablets, aviões, geladeiras, navegadores GPS ou o que mais a mente dos desenvolvedores conseguir imaginar.

Leia o artigo na íntegra em: http://www.tecmundo.com.br/linux/13471-por-que-o-linux-como-voce-conhece-hoje-vai-desaparecer.htm#ixzz1YRwXhzN8

TCP/IP


          TCP/IP é o principal protocolo de envio e recebimento de dados, uma espécie de comunicador que fornece o endereço e o nome e permite a localização do outro computador devido ao recebimento das mesmas informações, sendo usado para estabelecer esta relação tanto na internet quanto em uma intranet. TCP significa, em português, Protocolo de Controle de Transmissão e o IP Internet (Protocolo de Internet), esses dois foram os primeiros a ser definidos.
          Entrando em termos um pouco mais técnicos, este conjunto de protocolos também pode ser visto como um modelo de camadas, no qual cada uma delas é responsável pela execução de uma quantidade ( grupo) de tarefas.
          O TCP/IP foi desenhado segundo uma arquitetura de pilha, onde diversas camadas de software interagem somente com as camadas acima e abaixo.

Camada de Aplicação

>> Engloba as aplicações standard da rede (Telnet, SMTP, FTP,…);
>> Camada situada no topo das camadas do protocolo.
>> Assegura a interface com as aplicações. É o nível mais próximo do usuário.
>> Exemplos de aplicativos: FTP, navegadores (browser).
>> Protocolos pertencentes a esta camada: FTP, TFTP, SNMP, HTTP, DNS, RIP, NFS, SMTP, POP3, Gopher, etc.
>> Nesta camada são usados os aplicativos para acessarem os recursos da rede.
>> Esta camada não possui um padrão comum, cada aplicação tem um padrão para acessar os recursos.
>> A camada converte as diferenças em um padrão comum para acesso, pois não existe um padrão que defina como deve ser estruturada uma aplicação.

Camada de Transporte

          Esta camada é responsável por pegar os dados enviados pela camada de aplicação e transformá-los em pacotes, a serem repassados para a camada de Internet. É responsável pelo endereçamento, roteamento dos pacotes, controle de envio e recepção (erros, bufferização, fragmentação, sequência, reconhecimento, etc.), etc.
          Provê a comunicação entre as aplicações, chamadas de fim a fim, isto é, uma entidade desta camada só se comunica com a sua entidade-par do host destinatário.. O serviço é confiável, tendo controle de erro e sequência com mecanismos de identificação dos processos de origem e de destino recebendo dados da camada de aplicação e os dividindo em unidades menores, com o endereço de destino para a camada de rede (IP). Orientado a conexão (ponto a ponto), e pode controlar o fluxo de informações. A camada de transporte utiliza dois protocolos: o TCP e o UDP. O primeiro é orientado à conexão e o segundo é não orientado à conexão. Ambos os protocolos podem servir a mais de uma aplicação simultaneamente.
          O acesso das aplicações à camada de transporte é feito através de portas que recebem um número inteiro para cada tipo de aplicação, podendo também tais portas serem criadas ao passo em que novas necessidades vão surgindo com o desenvolvimento de novas aplicações.
          A maneira como a camada de transporte transmite dados das várias aplicações simultâneas é por intermédio da multiplexação, onde várias mensagens são repassadas para a camada de rede (especificamente ao protocolo IP) que se encarregará de empacotá-las e mandar para uma ou mais interface de rede. Chegando ao destinatário o protocolo IP repassa para a camada de transporte que de multiplexa para as portas (aplicações) específicas.



Camada de Rede

>> A camada de rede trata da comunicação entre máquinas.
>> Fornece funções necessárias para interconectar redes e gateways formando um sistema coerente.
>> É responsável pela entrega de dados desde a origem até o destino final.
>> Contém os protocolos IP e ICMP, e os protocolos de roteamento.
>> Efetua também o mapeamento de endereços (ARP).
>> Esta aceita uma requisição de envio de pacote, vinda da camada de transporte, com a identificação da máquina para onde o pacote deve ser transmitido. Encapsula o pacote em um datagrama IP, preenche o cabeçalho do datagrama, usa um algoritmo de roteamento para determinar se o datagrama deve ser entregue diretamente, ou enviado para um gateway. Finalmente, o datagrama é passado para a interface de rede apropriada, para que este possa ser transmitido.
>> A camada de rede é a primeira (normatizada) do modelo. Dentre os protocolos da Camada de Rede, destaca-se inicialmente o IP (Internet Protocol), além do ARP, ICMP, RARP e dos protocolos de roteamento (RIP, IGP, OSPF, Hello, EGP e GGP). A camada de rede é uma camada não orientada à conexão, portanto se comunica através de datagramas.

Camada Física

          Camada de abstração de hardware que tem como principal função a interface do modelo TCP/IP com os diversos tipos de redes (X.25, ATM, FDDI, Ethernet, Token Ring, Frame Relay, PPP e SLIP). Por causa da grande variedade de tecnologias de rede, ela não é normatizada pelo modelo, o que provê a possibilidade de interconexão e interoperação de redes heterogêneas. Abaixo da camada de rede, encontra-se um grande vácuo. O modelo de referência TCP/IP não especifica muito bem o que acontece ali, exceto o fato de que o host tem de se conectar a rede utilizando algum protocolo para que seja possível enviar pacotes IP. Esse protocolo não é definido e varia de host para host e de rede para rede. Os livros e a documentação que tratam do modelo TCP/IP raramente descrevem esse protocolo.


Modelo de referência ISO/OSI





   O modelo de referência de rede OSI - Open Systems Interconnection –, foi desenvolvido pela ISO – International Standards Organization – com o objetivo de primeiramente padronizar a maneira de se desenvolver soluções para troca de dados entre redes.

         Lembre-se que ISO é um órgão de padronização internacional e, portanto, monta as “convenções” sobre como as coisas devem ser feitas.
      Portanto, o ISO/OSI permite que empresas diferentes possam desenvolver seus produtos diferentes, baseados neste modelo, e no final esses produtos possam trocar informações entre si.
      O modelo ISO/OSI ou simplesmente OSI tenta padronizar a forma de se transmitir dados para a rede. Isto permite o desenvolvimento de sistemas compatíveis entre si, mesmo sendo de fabricantes diferentes. Isto dá uma ideia de sistema aberto a comunicação com outros sistemas, talvez daí o termo Open.
      Desta forma o modelo OSI é baseado em sete camadas, sendo que cada camada resolve um problema específico relacionado a transmissão de dados em uma rede.
      O tráfego na rede é enviado na forma de pacotes de dados ou pacotes de rede. Um pacote de dados é a informação de um usuário transformado em um formato entendido pela rede.
      Cada camada adicionará informações ao pacote de dados, contudo o pacote de dados não é alterado. As informações adicionadas a um pacote são chamadas de cabeçalho. O cabeçalho de uma camada é simplesmente a informação que detalha o formato do pacote. Esse cabeçalho é recebido na camada correspondente do cliente receptor e é utilizado para entender o formato do pacote.
      A camada física e de enlace seriam implementadas em hardware. As camadas de rede e de transporte seriam implementadas pelo SO. E as camadas que restaram (sessão, apresentação e aplicação) são implementadas como softwares de usuário. Isto é só um exemplo e não corresponde a todas as realidades. Um dispositivo embarcado (uma TV, por exemplo) poderia ter todas as camadas implementas em hardware.
|
Camadas

Física:
      A camada física pega os bits e converte em uma forma interpretável pelo meio de comunicação. “A camada física trata da transmissão de bits brutos por um canal de comunicação”. Se o meio de transmissão for elétrico, essa camada converte os 0s e 1s enviados pela camada de enlace em sinais elétricos a serem transmitidos pelo cabo. Se o meio for óptico, essa camada converte os 0s e 1s dos quadros em sinais luminosos e assim por diante, dependendo do meio de transmissão de dados.
      Conforme Wendell Odon, a camada física define os detalhes elétricos, óticos, de cabeamento, de conectores e de procedimentos requeridos para se transmitirem os bits. Representados como alguma forma de energia se movendo através de um meio físico.

Enlace:

A camada de enlace é a que, a princípio, tem mais tarefas, sendo estas:

● Controle de acesso ao meio físico;
● Detecção de erros;
● Endereçamento físico;
● Impedir que um host mais rápido inunde de informações um host mais lento.

      “A principal tarefa da camada de enlace de dados é transformar um canal bruto em uma linha que pareça livre de erros de transmissão... Outra questão que surge na camada de enlace de dados (e na maioria das camadas mais altas) é como impedir que um transmissor rápido envie uma quantidade excessiva de dados a um receptor mais lento... As redes por difusão têm um problema adicional a ser resolvido na camada de enlace de dados: controlar o acesso ao canal compartilhado”.
      Odom diz o seguinte sobre a camada de enlace: “Formata dados em frames apropriados para transmissão através de alguma mídia física. Define regras para quando a mídia pode ou não ser usada. Define meios pelos quais se pode reconhecer erros de transmissão”.

Rede:

      A camada de rede é responsável pelo endereçamento e roteamento. O endereço da camada de rede é lógico (normalmente armazenado em uma memória secundária), o endereço físico é tratado pela camada de enlace conforme já vimos. A camada de rede controla a operação da sub-rede.
      Uma questão fundamental de projeto é determinar a maneira como os pacotes são roteados da origem até o destino... O controle de congestionamento também pertence à camada de rede... Qualidade de serviço também é uma questão da camada de rede... Talvez a segunda rede não aceite o pacote devido a seu tamanho excessivo... Cabe à camada de rede superar todos estes problemas. Odom cita que a camada de rede faz: “Endereçamento lógico, roteamento e determinação de caminhos”.

Transporte:

      A camada de transporte é responsável pelo controle lógico dos dados, que pode ser orientado a conexão e não orientado a conexão. O meio de transporte orientado a conexão se preocupa com a entrega correta de dados. Já o meio de transporte não orientado a conexão não se preocupa com os dados, ou seja, não corrige possíveis erros.
      A camada de transporte determina que tipo de serviço deve ser fornecido ao usuário/aplicação. O tipo de conexão de transporte mais popular é um canal ponto a ponto livre de erros que entrega mensagens ou bytes na ordem em que eles foram enviados. No entanto é possível outro, que entrega mensagens isoladas sem nenhuma garantia relativa à ordem de entrega. O tipo de serviço é determinado quando a conexão é estabelecida.
      Sobre a camada de transporte Odom, diz: Fornece uma variedade de serviços entre dois hosts, incluindo o estabelecimento e a finalização da conexão, controle de fluxo, recuperação de erros e segmentação de grandes blocos de dados em partes menores para transmissão.

Sessão:

      A camada de sessão estabelece uma sessão entre origem e destino. Odom fala que a cada sessão estabelece e mantém fluxos bidirecionais de um terminal a outro. Inclui o gerenciamento de fluxos de transação. A camada de sessão define como iniciar, controlar e finalizar sessões.
      Já Tanenbaum comenta que a camada de sessão permite que os usuários de diferentes máquinas estabeleçam sessões entre eles. Uma sessão oferece diversos serviços:

● Controle de diálogo: mantem o controle de quem deve transmitir em cada momento;
● Gerenciamento de token: impede que duas partes tentem executar a mesma operação crítica ao mesmo tempo;
● Sincronização: realiza a verificação periódica de transmissões longas para permitir que elas continuem a partir do ponto em que estavam ao ocorrer uma falha.

Apresentação:

      A camada de apresentação faz tradução de dados, também poderia ser chamada de camada de tradução.
      Odom explica que a camada de apresentação define o formato e a organização dos dados. Inclui criptografia. Sendo o propósito principal desta camada definir e negociar formatos de dados.
      Já Tanenbaum diz que, diferente das camadas mais baixas, que se preocupam principalmente com a movimentação de bits, a camada de apresentação está relacionada à sintaxe e à semântica das informações transmitidas. A camada de apresentação gerencia diferentes estruturas de dados abstratas e permite a definição e o intercâmbio de estruturas de dados de nível mais alto.

Aplicação:

             A camada de aplicação é a interface entre o usuário e a rede e vice-versa. Neste caso o usuário na maioria das vezes não é quem usa o computador propriamente dito, mas sim, um software.
        Tanenbaum explica que a camada de aplicação contém uma série de protocolos comumente necessários para os usuários. Um protocolo de aplicação amplamente utilizado é o HTTP, que é a base para a Internet.
       Já Odom comenta que a camada de aplicação fornece uma interface entre o software de comunicação e quaisquer aplicativos que precisem se comunicar fora do computador no qual o aplicativo reside. Ela também pode definir os processos para autenticação do usuário.
          Essa camada é responsável por interagir com o aplicativo de usuário, ela aceita os dados do aplicativo a partir do aplicativo de software e fornece o serviço de aplicativo de rede que é responsável pela solicitação do usuário.

Fonte: Internet

Herança e Polimorfismo

Herança, em si, permite definir uma classe geral e, em seguida, classes mais especializadas; simplesmente por adicionar novos detalhes à definição da classe mais geral.


Uma classe mais especializada herda as propriedades da classe mais geral, sendo assim necessário apenas definir as novas características desta.

A Herança é algo muito importante no desenvolvimento, além de com ela você poder reutilizar o código, você pode inda ter um conceito maior de encapsulamento. Imagine como se fosse um banco de dados relacional, com certeza antes devemos projetar o banco para ver como ele ficará. Com sistemas orientados a objetos é da mesma forma.

Polimorfismo, de forma geral, significa "várias formas". Numa linguagem de programação, isso significa que pode haver várias formas de fazer uma "certa coisa". Essas 'certas coisas' são chamadas de métodos. Polimorfismo significa que uma chamada de método pode ser executada de várias formas (ou polimorficamente). Quem decide "a forma" é o objeto que recebe a chamada.
 
Fontes:
http://walfredo.dsc.ufcg.edu.br/cursos/2003/progII20031/aulas/o_que_e_polimorfismo.htm
http://pwp.net.ipl.pt/cc.isel/cvaz/Textos/POO/Heranca.pdf
http://www.plugmasters.com.br/sys/materias/285/1/Heran%E7a-e-Polimorfismo
http://www-usr.inf.ufsm.br/~rose/curso3/cafe/cap4_Polimorfismo.pdf

Regimes Totalitários: Por quê?

Com o fim da Primeira Guerra Mundial, a Europa teve de enfrentar uma de suas piores crises econômicas. O uso do território europeu como principal palco de batalha acarretou na redução dos setores produtivos e inseriu a população de todo continente em um delicado período de pobreza e miséria. Além dos problemas de ordem material, os efeitos da Grande Guerra também incidiram de forma direta nos movimentos políticos e ideologias daquela época.

Como seria possível retirar a Europa daquela crise? Essa era uma questão que preocupava a população como um todo e, com isso, diversas repostas começaram a surgir. Em um primeiro momento, a ajuda financeira concedida pelos Estados Unidos seria uma das soluções para aquela imensa crise. No entanto, as esperanças de renovação sustentadas pelo desenvolvimento do capitalismo norte-americano foram completamente frustradas com a crise de 1929.

Dessa maneira, a sociedade europeia se mostrava completamente desamparada com relação ao seu futuro. As doutrinas liberais e capitalistas haviam entrado em total descrédito mediante sucessivos episódios de fracasso e indefinição. Paralelamente, socialistas e comunistas – principalmente após a Revolução Russa de 1917 – tentavam mobilizar a classe trabalhadora em diversos países para que novos levantes populares viessem a tomar o poder.

A crise, somada às possibilidades de novas revoluções populares, fez com que muitos vislumbrassem uma nova onda de instabilidade. Foi nesse momento em que novos partidos afastados do ideário liberal e contrários aos ideais de esquerda começaram a ganhar força política. De forma geral, tais partidos tentavam solucionar a crise com a instalação de um governo forte, centralizado e apoiado por sentimento nacionalista exacerbado.

Apresentando essa perspectiva com ares de renovação, tais partidos conseguiram se aproximar dos trabalhadores, profissionais liberais e integrantes da burguesia. A partir de então, alguns governos começaram a presenciar a ascensão de regimes totalitários que, por meio de golpe ou o apoio de setores influentes, passaram a controlar o Estado. Observamos dessa forma o abandono às liberdades políticas e ideológicas sendo enfraquecidas pelo apelo e a coesão requeridas por governo de caráter autoritário.

Na Itália e Alemanha, países profundamente afetados pela crise, o nazismo e o fascismo ascenderam ao poder sob a liderança de Benito Mussolini e Adolf Hitler, respectivamente. Na Península Ibérica, golpes políticos engendrados por setores militares e apoiados pela burguesia deram início ao franquismo, na Espanha, e ao salazarismo, em Portugal.

Em outras regiões da Europa a experiência totalitária também chegou ao poder pregando o fim das liberdades civis e a constituição de governos autoritários. Na grande maioria dos casos, a derrocada do nazi-fascismo após a Segunda Guerra Mundial, serviu para que esses grupos extremistas fossem banidos do poder com o amplo apoio dos grupos simpáticos à reconstrução da democracia e dos direitos civis.

Definições de Bluetooth e Wi-Fi


       Bluetooth é uma especificação industrial para áreas de redes pessoais sem fio. É um protocolo para troca de dados sem fio entre aparelhos eletrônicos.
   Devido ao seu pequeno consumo de eletricidade, o Bluetooth é utilizado principalmente para conectar telefones celulares a fones de ouvido e a outros aparelhos celulares. Também é utilizado para trocar informações entre dispositivos como notebooks, computadores, impressoras, câmeras digitais. Além de videogames, como o Nintendo Wii e Playstation 3, que utilizam controles sem fio.
    As especificações do Bluetooth foram desenvolvidas e licenciadas pelo Bluetooth Special Interest Group.
    Wi-Fi foi uma marca licenciada originalmente pela Wi-Fi Alliance para descrever uma tecnologia de redes sem fio embarcadas (WLAN). Comumente o termo Wi-Fi é entendido como uma tecnologia de interconexão entre dispositivos sem fio.
    O padrão Wi-Fi opera em faixas de frequências em que não há a necessidade de obter a licença para instalação e/ou operação. No entanto, para uso comercial no Brasil, é necessária uma licença da Anatel.
   Atualmente, quase todos os computadores portáteis são fabricados com dispositivos para rede sem fio no padrão Wi-Fi. O que antes era acessório está se tornando item obrigatório, principalmente devido ao fato da redução do custo de fabricação.

Fonte: Pesquisa na Web

Paradigmas em Tecnologia Orientada a Objeto


Paradigma Procedural

O termo programação procedural, também chamada de programação procedimental, é muitas vezes utilizado como sinônimo de programação imperativa, mas o termo pode se referir a um paradigma de programação baseado no conceito de chamadas a procedimento. Procedimentos, também conhecidos como rotinas, sub-rotinas, métodos, ou funções simplesmente contém um conjunto de passos computacionais a serem executados. Um dado procedimento pode ser chamado a qualquer hora durante a execução de um programa, inclusive por outros procedimentos ou por si mesmo.
A programação procedural é, muitas vezes, uma escolha melhor que programação sequencial e não estruturada em muitas situações que envolvem uma complexidade média e requerem facilidade de manutenção. A programação procedural possui a habilidade de reutilizar o mesmo código em diferentes lugares no programa sem copiá-lo; a habilidade de ser fortemente modular e estruturado; entre outras.
Para ser considerada procedural, uma linguagem de programação deve suportar o conceito de procedimentos e possuir uma sintaxe para defini-los. Idealmente, ela deve suportar a especificação de tipos de argumentos, variáveis locais, chamadas recursivas e o uso de procedimentos em módulos distintos de um programa. Ela também pode suportar a distinção entre argumentos de entrada e de saída.

Paradigma Orientado a Objeto

A programação orientada a objetos nos proporciona uma melhor abordagem para o desenvolvimento de sistemas, tornando a modelagem e programação do sistema muito mais próxima do mundo real do que a abordagem do Paradigma da Programação Estruturada.
Devemos lembrar que o desenvolvimento de software é realizado por seres humanos, então muitas vezes a qualidade do sistema não depende diretamente do paradigma, linguagem e metodologia, mas do
 programador.
A orientação a objetos não é uma coleção de bibliotecas ou simples adição de novas funcionalidades a uma linguagem de programação, é um novo paradigma avançado.
O conceito de paradigma tem como definição: “conjunto de teorias, padrões e métodos que, juntos, representam um modo de organizar conhecimento”.
A programação orientada a objeto consiste em abordar a resolução de um problema, através da análise das entidades e seus relacionamentos, dentro do contexto onde se situa o problema. A partir dessa análise é construído um Modelo de Resolução que represente, da melhor maneira possível, aquilo que acontece no mundo real.
A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos.

Paradigma Estruturado

Este paradigma preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência, decisão e interação. Tendo, na prática, sido transformada na Programação Modular, a Programação estruturada orienta os programadores para a criação de estruturas simples em seus programas. Foi a forma dominante na criação de software entre a programação linear e a programação orientada por objetos.
Apesar de ter sido sucedida pela programação orientada por objetos, pode-se dizer que a programação estruturada ainda é marcantemente influente, uma vez que grande parte das pessoas ainda aprendem programação através dela.

Paradigma Imperativo

O Paradigma Imperativo consiste na criação de sistemas através de comandos ou instruções imperativas e possui como linguagens representantes o Fortran e o Cobol.
O paradigma imperativo baseia-se no conceito de comandos e atualização de variáveis. Como os programas são escritos para modelar processos e objetos do mundo real e tais objetos freqüentemente possuem estados que variam com o tempo, variáveis naturalmente modelam tais objetos.
Desse modo, pode-se considerar que programas imperativos modelam tais processos e objetos com bastante eficiência. Além disso, todas as arquiteturas de computadores existentes hoje baseiam-se na arquitetura de Von Newmann, caracterizada pelo acesso direto e possibilidade de alteração de valores armazenados em posições de memória. Isso torna os ambientes de execução das linguagens imperativas bastante eficientes.
Programas imperativos são excelentes, por exemplo, para programação de baixo nível.

 
Bibliografia

WIKIPÉDIA. Programação Procedural. Disponível em: < http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_procedural>. Acesso em 24 mar. 2011.

Pesquisa científica. Paradigma da Orientação a Objetos. Disponível em: <http://www.freelancersbrasil.com/paradigma-da-orientacao-a-objetos/>. Acesso em 24 mar. 2011

WIKIPÉDIA. Programação Estruturada. Disponível em: < http://pt.wikipedia.org/wiki/Programa%C3%A7C3%A3o_estruturada>. Acesso em 24 mar. 2011

Pesquisa científica. Paradigma Imperativo. Disponível em: <www.cin.ufpe.br/~tds/CaracteristicasParadigmas.doc>. Acesso em 23 mar. 2011

Algumas noções sobre Redes!


>> Tipos de Ligação de Rede


> Ponto-a-Ponto
Ligações ponto-a-ponto caracterizam-se pela presença de apenas dois pontos de comunicação, um em cada extremidade, ou seja, apenas dois computadores interligados.
Essa é a forma mais comum de conexão, na qual temos apenas dois pontos, onde um é receptor e outro é transmissor, os quais são interligados e podem trocar informações diretamente.
Nesse tipo de ligação de redes, não há compartilhamento do meio com vários usuários.

> Multiponto ou Ponto-Multiponto
Nesse tipo de ligação de redes, um ponto central pode estar enviando informações/dados para vários pontos, utilizando um mesmo meio e fazendo derivações ao longo do meio.


>> Métodos de transmissão de dados

> Simplex
Uma comunicação é dita simplex quando permite comunicação apenas em um único sentido, tendo em uma extremidade um dispositivo apenas transmissor (transmiter) e do outro um dispositivo apenas receptor (receiver). Não há possibilidade do dispositivo receptor enviar dados ou mesmo sinalizar se os dados foram recebidos corretamente. Transmissões de rádio e televisão são exemplos de transmissão simplex.

> Half Duplex
Uma comunicação é dita half-duplex quando existem em ambas as extremidades dispositivos que podem transmitir e receber dados, porém não simultaneamente. Durante uma transmissão half-duplex, em determinado instante um dispositivo A será transmissor e o outro B será receptor, em outro instante os papéis podem se inverver.

> Full-Duplex
Uma transmissão é dita full-duplex quando dados pode ser transmitidos e recebidos simultaneamente em ambos os sentidos. Poderíamos entender uma linha full-duplex como funcionalmente equivalente a duas linhas simplex, uma em cada direção.

>> Topologias
> Topologia em Barramento
Na topologia de barramento todos os computadores estão ligados a um cabo contínuo que é terminado em ambas as extremidades por um apequena ficha com um aresistência ligada entre a malha e o fio central do cabo.

> Topologia em Estrela
Contrariamente ao que acontece na topologia anterior, no caso da topologia em estrela os postos ligam-se todos num ponto central, que é um dispositivo que pode ser um hub ou um switch, em qualquer dos casos esse dispositivo atua como um concentrador.

> Topologia em Anel
Na topologia em anel, cada posto está diretamente ligado a dois outros postos de rede, Os dados circulam num sentido de um posto para outro, cada posto inclui um dispositivo de recepção e transmissão, o que lhe permite receber o sinal e passá-lo ao posto seguinte, no caso de a informação não lhe ser destinada.

> Topologia em Árvore
Tipologia física baseada num aestrutura hierárquica de várias redes e sub-redes. Existem um ou mais concentradores que ligam cada rede local e existe um outro concentrador que interliga todos os outros concentradores.

> Topologia Híbrida
Numa topologia híbrida, o desenho final da rede resulta da combinação de duas ou mais topologias de rede. A combinação de duas ou mais topologias de rede permite-nos beneficiar das vantagens de cada uma das topologias que integram esta topologia.


Fontes:

Curso: Redes de Computadores. Disponível em: <www.ele.ita.br/~rubens/RedesI/RedesI-p3.pdf>. Acesso em 22 mar. 2011

Organização de Computadores. Disponível em: . Acesso em 22 mar. 2011.

Métodos de Ordenação de Vetores

Ordenação pelo Método Bolha

> O Método Bolha, também chamado de Bubble Sort, é um método de ordenação de vetores por seleção e troca. É um dos métodos mais simples, mas, dentre todos os métodos simples, é o mais eficaz. É adequado apenas para arquivos pequenos.
Esse método funciona da seguinte forma: esse método irá percorrer o vetor várias vezes e, durante a análise, ele irá comparar os valores dois a dois e, caso estejam fora da ordem, esse algoritmo trocará a posição desses valores, deixando estes ordenados, ou seja, deixando-os em ordem crescente. Isso irá se repetir com todas as posições do vetor até a última posição, garantindo que o elemento de maior valor seja levado para a última posição.
Vale ressaltar que o tempo de consumo do Bubble Sort é proporcional ao número de execuções da comparação sendo que, no melhor caso, o algoritmo executa n²/2 operações relevantes, onde n representa o número de elementos do vetor e, no pior caso, são feitas 2n² operações no vetor.
Se o vetor a ser ordenado for colocado na vertical, com o Item[n] em cima e Item[1] embaixo, durante cada passo o menor elemento “sobe” até encontrar um elemento maior ainda, como se uma bolha subisse dentro de um tudo de acordo com sua densidade e, por isso, esse método recebe o nome de “bolha”. 

Exemplo:

#include
int main(void)
{
int i, j,v[100], n, temp;
for (i = n - 1; i > 0; i--)
                           for (j = 0; j < i; j++)
                               if (v[j] > v[j+1])
                              {
                                   temp = v[j];
                                   v[j] = v[j+1;
                                   v[j+1 = temp;
                               }
return 0;
}

Método da Bolha Melhorado

            O Método da Bolha Melhorado é o próprio método bolha, mas com algumas alterações. Esse método é finalizado quando nenhuma alteração foi feita após uma passada no vetor, diminuindo o tempo de consumo do algoritmo.

Exemplo:

            #include
int main(void)
{
     int i, j, v[100], n, temp, troca;
     troca = 1;
           for (i= n-1; (i >= 1) && (troca == 1); i--) {
           troca = 0;
                for (j= 0; j < i ;j++) {
                    if (v[j] < v[j+1]) {
                          temp = v[j];
                          v[j] = v[j+1];
                          v[j+1] = temp;
                          troca = 1;
                     }
                 }
           }
      return 0;
}


Ordenação pelo Método Quicksort

            O Método Quicksort é o algoritmo de ordenação interna mais rápido que se conhece para uma ampla variedade de situações, sendo provavelmente mais utilizado do que qualquer outro algoritmo. O algoritmo foi inventado por C. A. R. Hoare na década de 1960, quando visitava a Universidade de Moscou como estudante. Esse algoritmo foi publicado em 1962, depois de uma série de refinamentos.
            A ideia básica do Quicksort é partir o problema de ordenar um conjunto com n itens em dois problemas menores. Depois de dividir o problema, os problemas menores são ordenados independentemente e depois os resultados são combinados para produzir a solução do problema maior.
            A parte mais delicada desse método se refere à divisão da partição. Deve-se rearranjar o vetor na forma A[Esq..Dir] através da escolha arbitrária de um item x do vetor chamado pivô, de tal forma que ao final o vetor A está particionado em uma parte esquerda com chaves menores ou iguais a x e uma parte direita com chaves maiores ou iguais a x.
            O Procedimento do Algoritmo Quicksort se dá da seguinte forma:
            1. Escolher arbitrariamente um item do vetor e colocar este valor em x;
2. Percorrer o vetor a partir da esquerda até que um item A[i] ³ x é encontrado; da mesma maneira, percorrer o vetor a partir da direita até que um item A[j] £ x é encontrado;
3. Como os itens A[i] e A[j] não estão na ordem correta no vetor final, eles devem ser trocados;
4. Continuar o processo até que os índices i e j se cruzem em algum ponto do vetor.

Ao final do processo, o vetor A[Esq..Dir] está particionado de tal forma que:

>> Os itens em A[Esq], A[Esq+1], ... , A[j] são menores ou iguais a x.
>> Os itens A[i], A[i+1], ... , A[Dir] são maiores o iguais a x.

            O método é ilustrado para o conjunto de seis chaves apresentado na figura abaixo. O item x é escolhido como sendo A[(i+j)div2]. Como inicialmente i = 1 e j = 6, então x = A[3] = D, o qual aparece em destaque na segunda linha da mesma figura. A varredura a partir da posição 1 pára no item O e a varredura a partir da posição 6 pára no item A, sendo os dois itens trocados, como mostrado na terceira linha da figura. A seguir, a varredura a partir da posição 2 pára no item R e a varredura a partir da posição 5 pára no item D, e então os dois itens são trocados, como mostrado na quarta linha.
            Neste momento i e j se cruzam (i = 3 e j = 2), o que encerra o processo de partição.
          1            2          3          4          5          6

i = 1     O        R         D         E         N         A
i = 2     A         R         D         E         N         O
i = 3     A         D         R         E         N         O

            Feito este procedimento, o algoritmo agora terá de fazer a ordenação, ou seja, o refinamento final do procedimento Quicksort.
            Veja o exemplo de ordenação usando o Quicksort:

          1            2          3          4          5          6

               Chaves iniciais     O          R           D         E         N         A

                                i = 1     A          D           R         E         N         O
                                i = 2     A          D
                                i = 3                               E         R         N         O
                                i = 4                                           N         R         O
                                i = 5                                                       O         R
                                i = 6     A          D           E         N         O         R


Algoritmo do Procedimento Partição:

                        procedure Particao (Esq, Dir: Índice; var i, j : Índice);
                             var pivô, x: Item;
                        begin
                             i := Esq;
                             j := Dir;
                             pivô := A[(i+j) div 2)];
                             repeat;
                                 while pivô.Chave > A[i].Chave do i := i+1;
                                 while pivô.Chave < A[j].Chave do j :=j-1;
                                 if  i <= j then begin
                                       x := A[i]; A[i] := A[j]; A[j] :=x;
                                       i := i+1; j :=j-1;
                                 end;
                             until i>j;
                        end;

Analisando a procedure:

>> Esq e Dir são índices para definir os sub-vetores do vetor original A a ser particionado

>> i e j retornam as posições finais das partições, onde:
>     A[Esq], A[Esq+1],...,  A[j] são menores ou iguais a x
>    A[i], A[i+1],...,  A[Dir] são maiores ou iguais a x

>> O vetor é uma variável global ao procedimento Partição

Procedimento Quicksort:

                        procedure Quicksort (var A: Vetor);
                        {-- Entra aqui o procedimento partição --}
                            procedure Ordena (Esq, Dir : Índice);
                            var i, j, Índice;
                            begin
                                 partição (Esq, Dir, i, j);
                                 if Esq < j then Ordena (Esq, j);
                                 if i < Dir then Ordena (i, Dir);
                            end;
                        begin
                            Ordena (1, n);
                        end;

            Uma característica interessante do Quicksort é a sua ineficiência para arquivos já ordenados quando a escolha do pivô e inadequada. Por exemplo, a escolha sistemática dos extremos de um arquivo já ordenado leva ao seu pior caso. O pior caso pode ser evitado através de pequenas modificações no programa.
Ordenação pelo Método Selection Sort

            O algoritmo de ordenação por seleção (selection sort) é um dos métodos de ordenação mais simples que existem. Além disso, o método possui um comportamento espetacular quanto ao número de movimentos de registros, cujo tempo de execução é linear no tamanho da entrada, o que é muito difícil de ser batido por qualquer outro método. Consequentemente, este é o algoritmo a ser utilizado para arquivos com registros muito grandes.
            Este método possui alguns aspectos negativos, são eles: o fato do arquivo já estar ordenado não ajudar em nada, pois o custo continua quadrático; o algoritmo não é estável, pois ele nem sempre deixa os registros com chaves iguais na mesma posição relativa.
            Este método funciona da seguinte forma: selecione o menor item do vetor e a seguir troque-o com o item que está na primeira posição do vetor. Repita estas duas operações com os n-1 itens restantes, depois com os n-2 itens, até que reste apenas um elemento. Ou seja, o método passará sempre o menor valor do vetor para a primeira posição (ou o maior dependendo da ordem requerida), depois o de segundo menor valor para a segunda posição e assim por diante.
            Exemplo de algoritmo:
                       
                        procedure Seleção (var A: Vetor);
                        var i, j, Min : Índice;
                               x            : Item;
                        begin
                        for i := 1 to n-1 do
                             begin
                             Min i := i;
                             for j := i+1 to n do if A [j].Chave < A[Min].Chave then Min := j;
                             x := A[Min]; A[Min] := A[i]; A[i] := x;
                             end;
                        end;

Platão: Pensamento e Obras

A Vida e as Obras

 

Diversamente de Sócrates , que era filho do povo, Platão nasceu em Atenas, em 428 ou 427 a.C., de pais aristocráticos e abastados, seu pai era descendente do rei Codros.
Desde jovem, Platão manifestava seu talento artístico e poético, o que o atrapalhou na precisão e ordem de seu pensamento.
Platão era discípulo de Sócrates, donde tirou muitos dos seus pensamentos.
Em Atenas, pelo ano de 387, Platão fundava a sua célebre escola, que tomou o nome famoso de Academia.
Platão interessou-se vivamente pela política e pela filosofia política.
Platão dedicou-se inteiramente à especulação metafísica, ao ensino filosófico e à redação de suas obras, atividade que não foi interrompida a não ser pela morte.
Platão é o primeiro filósofo antigo de quem possuímos as obras completas.
A forma dos escritos platônicos é o diálogo, sendo a parte mais importante de sua atividade literária, a qual era dividida e, três grupos principais, segundo certa ordem cronológica, lógica e formal.

 

O Pensamento: A Gnosiologia

 

Como já em Sócrates, assim em Platão a filosofia tem um fim prático, moral; é a grande ciência que resolve o problema da vida. Este fim prático realiza-se, no entanto, intelectualmente, através da especulação, do conhecimento da ciência.
Para Platão, o espírito humano é peregrino neste mundo e prisioneiro na caverna do corpo. Deve transpor este mundo e libertar-se do corpo para realizar o seu fim, isto é, chegar à contemplação do inteligível.
A gnosiologia platônica tem o caráter científico, filosófico, que falta a gnosiologia socrática, ainda que as conclusões sejam idênticas. O conhecimento sensível deve ser superado por um outro conhecimento, o conhecimento conceptual. O conhecimento sensível não pode explicar o conhecimento intelectual; e ainda menos pode o conhecimento sensível explicar o dever ser, os valores de beleza, verdade e bondade, que estão efetivamente presentes no espírito humano, e se distinguem diametralmente de seus opostos, fealdade, erro e mal-posição e distinção que o sentido não pode operar por si mesmo.
A diferença essencial entre o conhecimento sensível é que o conhecimento sensível não sabe que o é, podendo cair no erro sem saber; ao passo que o conhecimento intelectual, além de ser um conhecimento verdadeiro, sabe que o é, não podendo de modo algum ser errôneo, ou seja, o conhecimento sensível sabe que as coisas estão assim, sem saber porque são, ao passo que o conecimento intelectual sabe que as coisas devem estar necessariamente assim como estão, precisamente porque é ciência, isto é, conhecimento das coisas pelas causas.
Sócrates estava convencido de que o saber intelectual transcende o saber sensível, mas julgava poder construir indutivamente o conceito da sensação; Platão, ao contrário, não admite que da sensação se possa de algum modo tirar o conceito universal, absoluto. E, exagerando a doutrina da maiêutica socrática, diz que os conceitos são a priori, inatos no espírito humano, donde têm de ser oportunamente tirados.
O mundo ideal, racional - no dizer de Platão - transcende inteiramente o mundo empírico, material, em que vivemos.  

Teoria das Idéias

 

Sócrates mostrara no conceito o verdadeiro objeto da ciência. Platão aprofunda-lhe a teoria e procura determinar a relação entre o conceito e a realidade fazendo deste problema o ponto de partida da sua filosofia.
A ciência é objetiva; ao conhecimento certo deve corresponder a realidade. Ora, de um lado, os nossos conceitos são universais, necessários, imutáveis e eternos (Sócrates), do outro, tudo no mundo é individual, contigente e transitório (Heráclito). Deve, logo, existir, além do fenomenal, um outro mundo de realidades, objetivamente dotadas dos mesmos atributos dos conceitos subjetivos que as representam. Estas realidades chamam-se Idéias. As idéias não são, pois, no sentido platônico, representações intelectuais, formas abstratas do pensamento, são realidades objetivas, modelos e arquétipos eternos de que as coisas visíveis são cópias imperfeitas e fugazes. Assim a idéia de homem é o homem abstrato perfeito e universal de que os indivíduos humanos são imitações transitórias e defeituosas.
Todas as idéias existem num mundo separado, o mundo dos inteligíveis, situado na esfera celeste. A certeza da sua existência funda-a Platão na necessidade de salvar o valor objetivo dos nossos conhecimentos e na importância de explicar os atributos do ente de Parmênides, sem, com ele, negar a existência do fieri. Tal a célebre teoria das idéias, alma de toda filosofia platônica, centro em torno do qual gravita todo o seu sistema.

 

A Metafísica

As Idéias

 

O sistema metafísico de Platão centraliza-se e culmina no mundo divino das idéias, as quais contrapõe-se à matéria obscura e incriada.
O divino platônico é representado pelo mundo das idéias e especialmente pela idéia do Bem, que está no vértice. Em geral, o mundo ideal é provado pela necessidade de justificar os valores, o dever ser, de que este nosso mundo imperfeito participa e a que aspira.
Visto serem as idéias conceitos personalizados, transferidos da ordem lógica à ontológica, terão consequentemente as características dos próprios conceitos: transcenderão a experiência, serão universais, imutáveis. Logo, a idéia do Bem, no sistema platônico, é a realidade suprema, donde dependem todas as demais idéias, e todos os valores (éticos, lógicos e estéticos) que se manifestam no mundo sensível; é o ser sem o qual não se explica o vir-a-ser. Portanto, deveria representar o verdadeiro Deus platônico. No entanto, para ser verdadeiramente tal, falta-lhe a personalidade e a atividade criadora.

 

 

As Almas

 

A alma desempenha papel de mediador entre as idéias e a matéria, à qual comunica o movimento e a vida, a ordem e a harmonia. Ele dá à alma humana um lugar e um tratamento à parte, de superioridade, em vista dos seus impelentes interesses morais e ascéticos, religiosos e místicos. Assim é que considera ele a alma humana como um ser eterno (coeterno às idéias e à matéria), de natureza espiritual, inteligível, caído no mundo material como que por uma espécie de queda original, de um mal radical. Deve portanto, a alma humana, libertar-se do corpo, como de um cárcere; esta libertação, durante a vida terrena, começa e progride mediante a filosofia, que é separação espiritual da alma do corpo, e se realiza com a morte, separando-se, então, a alma do corpo.
A faculdade principal, essencial da alma é a de conhecer o mundo ideal, transcendental: contemplação em que se realiza a natureza humana, e da qual depende totalmente a ação moral. Entretanto, sendo que a alma racional é, de fato, unida a um corpo, dotado de atividade sensitiva e vegetativa, deve existir um princípio de uma e outra. Segundo Platão, tais funções seriam desempenhadas por outras duas forças - ou “partes” da alma: a irascível (ímpeto), que residiria no peito, e a concupiscível (apetite), que residiria no abdome - assim como a alma racional residiria na cabeça. Naturalmente a alma sensitiva e a vegetativa são subordinadas à alma racional.
Logo, segundo Platão, a união da alma espiritual com o corpo é extrínseca, até violenta. A alma não encontra no corpo o seu complemento, o seu instrumento adequado. Mas a alma está no corpo como num cárcere, o intelecto é impedido pelo sentido da visão das idéias, que devem ser trabalhosamente relembradas. E diga-se o mesmo da vontade a respeito das tendências. E, apenas mediante uma disciplina ascética do corpo, que o mortifica inteiramente, e mediante a morte libertadora, que desvencilha para sempre a alma do corpo, o homem realiza a sua verdadeira natureza: a contemplação intuitiva do mundo ideal.

 

O Mundo

 

O mundo material, o cosmos platônico, resulta da síntese de dois princípios opostos: as idéias e a matéria. O mundo está entre o ser (idéia) e o não-ser (matéria), e é o devir ordenado, como o adequado conhecimento sensível está entre o saber e o não-saber, e é a opinião verdadeira. Conforme a cosmologia pampsiquista platônica, haveria, antes de tudo, uma alma do mundo e, depois, partes da alma, dependentes e inferiores, a saber, as almas dos astros, dos homens, etc.
O dualismo dos elementos constitutivos do mundo material resulta do ser e do não-ser, da ordem e da desordem, do bem e do mal, que aparecem no mundo. Da idéia - verdade, bondade - depende tudo quanto há de positivo, de racional no vir-a-ser da experiência. Da matéria - indeterminada, mutável - depende, ao contrário, tudo que há de negativo na experiência.