Показать сообщение отдельно
Старый 01.07.2008, 13:47
Яски вне форума Посмотреть профиль Отправить личное сообщение для Яски Найти все сообщения от Яски
  № 403  
Ответить с цитированием
Яски

блогер
Регистрация: May 2008
Адрес: (0, 10, 185) в локальной системе
Сообщений: 721
Записей в блоге: 6
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
Яски, а где в ООП написано, что должны быть inline методы? Вы кажется путаете тёплое с мягким
А кто вдруг решил, что в ООП обязательно должен быть this, что должны быть классы, множественное наследование. Например, в Си++ есть перегрузка операторов, но это дополнительная возможность, которой нет в истинном определении ООП.

Цитата:
Сообщение от __etc Посмотреть сообщение
А посему, AS1 — псевдо-ООП язык, не является истинно объектно-ориентированным, как и JavaScript.
Может на эту тему тоже поспорим?

Цитата:
Сообщение от __etc Посмотреть сообщение
Кстати, наследование реализуется не так, как вы написали, ... Для наследования у вас есть скрытые костыли языка в виде __proto__ и __constructor__.
Спасибо, я и не знал.

Цитата:
Сообщение от __etc Посмотреть сообщение
Яски, я прошу написать не по отдельности все принципы ООП, а все вместе, пример на AS3 я привел. Истинно объектно-ориентированным языком можно назвать тот язык, который позволяет на уровне языка реализовать три принципа ООП сразу вместе на парочке классов, а не по отдельности, причем, реализованных средствами самого языка, а не руками, как тут уже всю тему пытаются сделать.
Да, пожалуйста:

Код:
function IMyClass(){
	this.getRotation = function(){
		return 'abstract method'
	};
};

function MyClass() {
	this.__proto__ = IMyClass;
	
	this.angle = 0;
	
	var calculateValue = function () {
		this.angle = 2*Math.PI*Math.random();
	};
	this.getRotation = function() {
		calculateValue.call(this);
		return this.angle/Math.PI*180;
	};
};

function AnotherMyClass() {
	this.__proto__ = MyClass;

	this.getRotation = function() {
		var	rotation = this.__proto__.getRotation();
		return rotation/2;
	};
	this.getRadians = function() {
		return this.angle/2;
	}
};

var iMyClass = new IMyClass();
var myClass = new myClass();
var aMyClass = new AnotherMyClass();

trace(iMyClass.calculateValue()) // "undefined"
trace(iMyClass.getRadians()) // "undefined"
trace(iMyClass.getRotation()) // "abstract method"
trace(iMyClass.angle) // "undefined"

trace(myClass.calculateValue()) // "undefined"
trace(myClass.getRadians()) // "undefined"
trace(myClass.getRotation()) // "152.942357249558"
trace(myClass.angle) // "2.66934769976621"

trace(aMyClass.calculateValue()) // "undefined"
trace(aMyClass.getRadians()) // "1.3346738498831"
trace(aMyClass.getRotation()) // "102.746495101601"
trace(aMyClass.angle) // "3.58652926881432"
Даже немного компактнее получилось.

Как я уже говорил АС1 и JavaScript являются прототипными ООП. Что свойственно для языков программирования без жесткой типизации, в которых нельзя ввести определение класса. Если ,etcs, хочет называть все прототипные языки программирования "неистенными" это его право, но только вместе с приставкой ООП.


Последний раз редактировалось Яски; 01.07.2008 в 13:59.