Mostrando postagens com marcador c++. Mostrar todas as postagens
Mostrando postagens com marcador c++. Mostrar todas as postagens

8 de janeiro de 2007

Teorias e Tempo de Sobra

Por: Raquel Serruya




Teoria da Integral Traficante
Contribuição: Péricles Machado

Conforme certo dia me ensinou Péricles, o terrível... A integral não passa de um traficante. Imaginem os pontos da função, como na verdade pequenos pózinhos. A integral, então, divide o pó, entre os vários níveis da função (que pode ser encarada como área de atuação da integral - a favela).

Ocorre uma grande luta na favela. A luta pelo pó. Os pontos guerreiam, trocam balas, até que restam as
grandes mandantes: as primitivas, a que tem complexo de superioridade (enfim, se acha), e a que tem complexo de inferioridade (mas que luta pelo o que é dela - emo xD). Quando uma subtrai a outra (ou seja, elas se eliminam), temos a verdadeira face da integral. Só sobra o traficante novamente.

As integrais duplas e triplas são grandes organizações, onde também ocorrem eliminações crueis...

Quem dispor de mais informações sobre elas, por favor, nos envie. É muito importante combater o tráfico, principalmente nas provas de Cálculo 2 o_o

O Mundo Como o Conhecemos - Matrix: Você foi feito com que linguagem?
Contribuição: Albert Richard, Péricles e Edson

Teorias afirmam que o Arquiteto, da Matrix, é na verdade o Deitel, mas vertentes dizem que na verdade é o Tanenbaum (pra quem não conhece ainda, ele tem um livro de Arquitetura e Organização de Computadores, e um de Sistemas Operacionais - e um de receitas...).

Teorias também afirmam, que inicialmente, Neo era um ser procedural, que agia de acordo com a Matrix. Depois de um tempo, ele ganhou o domínio dos objetos. E então ele pôde manipular os objetos da matrix com perfeição, como balas, agentes, e, com métodos super classe, ele pôde alterar as regras como gravidade, etc. Temos como exemplo:

public class MatrixCommoner{
private float gravity;
private setGravity(){
gravity = 9.8

(...)

}

public class TheOne extends MatrixCommoner
{
super setGravity(float a){
gravity = a;
}

(...)
}

public class Fight{

public static void main(String args[]){

TheOne neo = new TheOne;
neo.setGravity(0);
neo.blockBullets;
neo.blowUpAgent(Smith);

}

Até o momento, foi descoberta apenas esta parte do código. Mandem mais descobertas!

Teorias afirmam que todos os agentes da matrix foram feitos em assembler. Mas o Agente Smith acabou se tornando muito difícil de se manter, já que precisou de várias atualizações, devido a crises de personalidade superior. Então, ele se tornou dispendioso para a Matrix, que deu um pé na bunda dele. Ele foi embora, triste e desempregado, até que resolveu se renovar. Conheceu um tal de C, e bateu um papo com ele. Então, usando de manipulações de baixo nível, ele absorveu o C. Mas ele queria mais, muito mais. Então ele deu um upgrade para o C++.

A primeira coisa que Smith fez, foi criar um método. Com sua mente maligna e de baixo nível (baixo calão!!!) ele resolveu fazer uma manipulação que copiava todas as características boas de outros agentes, que, ainda em assembler, não sabiam se manter direito para suportar um ataque desse nível (nível médio).

O nível dos agentes comuns era muito baixo, então Smith saia vencendo. E então, ele aplicava um outro método: o da reprodução. Ele apagava todo o código do agente comum, e inseria o seu próprio código. Ele pode até ser considerado como um worm perigossíssimo para a Matrix.

Então, Smith também adquiriu o controle dos objetos, além de poder também fazer manipulações de baixo nível, agora por debaixo dos panos (asm!). Mas ele não era de alto nível, como Neo era. E isso o deixou furioso. E então ele foi para o combate final, estilo Dragon Ball Z.

Mas, segundo me constam fontes confiáveis (Arial Black e Verdana, além de Times New Roman), a luta não foi como descrita no filme. Até hoje encontramos resquícios de Smith, e vários programadores são adeptos de seu culto C++.

Qualquer informação a esse respeito é importantíssima para o futuro da humanidade.

Contribuiram com essas teorias, nossos colegas, Albert, Edson, e Péricles. Palmas a estes bravos homens que conseguiram desvendar o segredo da programação orientada a matanças.




Hehehe, o que a gente não faz quando tá doente em casa...

Beijos! ;)

Raquel (2° Semestre - 2006)

26 de dezembro de 2006

Java ou C?


Bom, continuando a seção tira-dúvidas...

Uma pergunta bastante comum entre estudantes da área de computação é: "qual a melhor linguagem, Java ou C?"

Não há uma resposta simples pra essa questão. Na verdade, não há uma só resposta; as duas linguagens podem ser uma melhor que a outra, dependendendo das circunstâncias.

C é uma linguagem relativamente antiga ("relativamente" porque, na tecnologia, nada consegue se manter novo por mais do que alguns dias). De acordo com a Wikipedia, a linguagem foi criada em 1972, por Dennis Ritchie (atenção amantes da programação: vale a pena clicar no site desse cara!).

É uma linguagem procedural - ou seja, seu foco está não nos dados, mas nas ações (ou procedimentos) sobre esses dados. Por ser eficiente e gerar programas que rodam com bom desempenho, C se tornou rapidamente popular, e até hoje é muito usada, principalmente na programação de sistemas operacionais, já que as rotinas executadas por esses sitemas - como escalonamento de processos, alocação de memória, interfaceamento de dispositivos, etc - exigem o máximo de rapidez e simplicidade. Muitos a consideram não apenas uma, mas a linguagem de programação.

Para o tipo de desenvolvimento de software aplicativo utilizado nos anos 70, C era suficiente. No entanto, com o aumento da complexidade dos programas e com a perpepção de que milhares de linhas de código envolvendo centenas de funções não são nada fáceis de entender, manter e modificar, ganhou força o conceito de Programação Orientada a Objetos.

(Esse conceito já existia há bastante tempo, e baseava-se em um tripé que praticamente transformou o mundo da programação: o encapsulamento, a herança e o polimorfismo.)

É interessante, portanto, acrescentar à "disputa" uma terceira linguagem de programação. Por volta de 1980, Bjarne Stroustrup (não é preciso entender o nome) criou uma espécie de linguagem C "adaptada" para a orientação a objetos, que ele inicialmente chamou de "C com classes". Mais tarde ela recebeu o nome de C++. C++ possui as mesmas funcionalidades de C, mas com a vantagem de suportar a programação genérica, a orientação a objetos e a abstração de dados. De acordo com o próprio Bjarne Stroustrup, C++ é basicamente uma "linguagem C melhor que a linguagem C".

Java, por sua vez, é mais "novinha". Nasceu por volta de 1990, na Sun Microsystems.

Apesar de ter uma sintaxe bastante semelhante à das linguagens C e C++, Java possui algumas características que a tornam única.

A mais conhecida delas é a portabilidade. Todos os programas escritos em Java (chamados de classes) são compilados em códigos chamados de bytecodes, que por sua vez rodam em cima da Java Virtual Machine (JVM) - ou Máquina Virtual Java, em português. A JVM é, basicamente, um programa de computador que traduz os bytecodes, em tempo real, para instruções da máquina sobre a qual o programa deve rodar. Para cada arquitetura de processadores existente no mercado, desde o mais simples telefone celular até os potentes processadores com núcleo duplo, existe uma implementação da JVM.

Para os bytecodes, a máquina é sempre a mesma. Um inteiro tem sempre X bits, um número de ponto flutuante tem sempre Y bits, e as instruções são sempre as mesmas. É a JVM que se encarrega de manipular esses parâmetros, para que os bytecodes de fato funcionem. E é isso que permite que uma classe Java rode tão bem num Pentium II quanto num Atlhon 64.

No entanto, para fazer essa "tradução" em tempo real (ou interpretação) de bytecodes para a linguagem de máquina real, a JVM também consome tempo e processamento; por isso, os programas Java geralmente têm um desempenho inferior, em termos de velocidade de execução, a programas similares escritos em C ou C++.

Mas, se Java é mais "lenta", por assim dizer, porquê é que ela conquistou tanto espaço entre os programadores?

Bem, a portabilidade não é a única característica que se destaca em Java. Java é também uma linguagem 100% orientada a objetos. Isso significa que qualquer programa, até mesmo o mais simples "Hello world!", é definido como um objeto. Esse paradigma força o programador a escrever códigos mais curtos, divididos em classes, que são muito mais fáceis de entender, manter e modificar. E isso é bastante atraente.

As classes Java também são facilmente reutilizáveis. Por exemplo: um engenheiro pode escrever uma biblioteca de classes Java que executem o cálculo de integrais e derivadas, transformações lineares, etc, para utilizá-las no projeto de um aplicativo voltado à engenharia. Mais tarde, se um matemático pedir que um programador escreva um aplicativo que execute esses mesmos cálculos, basta que o programador "empreste" a biblioteca e escreva uma intrerrface mais voltada ao problema em questão.

Java também possui regras rígidas com relação à segurança dos dados. Manipulações por meio de ponteiros, por exemplo, não são permitidas.

Outro recurso interessante de Java é o "coletor automático de lixo" (garbage collector), que se encarrega de verificar, em tempo de execução, se existem referências a variáveis que não estejam sendo mais utilizadas (e, portanto, desperdiçando memória); quando o garbage collector encontra alguma dessas referências, ele a descarta automaticamente, liberando a memória que estava sendo desperdiçada. Ou seja, ao mesmo tempo em que perde desempenho por causa da necessidade de interpretação dos bytecodes, Java utiliza de forma mais eficiente a memória disponível.

Enfim, não há como definir a "melhor" linguagem de programação entre Java e C ou C++.

Java possui grande portabilidade (em tempos de Internet isso é bastante importante), mas C e C++ oferecem acesso a recursos de hardware que Java não oferece. Java é organizada, mas o excesso de regras pode aborrecer alguns programadores.

O fato é que essas três linguagens continuam sendo utilizadas a todo vapor, e não há perspectiva de que tão cedo elas sejam abandonadas.

Para entender mais sobre cada uma delas, recomendo os livros abaixo (há vários outros, mas estes foram os que me vieram primeiro à cabeça), que podem ser emprestados em bibliotecas universitárias ou adquiridos nas boas livrarias (edições mais recentes):

C Completo e Total 3a Edição - Herbert Schildt

C++ How to Program, 5/e (Deitel & Associates)

Java How to Program, Sixth Edition (Deitel & Associates)


Na internet há também vasta quantidade de informação sobre o assunto. Dennis Ritchie disponibiliza em seu site bastante informação sobre a linguagem C. No site de Bjarne Stroustrup encontra-se tudo sobre a linguagem C++. E, na página de Java da Sun Microsystems pode-se encontrar vários artigos e tutoriais sobre a linguagem.