The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..., opennews (?), 13-Ноя-13, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


17. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от 3draven (ok), 14-Ноя-13, 06:55 
В java действительно есть проблема унаследованного и обратно совместимого мусора. Я давно хотел чего то, что было бы явой, без обратной совместимости с технологиями десятилетней давности. Те же обобщения в яве просто набор обратно совместимых костылей (сделать их элементом компиляции...и только что бы в jvm не вносить новых команд), не говоря уже о спецификациях фреймворков в инфраструктуре вокруг явы. Развитие язков вроде груви,скала и цейлона всего лишь ответ на действительно существующую проблему. Ораклу стоит подумать о том что бы очистить яву от старого хлама, сделав новую ветку или что то подобное...лично я уже поглядываю в сторону новых решений...но пока рановато.
Ответить | Правка | Наверх | Cообщить модератору

18. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +1 +/
Сообщение от 3draven (ok), 14-Ноя-13, 07:00 
Кстати, при беглом осмотре целон показался более приятным чем скала и груви. Не стали огород городить, а взяли яву и доделали как хотели....и мне нравится как именно. Но, то первый взгляд.
Ответить | Правка | Наверх | Cообщить модератору

19. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  –1 +/
Сообщение от 3draven (ok), 14-Ноя-13, 07:41 
Немного пробежав по цейлону я понял, что надо пробежать побольше...нравится, блин :) Если он сумеет со спрингом работать, то наверное присмотрюся :) Как то давно забил на java.next со свистоперделками...а тут, вполне чебе ничего. Лидер проекта вырос из JCP и начал свое делать именно из за сложностей в дальнейшем развитии java. В общем гляну поподробнее :)
Ответить | Правка | Наверх | Cообщить модератору

22. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от 3draven (ok), 14-Ноя-13, 09:27 
Хотя java 8 во многом перекроет самые вкусные возможности цейлона. В нее бы еще get set поля добавили что бы не генерить бесконечные методы доступа...и пока ничего и не надо :)
Ответить | Правка | Наверх | Cообщить модератору

27. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от Аноним (-), 14-Ноя-13, 11:10 
Не холивара ради, что мешает вместо get/set сделать полям public visibility?
Ответить | Правка | Наверх | Cообщить модератору

33. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от Аноним (-), 14-Ноя-13, 11:35 
> Не холивара ради, что мешает вместо get/set сделать полям public visibility?

get/set могут делать дополнительные проверки и кидать исключения, например.

Но вообще, get/set - очень порочная практика, по-моему, она идет наперекор идее инкапсуляции. В идеале программист, использующий класс, не должен знать о полях внутри вообще ничего.

Ответить | Правка | Наверх | Cообщить модератору

36. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +1 +/
Сообщение от Аноним (-), 14-Ноя-13, 11:47 
Хмм, мне кажется наоборот, get/set является как раз инструментом инкапсуляции. Если у тебя есть private поле, то ты скрываешь его от посторонних глаз и не обязан делать методы доступа к нему (или например сделать только get). Если есть и get и set, которые не выполняют никаких проверок, делай поле публичным. Если есть проверки, то их в любом случае писать ручками, по этому в любом случае писанина будет.
Ответить | Правка | Наверх | Cообщить модератору

37. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от Аноним (-), 14-Ноя-13, 12:01 
>Хмм, мне кажется наоборот, get/set является как раз инструментом инкапсуляции.

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

>Если есть проверки, то их в любом случае писать ручками, по этому в любом случае писанина будет.

Одно дело написать их один раз в get/set и совсем другое - каждый раз в коде.

Ответить | Правка | Наверх | Cообщить модератору

38. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  –1 +/
Сообщение от 3draven (ok), 14-Ноя-13, 12:07 
С инкапсуляцией я то же когда то размышлял. Доразмышлялся до того, что пришел к выводу, что в рамки языка надо внести некоторый новый элемент для DI спецом...то есть friend (что то похожее на С++ друзей). Что бы можно было разрешить контейнеру иметь доступ к полю, а остальным что бы поле было по прежнему private. Это не нарушает инкапсуляции и при этом дает возможность быть DI и AOP...что вообще то чистейшее ООП если подумать получше...так как выгребает из объекта все, кроме его непосредственной задачи.
Ответить | Правка | Наверх | Cообщить модератору

90. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  –1 +/
Сообщение от 3draven (ok), 14-Ноя-13, 21:14 
Кстати. В цейлоне я так понял защищенных и дефолт полей нету, они все видны внутри области видимости класса (пакет, модуль), если их открыть, либо внутри класса. Вот такие пироги.
Ответить | Правка | Наверх | Cообщить модератору

41. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +1 +/
Сообщение от piteri (ok), 14-Ноя-13, 12:39 
Методы наследуются, поля - нет.
Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

50. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от виндотролль (ok), 14-Ноя-13, 14:29 
> Методы наследуются, private поля - нет.

obvious fix

Ответить | Правка | Наверх | Cообщить модератору

52. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от piteri (ok), 14-Ноя-13, 14:43 
Прошу продемонстрировать наследование public полей
Ответить | Правка | Наверх | Cообщить модератору

88. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  –1 +/
Сообщение от виндотролль (ok), 14-Ноя-13, 20:49 
public class PublicPropertyInheritance {
    static class A {
        public String anyoneCanInheritMe = "i'm willing to share this :)";
        private String noOneCanInheritMe = "make your own property, sucker!";
    }

    static class B extends A {
    }

    public  static void main(String args) {
        A a = new A();
        System.out.println(a.anyoneCanInheritMe);
        System.out.println(a.noOneCanInheritMe);

        B b = new B();
        System.out.println(b.anyoneCanInheritMe);
        // System.out.println(b.noOneCanInhertMe); // compilation error!
    }
}

Ответить | Правка | Наверх | Cообщить модератору

96. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от piteri (ok), 14-Ноя-13, 22:34 
А где пример с наследованием полей? Этот был про области видимости.
Ответить | Правка | Наверх | Cообщить модератору

105. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от виндотролль (ok), 17-Ноя-13, 14:04 
> А где пример с наследованием полей? Этот был про области видимости.

http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.h...

Ответить | Правка | Наверх | Cообщить модератору

58. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  –2 +/
Сообщение от iZEN (ok), 14-Ноя-13, 15:10 
> Методы наследуются, поля - нет.

А нужно ли наследование? Многие высказывают мысли по поводу того, что наследование и есть основной враг инкапсуляции, что, мол, лучше использовать композицию вместо наследования там, где это действительно нужно. ;)

Ответить | Правка | К родителю #41 | Наверх | Cообщить модератору

69. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от piteri (ok), 14-Ноя-13, 17:03 
Ну я и не давал качественной оценки. Только бить тех, кто наследуется от твоих классов и норовит скрыть поля тоже не выход.
Ответить | Правка | Наверх | Cообщить модератору

98. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от Ури (?), 15-Ноя-13, 19:13 
Ну что за мода все усложнять? Написано же - private, а не uninherited - зачем же домысливать?

Они точно так же наследуются, но к ним нету доступа. Если бы они не наследовались, то вызов родительского метода (который обращается к такому полю) на объекте потомке приводил бы к мусору.

Ответить | Правка | К родителю #41 | Наверх | Cообщить модератору

100. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от piteri (ok), 15-Ноя-13, 22:23 
Так не я же усложняю. private - к наследованию перпендикулярен. Ладно, вот простой пример.
class A {
   public final String foo = "foo";
}
class B extends A {
   public String foo = "bar";
}
class A1 {
   public final String foo(){
      return "foo";
   }
}
class B1 extends A1 {
   public String foo(){//тут кстати будет ошибка
      return "bar";
   }
}
Ну и наконец
((A)new A()).foo == ((A)new B()).foo
((A)new A()).foo() != ((A)new B()).foo()

Короче если поля ведут себя так, как будто они не наследуются не вижу причин считать иначе

Ответить | Правка | Наверх | Cообщить модератору

101. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от Ури (?), 16-Ноя-13, 12:20 
Этот код не должен компилироваться и не компилируется. Ибо "overridden method is final".
Короче, нельзя перегружать финализированные методы/функции.
Ответить | Правка | Наверх | Cообщить модератору

102. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от piteri (ok), 16-Ноя-13, 22:30 
Спасибо, Кэп. Но к final полю претензий таки нет.
Ответить | Правка | Наверх | Cообщить модератору

103. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от Ури (?), 17-Ноя-13, 12:48 
А к чему тогда вообще претензии? Если они относятся не к языку, а к неким своим собственным интерпретациям языка?

Либо давай корректный пример, подтверждающий свои слова, либо иди учить язык.

Ответить | Правка | Наверх | Cообщить модератору

104. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  +/
Сообщение от виндотролль (ok), 17-Ноя-13, 14:04 
>[оверквотинг удален]
> class B1 extends A1 {
>    public String foo(){//тут кстати будет ошибка
>       return "bar";
>    }
> }
> Ну и наконец
> ((A)new A()).foo == ((A)new B()).foo
> ((A)new A()).foo() != ((A)new B()).foo()
> Короче если поля ведут себя так, как будто они не наследуются не
> вижу причин считать иначе

Ты либо глуп, либо упорот, либо жирнющий тролль.

Читай до просветления
http://docs.oracle.com/javase/specs/jls/se5.0/html/classes.h...

Ответить | Правка | К родителю #100 | Наверх | Cообщить модератору

57. "Выпуск языка программирования Ceylon 1.0.0, развиваемого Red..."  –3 +/
Сообщение от iZEN (ok), 14-Ноя-13, 15:04 
> Не холивара ради, что мешает вместо get/set сделать полям public visibility?

Искренняя и несовратимая убеждённость в том, что это плохо.

Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру