Resultados 1 a 2 de 2

Tpico: [Indicao] Conceitos bsicos e fundamentais na programao

  1. #1
    Membro Avanado ingresso
    Data de Ingresso
    Dec 2011
    Localizao
    !/usr/bin/env perl
    Posts
    868
    Post Thanks / Like

    Post [Indicao] Conceitos bsicos e fundamentais na programao

    Para os iniciantes que querem ter uma boa base e para os avanados que querem ter uma referncia.


    Conceitos bsicos de programao
    Quando as pessoas comeam a se interessar por programao, podem ficar confusas com tantos conceitos novos. Mas pior que isso, parece que cada grupo define cada conceito de forma diferente, atribuindo conotaes positivas e negativas indiscriminadamente segundo seus interesses.

    A confuso gerada por essa briga de egos enorme e pode levar muitos incautos por caminhos tortuosos, ento preciso muito bom senso.
    Vamos tentar aqui apresentar algumas poucas definies da forma mais imparcial possvel o que incrivelmente pode ofender alguns mais afoitos.

    Bsico da programao
    Programao pode ser definido como o ato de descrever um algoritmo que resolva um problema proposto de forma aplicvel. No a nica definio, no a melhor, mas muito boa, no?
    Um algoritmo uma sequncia de passos a ser executada para se chegar a um objeto, no caso, a soluo de um problema proposto. Para que a descrio do algoritmo seja aplicvel, tem de ser feita usando um protocolo lingustico que o executor reconhea. Este protocolo chamado linguagem de programao.

    Como utilizamos computadores para realizar a execuo do programa, a linguagem de programao precisa ser reconhecida pelo computador que realizar aquela tarefa especfica.

    Essencialmente computadores reconhecem apenas uma linguagem especfica, formada por instrues relacionadas a micro instrues registradas no micro programa do processador. Esta linguagem chamada linguagem ou cdigo de mquina e extremamente incompreensvel. =P

    No entanto preciso que o programa esteja em linguagem de mquina para que o computador possa execut-lo, o que um problema e tanto.

    A forma usada para solucionar a questo relativamente simples: a criao de tradutores que permitam que o programa seja escrito em linguagens mais inteligveis para ento ser traduzido para a linguagem de mquina. H alguns tipos diferentes de traduo, como montagem, compilao, interpretao e interpolao. Veremos mais a frente.

    Nvel de abstrao
    O uso de tradutores permite que a linguagem usada para a programao apresente um certo nvel de abstrao da forma como a mquina funciona. Linguagens que se aproximam muito do funcionamento da mquina so chamadas de baixo nvel, j linguagens que se afastam do funcionamento so chamados de alto nvel.

    Por exemplo, a linguagem Assembly possui uma instruo para cada instruo de mquina, sendo assim uma linguagem de baixo nvel. Isso traz dois inconvenientes:
    1. preciso entender como cada processador funciona para a criao do programa.
    2. O programa se torna pouco portvel, sendo necessrio reescrev-lo para cada tipo de diferente de processador.

    Por outro lado, traz uma grande vantagem: como no h uma traduo propriamente dita, apenas uma converso de smbolos (tokens), a execuo do programa se torna extremamente eficiente.

    Isso ocorre porque toda traduo semntica gera verborragia, ou seja, excesso de comandos para fazer coisas simples. Quanto maior a diferena entre a linguagem original e a de destino, maior a probabilidade de verborragia, mas no necessariamente.
    Quando definimos nvel de abstrao, entramos numa questo delicada, pois h um tremendo mal entendido sobre o que seja uma linguagem de alto nvel.

    Por exemplo: a linguagem C uma linguagem de alto nvel, pois abstrai do funcionamento da mquina, se aproximando da linguagem matemtica. No entanto pessoas com dificuldade em matemtica no entende isso.

    Tipos de traduo
    H muitas variaes de como a traduo de uma linguagem de mais alto nvel para a linguagem de mquina feita.

    A mais simples a montagem, que quando cada instruo da linguagem de mais alto nvel traduzida diretamente para uma instruo da linguagem de mquina. O programa que faz esta montagem chamado montador. Ex.: Assembly.

    Um pouco mais complicada a compilao: a partir do programa em linguagem de mais alto nvel gerado um programa de mais baixo nvel equivalente, que montado, gerando o cdigo objeto (programa em cdigo de mquina). Ex.: C.

    Na compilao h em geral mais de um programa trabalhando, basicamente o compilador, que gera um objeto que faz chamadas a procedimentos que no possui, e o link-editor, que liga ao objeto outros objetos, chamados bibliotecas, que possuem os procedimentos necessrios, gerando o objeto final ou cdigo de mquina.

    Outra alternativa a interpretao. H um programa chamado interpretador que funciona como se fosse uma mquina virtual, com suas prprias instrues, e o programa feito usando tais instrues. Ex.: Tcl/Tk.

    Por final, h variaes destas trs formas citadas.

    Por exemplo, h linguagens cuja compilao no gera cdigo de mquina, mas um cdigo intermedirio, chamado bytecode, que interpretado por um interpretador chamado mquina virtual (pois mquina virtual um tipo de interpretador). Por exemplo, Java trabalha assim.

    Uma variao deste tipo de compilao a usada em Smalltalk, pois no gerado um bytecode, mas a compilao altera o comportamento da mquina virtual.

    Por ltimo existe a interpolao, que possui duas variaes:
    1. O interpretador recebe o cdigo e gera um objeto em cdigo de mquina, mas somente em memria, e este objeto executado diretamente da memria (ex.: Perl).
    2. O interpretador recebe o cdigo e gera um bytecode em memria que executado por uma mquina virtual (como Python e Lua).


    Algumas linguagens podem trabalhar com tradues diferentes. Por exemplo, Perl pode ser interpretado ou compilado. Python e Lua podem ser interpretados com mquina virtual, ou compilados para bytecode (que ser tambm interpretado por uma mquina virtual).

    Manipulao de dados
    A principal parte da programao a manipulao de dados: armazenamento, leitura e alterao.
    Para armazenamento e leitura usamos posies de memria e registradores do processador.

    Em linguagens de mais baixo nvel, usamos os prprios endereos de memria e o nomes do registrador, mas em linguagens de nvel mais alto, usamos variveis, que so apelidos para tais endereos e nomes.

    Tambm necessrio saber que quantidade de memria cada dado ocupa e como ele deve se comporta. Isso chamado tipagem.

    Transferncia de informaes
    Muitas vezes necessrio que um determinado dado seja transferido de uma varivel para outra. Esta transferncia camada passagem e h dois tipos de passagem: passagem por valor e passagem por referncia.

    Passagem por valor
    A passagem por valor ocorre quando cada varivel contm o dado em si. Assim quando passamos um dado de uma varivel para outra o dado duplicado para a segunda varivel.
    Ento a alterao do dado na varivel de destino no altera o dado na varivel de origem.

    Passagem por referncia
    A passagem por referncia ocorre quando a varivel no contm o dado em si, mas um ponteiro para a posio de memria onde o dado se encontra. Assim quando passamos uma referncia de uma varivel para outra o dado no duplicado, apenas as duas variveis apontam para a mesma posio de memria.

    Ento a alterao do dado na varivel de destino altera consequentemente o dado na varivel de origem, pois ambos so o mesmo dado.

    Algumas linguagens, como C/C++, permitem o programador escolher usar valores ou ponteiros, enquanto outras linguagens (na verdade a maioria delas) usam valor para alguns tipos determinados e ponteiro (na verdade referncia, que um ponteiro implcito) para outros.

    Tipagem
    Tipagem a definio da quantidade de memria que um determinado dado ocupa e como esse dado deve interagir com os demais.
    H duas classificaes de tipagem, veremos a seguir.

    • Tipagem esttica tipagem dinmica

    Esta uma definio discreta. H duas formas distintas de tratar os tipos de dados: ou o tipo est associado ao dado, ou est associado varivel que o contm.

    1. Quando o tipo est associado ao dado em si, chamamos de tipagem dinmica.


    1. Quando o tipo est associado varivel, chamamos de tipagem esttica.

    Dizemos dinmica ou esttica em relao varivel, ou seja, na tipagem dinmica uma mesma varivel pode conter dados de tipos diferentes, dinamicamente, enquanto na tipagem esttica uma varivel conter sempre dados do mesmo tipo.

    Por outro lado na tipagem dinmica o dado sempre se comportar da mesma forma independente da varivel qual foi associado e na tipagem esttica o dado se comportar de formas diferentes de acordo com a varivel que o contm.

    Enquanto falamos de valores, pode parecer que a tipagem esttica seja superior, mas quando falamos de ponteiros/referncias, a tipagem dinmica passa a levar vantagem.
    Isso ocorre porque queremos que um determinado dado se comporte sempre da mesma forma.

    No entanto a tipagem dinmica mais difcil de ser trabalhada, pois exige ateno redobrada.

    Em suma, ambos as tipagens possuem vantagens e desvantagens, cabendo ao programador (veja bem: ao programador, no ao professor do programador, comunidade, ao livro ou qualquer outro fator externo) decidir qual lhe satisfaz melhor.

    • Tipagem fraca tipagem forte

    Ao contrrio da anterior, est uma definio contnua. H duas direes: tipagem fraca indica menor quantidade de tipos e/ou menor distino entre os tipos e tipagem forte indica maior quantidade de tipos e/ou maior distino entre os tipos.

    Assim como a definio de nvel de abstrao, h linguagens de tipagem mais forte e outras de tipagem mais fraca.

    Por exemplo, C uma linguagem de tipagem fraca, pois, apesar de possuir quatro tipos (int, char, float e double) e algumas variaes (long, unsigned, struct, union), os tipos se confundem, ou seja, a distino entre os tipos no perfeitamente clara.

    Um exemplo de tipagem ainda mais fraca Perl, que alm de possuir apenas trs tipos (escalar, vetor e hash), os tipos se confundem.
    Vamos agora a linguagens de tipagem mais forte

    C++ possui os mesmos tipos de C, mais as classes (que se comportam de forma semelhante a tipos), e ainda faz uma boa distino entre os tipos.

    Java possui alguns tipos, mais classes (como C++), e tem uma distino bem forte.

    Python possui apenas dois tipos reais: tipo e objeto, no entanto tipo e objeto se comportam da mesma forma e as classes (variantes de tipo e de objeto) se comportam como tipos. Resumindo, Python possui uma tipagem tremendamente forte, pois na prtica possui mais de trinta tipos perfeitamente distintos entre si.

    Lua uma linguagem a meio caminho, pois possui sete tipos bem distintos entre si, mas a converso facilitada.

    Novamente no h uma escolha certa, forte ou fraco tudo depende de com que o programador se identifica.

    Observao sria
    Alguns evangelizadores fazem desinformao proposital para convencer as pessoas de suas crenas pessoais, divulgando inverdades.
    Algumas inverdades clssicas so:

    • Tipagem dinmica ruim, esttica boa.
    • Tipagem fraca ruim, forte boa.
    • Tipagem fraca o mesmo que tipagem dinmica.
    • No existe essa de tipagem mais ou menos forte, tipagem fraca ou forte e pronto.
    • Compilao melhor que interpretao.
    • Interpretao por mquina virtual no interpretao, compilao.
    • Apenas Java usa mquina virtual.
    • C no portvel porque no usa mquina virtual.
    • Toda linguagem interpretada (o que exclui Java) scripting.

    H outras clssicas, veremos mais a frente. O importante no acreditar.

    Paradigmas de programao
    Paradigma de programao a forma como o programador enxerga a soluo do problema. Tem mais a haver com a estruturao.

    Em outras palavras, paradigma a metodologia de soluo.

    Inicialmente os programadores no se preocupavam com paradigma algum. Ento os programas eram simples sequncias de procedimentos. Hoje em dia chamamos isso de programao sequencial e exclui automaticamente todos os demais paradigmas.

    Mais tarde foi desenvolvido o paradigma procedimental e a programao estruturada.

    Programao estruturada
    Programao estruturada baseada na estruturao do cdigo.

    A ideia que o programa seja divido em pequenos procedimentos estruturados, chamados sub-rotinas ou funes. O programa desenvolvido a partir das funes mais abstratas e terminando pelas mais especficas (desenvolvimento top-down).

    Deu origem modularizao e programao procedimental.

    Programao procedimental
    Erroneamente chamada programao procedural (procedural procedimental em ingls), programao procedimental a programao baseada em procedimentos.
    O conceito usado normalmente em oposio a programao funcional e s vezes se confunde com programao estruturada ou com programao imperativa.

    Programao funcional
    O foco deste paradigma est nas funes matemticas.
    Um programa ento uma associao de funes matemticas.

    Programao orientada a objetos
    Na orientao a objetos o programa no se baseia em procedimentos, mas na relao entre objetos.
    Objetos so representaes de coisas que executam funes (chamadas mtodos). Estas coisas so quase microuniversos independentes.
    Da interao entre os objetos resulta a soluo do problema proposto.

    Por exemplo, uma porta um objeto que, atravs de sua interao com o portal, a tranca e a chave permite que determinadas pessoas entram e saiam enquanto outras no.

    Importante: os evangelizadores da desinformao pregam que a orientao a objetos exclui outros paradigmas e que seja o paradigma definitivo, no entanto no possvel usar orientao a objetos sem programao estruturada, ou seja, o cdigo precisa estar estruturado para ser orientado a objetos.

    Alis a programao estruturada pr-requisito para a maioria dos demais paradigmas.

    Programao orientada a eventos
    A orientao a eventos pressupe a orientao a objetos, pois implica em criar objetos que reajam a determinados eventos.

    Geralmente criado loop principal que intercepta os eventos, repassando-os para os objetos registrados. Algumas linguagens (ou mdulos) oferecem uma implementao pronta do loop principal.

    Outros paradigmas
    Em tese pode haver tantos paradigmas quanto programadores, visto que paradigma a forma como o programador v a soluo do programa.
    Apenas alguns dos mais clssicos so:


    Scripting
    H ainda outro conceito, que a programao scripting, que consiste no desenvolvimento de scripts.

    Script um cdigo interpretado(muitas vezes por mquina virtual) que consiste em agregar componentes pr-compilados.
    Pela definio, a grande maioria das linguagens modernas so linguagens de scripting(inclusive Java).

    No entanto h pessoas que usam o termo scripting com sentido estritamente pejorativo, sem entender exatamente o significado. Essas pessoas nunca aceitam que sua linguagem seja chamava de linguagem de scripting. s vezes distorcem a descrio do conceito, s vezes mentem sobre o funcionamento de sua linguagem e muitas vezes apenas negam sistematicamente, sem qualquer argumento real.

    Na prtica linguagem de scripting s um conceito arbitrrio usado ou pejorativamente para mal falar alguma linguagem ou para dizer que uma linguagem muito fcil de ser aprendida.

    Concluso
    Esta foi apenas um exposio superficial de alguns conceitos bsicos de programao, mas mais importante, um alerta aos programadores incautos que acabam por crer na evangelizao de pessoas que tm por objetivo desinformar e fanatizar.

    Estejam sempre atentos e, mais importante, mente sempre aberta. =)

    Texto por Rodrigo Cacilhas (La Batalema Pitonisto), Fonte

  2. #2
    Veterano ingresso
    Data de Ingresso
    Jan 2011
    Localizao
    Pgu ~ PR
    Posts
    2.363
    Post Thanks / Like
    Muito bem elaborado o artigo. :-)
    Tomei a liberdade de trazer o contedo para c, caso por ventura o texto original deixe de existir(a fonte est no rodap do post).

Tags para este Tpico

Permisses de Postagem

  • Voc no pode iniciar novos tpicos
  • Voc no pode enviar respostas
  • Voc no pode enviar anexos
  • Voc no pode editar suas mensagens
  •