<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title># Johnatan Oliveira ~ joww.net - Internet, Segurança, Tecnologia, Linux, Programação, Música e Vida Profissional &#187; oop</title>
	<atom:link href="http://www.joww.net/blog/tag/oop/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joww.net/blog</link>
	<description>Internet, Segurança, Tecnologia, Linux, Programação, Música e Vida Profissional</description>
	<lastBuildDate>Mon, 09 Jan 2012 11:07:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Introdução a Orientação a Objetos</title>
		<link>http://www.joww.net/blog/2009/08/16/introducao-a-orientacao-a-objetos/</link>
		<comments>http://www.joww.net/blog/2009/08/16/introducao-a-orientacao-a-objetos/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 17:04:18 +0000</pubDate>
		<dc:creator>Johnatan Oliveira joww.net</dc:creator>
				<category><![CDATA[Action Script]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[programacao]]></category>

		<guid isPermaLink="false">http://www.joww.net/blog/?p=241</guid>
		<description><![CDATA[Introdução a Orientação a Objetos e um pouco de action script 3.0]]></description>
			<content:encoded><![CDATA[<h3></h3>
<h3>História</h3>
<p>O termo Programação Orientada a Objetos foi criado por Alan Kay, autor da linguagem de programação Smalltalk. Mas mesmo antes da criação do Smalltalk, algumas das idéias da POO já eram aplicadas, sendo que a primeira linguagem a realmente utilizar estas idéias foi a Simula 67 no ano de 1967. A POO já é bastante antiga, mas só agora vem sendo aceito realmente nas grandes empresas de desenvolvimento de Software. Alguns exemplos de linguagens modernas utilizadas por grandes empresas em todo o mundo que adotaram essas idéias: Java, C#, C++, Object Pascal (Delphi), Ruby, Python.</p>
<p>A maioria das linguagens modernas, adotam parcialmente as idéias do POO, deixando as formas procedurais serem utilizadas normalmente junto com a orientação a objetos, como o C++ por exemplo.</p>
<h3>Visão Geral do Objeto</h3>
<p>OOP (Programação orientada a objetos) é uma maneira de organizar o código em um programa agrupando-o em objetos. O uso de uma abordagem orientada a objetos para organizar um programa permite agrupar partes específicas de informações (por exemplo, informações sobre música, como título do álbum, título da faixa ou nome do artista) juntamente com a funcionalidade comum ou com as ações associadas a essas informações (como “adicionar faixa à lista de reprodução” ou “reproduzir todas as canções desse artista”). Esses itens são combinados em único item, um objeto (por exemplo, um “Album” ou “MusicTrack”).</p>
<p>Um objeto é uma entidade do mundo real que tem uma identidade. Objetos podem representar entidades concretas (um arquivo no meu computador, uma bicicleta) ou entidades conceituais (uma estratégia de jogo, uma política de escalonamento em um sistema operacional). Cada objeto ter sua identidade significa que dois objetos são distintos mesmo que eles apresentem exatamente as mesmas características.</p>
<p>Embora objetos tenham existência própria no mundo real, em termos de linguagem de programação um objeto necessita um mecanismo de identificação. Esta identificação de objeto deve ser única, uniforme e independente do conteúdo do objeto. Este é um dos mecanismos que permite a criação de coleções de objetos, as quais são também objetos em si.</p>
<p>Vários benefícios são obtidos quando se pode agrupar esses valores e funções em conjunto, incluindo apenas a necessidade de manter o rastreio de uma única variável, em vez de várias, organizar a funcionalidade relacionada em conjunto, e poder estruturar programas de maneiras muito correspondentes ao mundo real.</p>
<h3>Classes</h3>
<p>O comportamento de um objeto é representado pelo conjunto de operações que podem ser executadas sobre o objeto. Objetos com a mesma estrutura e o mesmo comportamento são agrupados em classes. Uma classe é uma abstração que descreve propriedades importantes para uma aplicação e simplesmente ignora o resto.</p>
<p>Cada classe descreve um conjunto (possivelmente infinito) de objetos individuais. Cada objeto é dito ser uma instância de uma classe. Assim, cada instância de uma classe tem seus próprios valores para cada atributo, mas dividem os nomes dos atributos e métodos com as outras instâncias da classe. Implicitamente, cada objeto contém uma referência para sua própria classe &#8212; em outras palavras, ele sabe o que ele é.</p>
<h3>Atributos</h3>
<p>A estrutura de um objeto é representada em termos de atributos. Uma característica atribuída a um elemento de classe (como uma propriedade ou método) na definição de classe. Os atributos são usados normalmente para definir se a propriedade ou método estará disponível para acesso por código em outras partes do programa. Por exemplo, private e public são atributos. Um método particular pode ser chamado apenas pelo código dentro da classe, enquanto um método público pode ser chamado por qualquer código no programa.</p>
<p>Um atributo é um valor de dado assumido pelos objetos de uma classe. Nome, idade e peso são exemplos de atributos de objetos Pessoa. Cor, peso e modelo são possíveis atributos de objetos Carro. Cada atributo tem um valor para cada instância de objeto. Por exemplo, o atributo idade tem valor &#8220;29&#8221; no objeto Pedro Y. Em outras palavras, Pedro Y tem 29 anos de idade. Diferentes instâncias de objetos podem ter o mesmo valor para um dado atributo.</p>
<p>Cada nome de atributo é único para uma dada classe, mas não necessariamente único entre todas as classes. Por exemplo, ambos Pessoa e Companhia podem ter um atributo chamado endereço.</p>
<p>No diagrama de classes, atributos são listados no segundo segmento da caixa que representa a classe. O nome do atributo pode ser seguido por detalhes opcionais, tais como o tipo de dado assumido e valor default.</p>
<p>Não se deve confundir identificadores internos de objetos com atributos do mundo real. Identificadores de objetos são uma conveniência de implementação, e não têm nenhum significado para o domínio da aplicação. Por exemplo, CIC e RG não são identificadores de objetos, mas sim verdadeiros atributos do mundo real.</p>
<h3>Operações e Métodos</h3>
<p>Uma operação é uma função ou transformação que pode ser aplicada a ou por objetos em uma classe. Por exemplo, abrir, salvar e imprimir são operações que podem ser aplicadas a objetos da classe Arquivo. Todos objetos em uma classe compartilham as mesmas operações.</p>
<p>Toda operação tem um objeto-alvo como um argumento implícito. O comportamento de uma operação depende da classe de seu alvo. Como um objeto &#8220;sabe&#8221; qual sua classe, é possível escolher a implementação correta da operação. Além disto, outros argumentos (parâmetros) podem ser necessários para uma operação.</p>
<p>Uma mesma operação pode se aplicar a diversas classes diferentes. Uma operação como esta é dita ser polimórfica, ou seja, ela pode assumir distintas formas em classes diferentes.</p>
<p>Um método é a implementação de uma operação para uma classe. Por exemplo, a operação imprimir pode ser implementada de forma distinta, dependendo se o arquivo a ser impresso contém apenas texto ASCII, é um arquivo de um processador de texto ou binário. Todos estes métodos executam a mesma operação &#8212; imprimir o arquivo; porém, cada método será implementado por um diferente código.</p>
<p>A assinatura de um método é dada pelo número e tipos de argumentos do método, assim como por seu valor de retorno. Uma estratégia de desenvolvimento recomendável é manter assinaturas coerentes para métodos implementando uma dada operação, assim como um comportamento consistente entre as implementações.</p>
<p>Em termos de diagramas OMT(Object Modelling Technique), operações são listadas na terceira parte da caixa de uma classe. Cada nome de operação pode ser seguida por detalhes opcionais, tais como lista de argumentos e tipo de retorno. A lista de argumentos é apresentada entre parênteses após o nome da operação. Uma lista de argumentos vazia indica que a operação não tem argumentos; da ausência da lista de argumentos não se pode concluir nada. Caso a operação retorne resultado, este não deve ser omitido &#8212; esta é a forma de distingui-la de operações que não retornam resultado.</p>
<p>Vamos exemplificar a linguagem.</p>
<h3>E pra que serve o Construtor?</h3>
<p>Um construtor tem uma função especial: ele serve para inicializar os atributos e é executado automaticamente sempre que você cria um novo objeto.<br />
Quando você especifica os atributos de uma classe, você apenas diz ao sistema algo como &#8220;objetos desta classe Pessoa vão ter uma variável chamada Nome que é do tipo String, uma variável chamada idade que é do tipo inteiro, etc, etc&#8221;. Mas estas variáveis não são criadas, elas só serão criadas no construtor. O construtor também pode receber parâmetro, desta forma, você pode passar para o construtor uma String contendo o nome da Pessoa que você está criando, sua idade, etc. Normalmente, a sintaxe é algo parecido com isto:</p>
<p>Pessoa joao := new Pessoa( &#8220;João&#8221;, 13 );</p>
<p>Este código gera um novo objeto chamado joao que é do tipo Pessoa e contem os valores &#8220;João&#8221; como nome e 13 como idade.</p>
<p>O mais importante é entender como funciona a comunicação entre os objetos, que sempre segue o seguinte fluxo:</p>
<p>-Um objeto A envia uma mensagem para o objeto B.<br />
-Objeto B verifica qual foi a mensagem que recebeu e executa sua ação correspondente. Esta ação está descrita no método que corresponde a mensagem recebida, e está dentro da Classe a qual este objeto pertence.</p>
<h3>Pacotes</h3>
<p>Falando da linguagem AS3, ela contém os seguintes pacotes:</p>
<p>•    adobe<br />
•    fl<br />
•    flash</p>
<p>Pacotes (packages) é um conjunto de classes. Na verdade, é uma pasta. Então, a grosso modo, um pacote é uma pasta com um monte de classes dentro. Mas, porque agrupar as classes em um pacote? Por uma questão: or-ga-ni-za-ção!</p>
<p>Vamos pegar, por exemplo, o pacote flash. Dentro deste, temos diversos sub-pacotes. Um destes sub-pacotes é o net, que contém um conjunto de classes para enviar e receber dados através de uma rede, como por exemplo, receber dados de um URL, gerenciar arquivos, etc.</p>
<p>Enfim, pacotes são uma forma de organizar melhor suas classes, a fim de encontrá-las facilmente quando precisar. Agora você sabe que, se precisar executar alguma tarefa relacionada a redes, irá procurar no pacote flash.net a classe que atende as suas necessidades.</p>
<p>Dê uma olhada pelas classes do Flash sempre que possível, para que você possa se ambientar com o que a linguagem tem a oferecer, e não ficar perdido quando precisar de algo.</p>
<p>Um bom caminho para dar uma olhada nas classes é o F1, ou o livedocs: <a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/" target="_blank">http://help.adobe.com/en_US/AS3LCR/Flash_10.0/</a></p>
<h3>Especializações</h3>
<p>No mundo real, alguns objetos e classes podem ser descritos como casos especiais, ou especializações, de outros objetos e classes. Por exemplo, a classe Notebook Core 2 Duo, é uma especialização da Classe Notebook, que por sua vez é uma especialização da Classe Computadores. Não seria interessante, muito menos necessário que tudo que foi criado e descrito para Classe Computadores fosse copiado e colado para Classes subseqüentes como Notebook.</p>
<h3>Herança</h3>
<p>Herança é o mecanismo do paradigma de orientação a objetos que permite compartilhar atributos e operações entre classes baseada em um relacionamento hierárquico. Uma classe pode ser definida de forma genérica e depois refinada sucessivamente em termos de subclasses ou classes derivadas.</p>
<p>Cada subclasse incorpora, ou herda todas as propriedades de sua superclasse (ou classe base) e adiciona suas propriedades únicas e particulares. As propriedades da classe base não precisam ser repetidas em cada classe derivada. Esta capacidade de fatorar as propriedades comuns de diversas classes em uma superclasse pode reduzir dramaticamente a repetição de código em um projeto ou programa, sendo uma das principais vantagens da abordagem de orientação a objetos.</p>
<h3>Vantagens da POO</h3>
<p>- Os sistemas, em geral, possuem uma divisão de código um pouco mais lógica e melhor encapsulada do que a empregada nos sistemas não orientados a objetos. Isto torna a manutenção e extensão do código mais fácil e com menos riscos de inserção de bugs. Também é mais fácil reaproveitar o código.</p>
<p>- É mais fácil gerenciar o desenvolvimento deste tipo de software quando temos uma equipe grande. Podemos fazer uma especificação UML antes de iniciar o desenvolvimento do software em si, e em seguida dividirmos o sistema em classes e pacotes, e cada membro da equipe pode ficar responsável por desenvolver uma parte do sistema.<br />
Desvantagens da POO</p>
<p>- O aprendizado do paradigma de programação orientada a objetos é bem mais complicado no início do que os velhos sistemas procedurais. Para começar a programar é necessário ter estabelecido uma série de conceitos bastante complexos. Já na programação procedural tradicional, basta decorar meia dúzia de comandos e você já consegue fazer um programa simples.</p>
<p>- Dificilmente uma linguagem orientada a objetos conseguirá ter um desempenho em tempo de execução superior a linguagens não orientadas a objetos.</p>
<h3>Bibliografia</h3>
<p>Adobe ActionScript 3.0<br />
Linha de Código<br />
Mozart Petter<br />
Marcio Frayze David<br />
Wikipedia</p>
]]></content:encoded>
			<wfw:commentRss>http://www.joww.net/blog/2009/08/16/introducao-a-orientacao-a-objetos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

