Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus Brito

ActionScript 3.0 Orientado a Objetos

Recommended Posts

ActionScript 3.0 Orientado a Objetos


Aula 06: Encapsulamento



Packages(Pacotes)

Pacotes são containers onde podemos guardar classes e outras coisas em um programa. Cada pacote é um região independente dentro de um programa e essa região ganha um nome, que é o nome do pacote(package name). Por convenção nomes de pacotes geralmente são iniciados com letras minúsculas, já nomes de classes são escritas com letra maiúsculas.
Para criarmos um pacote, definiremos assim:

package nomedoPacote{
}

Todas as definições de pacotes começam com a palavra-chave, package. Para quem não sabe uma palavra-chave ou keyword, é uma palavra reservada da linguagem Actionscript, assim como outra linguagem terá suas keywords. Então no exemplo acima a palavra package, fala pro Actionscript criar um pacote. Depois disso vem o nome do pacote. E toda a nossa classe vai dentro das chaves que abrem e fecham o pacote.
-Convenções(não obrigatórios):

DNS reverso.
Ex.: br.com.imasters
-Seguido por ponto(.)
-Seguido pelo propósito geral do pacote
package br.com.kisuke.componentes{
      class MeuComponente{
}
}

Modificadores e Controles de Acesso

Assim como em outras linguagens de programação a acessibilidade de uma classe/método seguem regras e é importante sabe-lás.

Public

Quando criamos uma classe em determinado pacote, ela por padrão pode ser usada somente dentro desse pacote. Para deixar essa classe disponível fora do pacote é preciso usar o atributo public.

package br.com.kisuke.componentes{
      public class MeuComponente{ //atributo público na classe MeuComponente
}
}

Internal

Se dentro do pacote componentes tivesse outra classe, por exemplo MeuGridView, e de alguma forma a classe Meucomponente fosse ser usada pela classe MeuGridView eu não precisaria declarar o atributo public na classe, porque elas estão no mesmo pacote. E se eu quisesse explicitar que ela só vai ser usada dentro desse package, eu declararia ela como internal.
package br.com.kisuke.componentes{
      internal class MeuComponente{ //atributo internal na classe MeuComponente
}
}

Só irei falar desses dois modificadores de acesso para as classes, quem quiser pode pesquisar sobre os outros.Irei falar do private e do protected a seguir para métodos.

Modificadores para Métodos

Private

Um método private restringe o acesso do método somente dentro da classe, ou seja um método private so pode ser acessado dentro da classe que o definiu.

//As classes estão no mesmo package
//Medico.as
package{
	import flash.display.MovieClip;	
	package{
	import flash.display.MovieClip;	
	public class Medico extends MovieClip{
		
		function Medico(){
			
			}
		private function getNome():String{//Nota1
			
			return "Dr. House";
			
			}
			public function imprimeNome():void{
				trace("O nome do médico é " + getNome()); //Nota 2
				}
			}}
//Consulta.as
package{
	import flash.display.MovieClip;
	public class Consulta extends MovieClip{
		
		var m:Medico = new Medico();
		
		function Consulta(){
			trace("O nome do médico é " + m.getNome());//Nota 3
			m.imprimeNome();//Nota 4
			}
	}}

//TesteClasses.fla
//Chamando Consulta no documment class

*Nota 1: O método foi definido como private
*Nota 2: O acesso ao método getNome() está sendo feito dentro da própria classe, isso pode.
*Nota 3: Tentativa de acessar um método private---erro
*Nota 4: Acesso a um método público através de um objeto da classe. Totalmente possível.
Lembrem-se o private é o modificador mais restringível.

Protected

O protected é um pouco mais “liberal” do que o private, pois o protected permite que uma classe X em um determinado pacote possa ser acessada de outra classe Y em outro pacote, desde que a classe Y herde a classe X. Ainda não falamos de herança, portanto pra alguns o conceito de herdar ou subclasse é ainda incompreensível, mas não se preocupem, chegaremos lá.

//Medico.as
package{
		
	public class Medico{
		
		function Medico(){
			
			}
		protected function getNome():String{//Nota 1
			
			return "Dr. House";
			
			}
			
			}}
//Consulta.as
package{
	
	public class Consulta extends Medico{//Nota 2
		
		
		function Consulta(){
			trace("O nome do médico é " + getNome());//Nota3
			
			}
	}}
//testeClasses.fla
//Primeiro frame
Var c:Consulta = new Consulta();

*Nota 1: O método foi definido como protected.
*Nota 2: A classe consulta estende a classe Medico.
*Nota 3: Acesso o método getNome() como se o mesmo pertence a classe consulta, se eu quiser me referir explicitamente a classe Medico que é onde o metodo getNome(), pertence eu usaria a a palavra super, que veremos mais adiante em herança.

Getters e Setters

Actionscript 3 suporta get’s e set’s métodos. Para se definir um método get, segue abaixo:
function get nameMethod(){
//código
}
Onde a palavra chave get significa que o método é um método get. E nameMethod é o nome do método.
function set nameMethod(newValue){
//código
}
Onde a palavra chave set significa que o método é um método set. E nameMethod é o nome do método, onde newValue significa que será recebido um novo valor e será substituído pelo antigo.
Para demonstar o uso vou deixar uma classe aqui com os dois métodos nela.


package{
public class Medico{
		private var _nome:String;//Nota 1
		function Medico(nome:String){
			_nome = nome;
			imprimeNome();
			this._nome = "kisuke";//Nota 2
			imprimeNome();
			}
		public function get Nome():String{
			
			return _nome;
			
			}
			
			public function set Nome(novoNome:String):void{
			
			_nome = novoNome;
			
			}
			
			public function imprimeNome():void{
				
				trace("O nome é " + this._nome);//Nota 3
				}
			
			}}

*Nota 1: A variável _nome é declarada como private
*Nota 2: Nessa linha estou acessando o método set Nome(), e mudando o nome pra kisuke.
*Nota 3: Estou acessando o método get Nome(), e como retorno devolve o nome.

Variáveis Estáticas e Método Estáticos

Variáveis Estáticas

Ate agora trabalhamos com variáveis de instancia, que são variáveis associadas com uma instancia particular de determinada classe. Variáveis estáticas são variáveis associadas com a própria classe.
Ex.: Um exemplo uma classe que representa um carro, poderia usar uma variável estática pra guardar a velocidade máxima que as instancias dessa classe teria.
Assim como se declara uma variável de instancia, se declara uma variável estática apenas deve-se usar a palavra chave static.

static var identificador = valor; 

Assim como as variáveis de instancia se modificam dependendo do modificador de acesso(public,private,protected), as variáveis estáticas também se modificam.

private static var identificador = valor; 

Para fazer o acesso a uma variável estática deve-se usar o nome da classe seguido de ponto e o nome da variável estática.Quando se está trabalhando na mesma classe pode-se omitir o nome da classe, mas é boa prática usá-lo.

package{
		
	public class Medico{
		
		private var _nome:String;
		private static var totalExames:uint = 20; // Variavel estatica
		
		function Medico(nome:String){
			_nome = nome;
			
	trace('O numero de exames realizados pelo médico ' + this._nome + ' foram ' + Medico.totalExames + ' exames');
			}
		public function get Nome():String{
			return _nome;
			}
			public function set Nome(novoNome:String):void{
			_nome = novoNome;
			}
public function imprimeNome():void{
				trace("O nome é " + this._nome);
				}}}

Constantes

Uma constante é uma variável de instancia, uma variável estática ou local, que quando se declara e inicia o seu valor, esse valor deve permanecer o mesmo. Assim como o nome diz constante. Para criar uma constante usa-se a mesma declaração de variável porem com o uso da palavra chave const ao invés da palavra var.

static const IDENTIFICADOR = valor //constante estática
const IDENTIFICADOR = valor //constante normal(constante de instancia)


Métodos Estáticos

Assim como foi visto anteriormente em variáveis estáticas, semelhantemente se aplica a métodos estáticos, ou seja, os métodos estáticos descrevem funcionalidades que se aplicam a classe toda e não a algumas instancias apenas. Os modificadores de acesso também desempenham o mesmo papel aqui, restringir o acesso.Para fazer o acesso a um método estático usa-se do mesmo processo anterior nome da classe mais ponto(.), nome do método.

public class Medico{
public static function preescreveReceita(p:Paciente):void{
				//codigo aqui!!!
}}

//Acessando
Medico.preescreveReceita(paciente);



Referências
Essential Actionscript


Bye Bye
http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns pelas aulas, estou acompanhando e me aprofundando em AS 3.0.

Tem previsão de quando sairá a próxima aula?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns pelas aulas, estou acompanhando e me aprofundando em AS 3.0.

Tem previsão de quando sairá a próxima aula?

 

 

Nem sabia que tinha gnt acompanhando ainda.... Nem sabia se ia continuar a escrever.

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já já eu lanço a proxíma aula,to meio pepinado de coisas aqui, mas logo sai.

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já já eu lanço a proxíma aula,to meio pepinado de coisas aqui, mas logo sai.

Abs

 

 

Não para com os cursos não, sei que é complicado continuar pq você, que tem outras coisas a fazer mas continue o seu trabalho no Forum que esta muito bom, estou ansioso pela próxima aula...

 

 

[]s

 

Riggns

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matheus e Michel, não abondone seus discípulos! rs..

 

Vocês são a chave do sucesso e do aperfeiçoamento de muitaaaa mas muita gente mesmo!

 

Então esperamos o retorno!!

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito bom esse curso, queria saber se voce deixaria eu fazer uma apostila para uso pessoal com esse curso. muito bom,

 

Mantendo os créditos, você pode sim.

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou fazer a apostila hoje, caso queira uma copia dela entre em contato comigo pelo msn, meu msn e esse ai > zaia.lorenz@hotmail.com

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou fazer a apostila hoje, caso queira uma copia dela entre em contato comigo pelo msn, meu msn e esse ai > zaia.lorenz@hotmail.com

abraço

 

 

As aulas ainda não foram finalizadas, seria melhor você esperar não?

Abs

 

P.S Não se esqueça de manter os créditos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.