Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Интерфейсы в javascript (https://javascript.ru/forum/misc/14657-interfejjsy-v-javascript.html)

kidar2 25.01.2011 07:26

Интерфейсы в javascript
 
Привет.
На вашем сайте читал статью про наследование и ООП. А делал ли кто-то интерфейсы на javascript ? Причём чтобы любой класс мог наследоваться от какого-то другого класса и реализовывать n-ое количество интерфейсов ?

monolithed 25.01.2011 09:29

интерфейсов и классов в JS - нет (но велосипедов реализации до кучи), но наследование есть, такое о котором вы уже прочитали.

kidar2 25.01.2011 11:55

Мне вот хотя бы один пример велосипеда с интерфейсами посмотреть...

Kolyaj 25.01.2011 11:56

Если классы ещё кому-то нужны в JS, то интерфейсы точно не нужны, поэтому и велосипедов нет.

monolithed 25.01.2011 13:14

Цитата:

Сообщение от kidar2
Мне вот хотя бы один пример велосипеда с интерфейсами посмотреть...

классы: http://habrahabr.ru/blogs/javascript/68004/
интерфейсы: http://knol.google.com/k/programming...r-i-mean-faked
http://files.trygve-lie.com/examples...ect_interface/
давно что-то еще читал по этой теме, но где припомнить не могу...

Цитата:

Сообщение от Kolyaj
Если классы ещё кому-то нужны в JS

Интерфейс — это набор объявлений методов, который позволяет несвязанным объектам взаимодействовать друг с другом, что позволяет расширяемому классу принимать реализации других классов. Что по сути можно назвать множественным наследованием.

Как бы это отрицательно сказалось если бы в JS были интерфейсы?
По моему если есть классы, то не использовать интерфейсы не логично.
В AS они есть и это же прекрасно, почему бы в JS не реализовать?

Kolyaj 25.01.2011 13:22

Цитата:

Сообщение от monolithed
Интерфейс — это набор объявлений методов, который позволяет несвязанным объектам взаимодействовать друг с другом, что позволяет расширяемому классу принимать реализации других классов.

Спасибо, капитан. Но JS позволяет объектам взаимодействовать друг с другом и без интерфейсов.

Цитата:

Сообщение от monolithed
В AS они есть и это же прекрасно, почему бы в JS не реализовать?

Приведите пример, показывающий, что "а вот если бы были интерфейсы, то я бы такое сделал...".

monolithed 25.01.2011 14:42

Цитата:

Сообщение от Kolyaj
Но JS позволяет объектам взаимодействовать друг с другом и без интерфейсов.

я к тому, что и классы в JS нет необходимости по этой логике реализовывать...

Цитата:

Сообщение от Kolyaj
Приведите пример, показывающий, что "а вот если бы были интерфейсы, то я бы такое сделал...".

нет у меня пока таких идей, т.к. обсуждать нечего, но удобства интерфейсов очевидны:

interface A { 
    function foo():void; 
}

interface B { 
    function bar():void; 
}
 
class myClass implements A, B { 
    public function foo():void {} 
    public function bar():void {} 
}

причем, интерфейс может же и выступать как отдельная сущность:
public interface A {
  function fooA():void;
}

public interface B extends A {
  function fooB():void;
}

public interface C {
  function fooC():void;
}

public interface D {
  function fooD():void;
}

public interface E extends C, D {
  function fooE():void;
}


Но JS, мы тоже самое через одно место будем делать, в замен наглядности и минимального использования кода.

Kolyaj, только не стоит думать, что меня что-то в JS не устраивает или ограничивает, просто ничего плохого в реализации интерфейсов я не вижу, может по тому, что в я к ним привык в AS и PHP...

Kolyaj 25.01.2011 14:47

Цитата:

Сообщение от monolithed
я к тому, что и классы в JS нет необходимости по этой логике реализовывать...

А никто их и не реализовывает, ибо невозможно. Реализуют только похожий синтаксис, семантика остаётся прототипная.

Цитата:

Сообщение от monolithed
interface A {
function foo():void;
}

interface B {
function bar():void;
}

class myClass implements A, B {
public function foo():void {}
public function bar():void {}
}

Чем это отличается в динамическом языке от
class myClass {
    public function foo():void {}
    public function bar():void {}
}
?

monolithed 25.01.2011 15:39

Цитата:

Сообщение от Kolyaj
Чем это отличается в динамическом языке от

в первом случае класс myClass реализует интерфейсы A и B.
Во втором случае определяется класс без конструктора, что в AS принято называть реализацией абстрактных методов (хотя их там и нет формально).

Я честно не понял вашу мысль, наверно имелось ввиду это?
interface myClass  { 
    public function foo(param:int = 0):void
}

class A implements myClass { 
    public function foo(param:int = 1):void {} 
}

Kolyaj 25.01.2011 15:42

Ответьте для себя на вопрос: "Зачем в статических языках нужны интерфейсы?". После чего можно будет ответить на другой вопрос "Почему в динамических языках интерфейсы не нужны?".


Часовой пояс GMT +3, время: 14:35.