Показать сообщение отдельно
Старый 02.07.2008, 21:04
riden вне форума Посмотреть профиль Отправить личное сообщение для riden Найти все сообщения от riden
  № 437  
Ответить с цитированием
riden
 
Аватар для riden

Регистрация: Jun 2005
Сообщений: 147
По умолчанию OOP AS1 В ДЕЙСТВИИ 3 in 1: инкапсуляция, наследование, полиморфизм

OOP AS1 В ДЕЙСТВИИ 3 in 1: инкапсуляция, наследование, полиморфизм
Следует заметить что НАСЛЕДОВАНИЕ в AS1 - более широкое понятие. Здесь - наследование на уровне экземпляр-класс, наследование свойств прототипов класса, надкласса, наследование свойств созданных внутри конструктора и пр... В этом плане AS1 более гибок... такое наследование позволяет экономить память, ресурсы компьютора.
Я покажу наследование - в "классическом" понимании, то есть как в AS3, Java, C#. Код:
*IA - in action, в действии
Код:
//Класс Rectangle - надкласс класса Square
function Rectangle(width,height){
	this.test = "test";
	var l2this=this;
	function Private(){trace(l2this.test);}//приват метод// ИНКАПСУЛЯЦИЯ IA
	this.callPrivate=function(){Private();}
	this.width=width;
	this.height=height;
	this.ctest=function(){l2this.test="null";}
	this.getArea=function(){return l2this.width*l2this.height;}
}


//наследование свойств созданных в конструкторе - НАФИГ
//Square.prototype = new Rectangle();

//для того что бы были видны свойства в прототипе надкласса - НАФИГ
//Square.prototype.__proto__= Rectangle.prototype;

//Класс Square - Подкласс класса Rectangle
function Square(size){
	this.superClass = Rectangle;

	//вызов этой функции обеспечивает истинный Полиморфизм :)
	//Передача параметров в надкласс //аналог super
 	this.superClass(size,size);//вызывается каждый раз при создании экземпляра
	
	this.size=size;
	ASSetPropFlags(this,"width,height",7,null);//скрытие, защита непотребных свойств
	//trace(this.width);//4, 5 //НАСЛЕДОВАНИЕ IA #1 //OK, свойства видны
}

//создание объектов с различной площадью
var sq=new Square(4); //ПОЛИМОРФИЗМ IA #1
var sq2=new Square(5);
//sq.test="0";trace(sq2.test);//test //ПОЛИМОРФИЗМ IA #2 :)

//метод изменяет свойство test экземпляра sq
//sq.ctest(); trace(sq.test);trace(sq2.test);//null test//все ОК. ПОЛИМОРФИЗМ IA #3

//sq.width=30;trace(sq.width);//4 - OK // не переопределяется //ЗАЩИТА РАБОТАЕТ
//trace(sq2.width);//5 //у экземпляра есть свойство надкласса //НАСЛЕДОВАНИЕ IA #2

//у экземпляров есть метод надкласса
//trace(sq.getArea());//16 //ПОЛИМОРФИЗМ IA #4 + НАСЛЕДОВАНИЕ IA #3
//trace(sq2.getArea());//25 //ПОЛИМОРФИЗМ IA #4 + НАСЛЕДОВАНИЕ IA #3
AS1 - истинный ООП (2 __etc). Можно говорить лишь о качестве, а не о существовании.
__________________
видеоигры - высший вид искусства


Последний раз редактировалось riden; 03.07.2008 в 01:11. Причина: исправление ошибки в слове "приват"