Se você entende o que é OOP, você sabe que a base da mesma é imitar o mundo real na programação. Mas o mundo real é uma coisa enorme, cheio de outras coisas, que por sua vez são cheias de detalhes. Mas nem sempre nós precisamos de todos os detalhes de um objeto, portanto, pense em abstração no mundo OOP como uma pequena mensagem que diz “Imite o mundo real, mas utilize apenas os detalhes necessários!”.
Em resumo abstração é simplificar a complexidade do mundo real, no caso da programação, através de classes que sejam apropriadas ao contexto do problema.
Complicou? Então vamos ver isso na prática. Imagine que você tem o seguinte problema: você precisa reproduzir um pequeno vídeo. No AS3 o primeiro passo seria criar um objeto NetConnection e um objeto NetStream, e em seguida criaríamos um objeto Video que utilizaria o objeto NetStream para fazer o stream do video e exibí-lo. Segue o código abaixo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import flash.net.NetConnection; import flash.net.NetStream; // Criando objeto NetConnection. var connection:NetConnection = new NetConnection(); connection.connect(null); // Criando objeto NetStream. var stream:NetStream = new NetStream(connection); stream.client = this; stream.play("myVideo.flv"); // Criando objeto Video. var video:Video = new Video(480, 320); video.attachNetStream(stream); // Adicionando video ao palco. this.addChild(video); /** * Recebe os metadados do video carregado. */ function onMetaData(info:Object):void { // nada implementado no momento. } |
Como tu pode ver, criamos diversos objetos complexos para chegar ao nosso objetivo que é reproduzir o vídeo. Mas já imaginou que toda vez em que você tiver que reproduzir um vídeo, terá que criar todas estas instruções novamente? Não seria mais interessante se abstrairmos tudo isso em uma classe, e utilizarmos uma simples chamada em um objeto, algo como VPlayer.play()?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | package { import flash.display.Sprite; import flash.media.Video; import flash.net.NetConnection; import flash.net.NetStream; public class VPlayer extends Sprite { private var _connection:NetConnection; private var _stream:NetStream; private var _video:Video; /** * Construtor */ public function VPlayer(width:Number = 320, height:Number = 240) { super(); // Criando objeto NetConnection. this._connection = new NetConnection(); this._connection.connect(null); // Criando objeto NetStream. this._stream = new NetStream(this._connection); this._stream.client = this; // Criando objeto Video. this._video = new Video(width, height); this._video.attachNetStream(this._stream); // Adicionando video ao palco. this.addChild(this._video); } /** * Reproduz o video especificado em url. */ public function play(url:String):void { this._stream.play(url); } /** * Recebe os metadados do video carregado. */ public function onMetaData(info:Object):void { // nada implementado no momento. } } } |
Aparentemente você escreveu bem mais do que no exemplo anterior, mas a diferença é que agora, temos todo aquele código abstraído em uma classe, que pode ser usado sempre que preciso.
1 2 3 4 | var player:VPlayer = new VPlayer(480, 320); player.play("myVideo.flv"); this.addChild(player); |
A vantagem do nosso código abstraído, é que sempre que precisarmos de uma alteração relacionada ao modo como o vídeo é reproduzido, iremos até a classe VPlayer, e a alteração irá refletir em toda e qualquer instância que faça uso dela, ao contrário do modelo anterior, onde eu teria que alterar em cada local onde as instruções fossem utilizadas.
Show…
Bem usual..
A galera precisa disso.
Oi Mozart, parabéns pelo blog! Tem um conteúdo muito bom! Pena você não postar com frequência! Abraços!
Concordo com o Guilherme, ótimo conteúdo do seu blog sei q o tempo é curto para postar sempre, mesmo assim voltarei mais vezes, abç…
Parabéns… Além de muito bom o post o conteúdo do blog em si parace ser super interessante, parabéns.