Как правильно (идиоматически) делать приватные члены в дартс? - PullRequest
0 голосов
/ 03 июня 2019

Я только начинаю изучать язык программирования дартс.

То, на что я наткнулся, - это менее традиционный способ создания модификаторов доступа, таких как public / private (по крайней мере, по сравнению с моим опытом работы с C #, Java и C ++).

Насколько я понимаю, добавление префикса к вашим переменным-членам с символом _ сделает приватным этот файл (файл).

Так является ли обычной практикой применение одного класса к одному файлу / lib для принудительного поведения, аналогичного общему / частному уровню класса?

Приведет ли это также к тому, что все потомки класса должны быть в одном классе.

Если это не обычная практика, как именно вы выполняете ООП в дротике? Как реализовать концепции ООП, такие как инкапсуляция и компоновка в dart?

Ответы [ 2 ]

2 голосов
/ 03 июня 2019

В Dart нет «частного класса», только «частная библиотека».

Базовый дизайн основан на идее, что одна библиотека - это одна сущность, созданная и отредактированная теми же людьми сте же цели.Вам не нужно защищаться от соавторов.В конце концов, если вы попытаетесь что-то скрыть от соавтора, они могут просто поменять ваш класс, чтобы в любом случае сделать его публичным.Итак, полная библиотека - это гранулярность управления доступом.

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

Библиотека - это также гранулярность осуществление .Библиотека предоставляет свои открытые интерфейсы, но детали реализации (библиотеки) являются частными, поэтому изменение деталей реализации не должно нарушать другие библиотеки.Это делает безопасным изменение реализации;до тех пор, пока вы меняете только личные вещи, вы гарантируете, что ни одна другая библиотека не сломается.

То есть частные члены могут рассматриваться как подробности реализации .Если вам нужен доступ к реализации другого класса, а не только к его общедоступному интерфейсу, то вы глубоко зависимы от этой реализации, и код заслуживает того, чтобы находиться в той же библиотеке.

Библиотеки с небольшим количеством связанных и взаимозависимых классов, а иногда и с одним классом, - это путь, которым люди обычно занимаются.Если затем вы хотите, чтобы ваша библиотека пакетов предоставляла множество классов, вы можете экспортировать эти отдельные библиотеки.

Что касается потомков класса: у Dart нет protected ограничения доступа, так что еслиподклассу нужен доступ к чему-либо, он должен быть либо общедоступным, либо находиться в том же файле.Есть хитрые обходные пути, но обычно проще пойти на один из этих двух.Опять же, если другому классу нужен доступ к чему-то, что не является общедоступным, то это связано с реализацией и должно быть близко к этой реализации.

Инкапсуляцияозначает предотвращение доступа к деталям реализации.Вы делаете это на уровне библиотеки.Внутри библиотеки вы несете ответственность за то, чтобы делать только то, что намереваетесь делать.Композиция работает как на любом другом языке ОО.

0 голосов
/ 03 июня 2019

Из документации Dart:

Unlike Java, Dart doesn’t have the keywords public, protected, and private. 
If an identifier starts with an underscore _, it’s private to its library.

Библиотеки не только предоставляют API-интерфейсы, но и являются единицей конфиденциальности: идентификаторы, начинающиеся с подчеркивания _, видны только внутри библиотеки.

Это ответ может вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...