Привет, forum!
Я недавно стал изучать язык D и у меня возникло несколько вопросов?
1. Как можно скрыть реализацию класса? Т.е. допустим есть класс, который что то делает. я создаю из него библиотеку (lib), как сделать так что бы я мог отдать эту либ и её можно было юзать но, была скрыта реализация класса?
(В си к примеру мы даём заголовки где лежат описание класса и либу, а сами реализация скрыта)
2. Кто может обьяснить (чайнику), что такое mixin и для чего они нужны?
Здравствуйте, Losar, Вы писали:
L>Привет, forum! L>Я недавно стал изучать язык D и у меня возникло несколько вопросов?
L>1. Как можно скрыть реализацию класса? Т.е. допустим есть класс, который что то делает. я создаю из него библиотеку (lib), как сделать так что бы я мог отдать эту либ и её можно было юзать но, была скрыта реализация класса? L>(В си к примеру мы даём заголовки где лежат описание класса и либу, а сами реализация скрыта)
Напиши так:
//myheader.d class A {
void foo();
}
//myimpl.d class A {
void foo() { .... }
}
И отдавай myheader.d
L>2. Кто может обьяснить (чайнику), что такое mixin и для чего они нужны?
Здравствуйте, Losar, Вы писали:
L>И ещё. L>Есть ли у класса права доступа к методам и членом класса???? Если да то как использовать?
Как обычно.
Читай доку (она конечно не супер но все есть — её просто нужно прочитать всю):
Protection Attribute
Protection is an attribute that is one of private, package, protected, public or export.
Private means that only members of the enclosing class can access the member, or members and functions in the same module as the enclosing class. Private members cannot be overridden. Private module members are equivalent to static declarations in C programs.
Package extends private so that package members can be accessed from code in other modules that are in the same package. This applies to the innermost package only, if a module is in nested packages.
Protected means that only members of the enclosing class or any classes derived from that class, or members and functions in the same module as the enclosing class, can access the member. Protected module members are illegal.
Public means that any code within the executable can access the member.
Export means that any code outside the executable can access the member. Export is analogous to exporting definitions from a DLL.
Здравствуйте, c-smile, Вы писали: CS>Как обычно. CS>Читай доку (она конечно не супер но все есть — её просто нужно прочитать всю): CS>
CS>Protection Attribute
CS>Protection is an attribute that is one of private, package, protected, public or export.
CS>Private means that only members of the enclosing class can access the member, or members and functions in the same module as the enclosing class. Private members cannot be overridden. Private module members are equivalent to static declarations in C programs.
CS>Package extends private so that package members can be accessed from code in other modules that are in the same package. This applies to the innermost package only, if a module is in nested packages.
CS>Protected means that only members of the enclosing class or any classes derived from that class, or members and functions in the same module as the enclosing class, can access the member. Protected module members are illegal.
CS>Public means that any code within the executable can access the member.
CS>Export means that any code outside the executable can access the member. Export is analogous to exporting definitions from a DLL.
Здравствуйте, Losar, Вы писали:
L>Здравствуйте, c-smile, Вы писали: CS>>Как обычно. CS>>Читай доку (она конечно не супер но все есть — её просто нужно прочитать всю): L>Хммм, почему не работает? L>Писал код L>class A L>{ L>private int i = 0; L>}
L>int main() L>{ L>A a = new A; L>printf("%d\n", a.i); L>return 0; L>}
L>всё компилится и рабоатет, не ругается на то что i = private. L>почему? что неправильно?
Читайте внимательней:
Private means that only members of the enclosing class can access the member, or members and functions in the same module as the enclosing class.
Вынеси main в другой модуль — и работать перестанет...
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, Losar, Вы писали:
L>>Привет, forum! L>>Я недавно стал изучать язык D и у меня возникло несколько вопросов?
L>>1. Как можно скрыть реализацию класса? Т.е. допустим есть класс, который что то делает. я создаю из него библиотеку (lib), как сделать так что бы я мог отдать эту либ и её можно было юзать но, была скрыта реализация класса? L>>(В си к примеру мы даём заголовки где лежат описание класса и либу, а сами реализация скрыта)
CS>Напиши так:
Здравствуйте, Dusty, Вы писали:
D>Здравствуйте, Losar, Вы писали:
L>>Здравствуйте, c-smile, Вы писали: CS>>>Как обычно. CS>>>Читай доку (она конечно не супер но все есть — её просто нужно прочитать всю): L>>Хммм, почему не работает? L>>Писал код L>>class A L>>{ L>>private int i = 0; L>>}
L>>int main() L>>{ L>>A a = new A; L>>printf("%d\n", a.i); L>>return 0; L>>}
L>>всё компилится и рабоатет, не ругается на то что i = private. L>>почему? что неправильно? D>Читайте внимательней: D>
Private means that only members of the enclosing class can access the member, or members and functions in the same module as the enclosing class.
D>Вынеси main в другой модуль — и работать перестанет...
Хммм, как то глупо =).
Может кто знает есть ли студия или какой плагин для разработки программ на D?
Здравствуйте, Losar, Вы писали:
L>Здравствуйте, Dusty, Вы писали:
D>>Здравствуйте, Losar, Вы писали:
L>>>Здравствуйте, c-smile, Вы писали: CS>>>>Как обычно. CS>>>>Читай доку (она конечно не супер но все есть — её просто нужно прочитать всю): L>>>Хммм, почему не работает? L>>>Писал код L>>>class A L>>>{ L>>>private int i = 0; L>>>}
L>>>int main() L>>>{ L>>>A a = new A; L>>>printf("%d\n", a.i); L>>>return 0; L>>>}
L>>>всё компилится и рабоатет, не ругается на то что i = private. L>>>почему? что неправильно? D>>Читайте внимательней: D>>
Private means that only members of the enclosing class can access the member, or members and functions in the same module as the enclosing class.
D>>Вынеси main в другой модуль — и работать перестанет...
L>Хммм, как то глупо =).
Почему?
private for module. имхо это удобнее чем
лепить friends в C++ по поводу и без повода.
L>Может кто знает есть ли студия или какой плагин для разработки программ на D?
Здравствуйте, c-smile, Вы писали:
D>>>Вынеси main в другой модуль — и работать перестанет... L>>Хммм, как то глупо =). CS>Почему?
По тому что глупо. private должен быть private. CS>private for module. имхо это удобнее чем лепить friends в C++ по поводу и без повода.
В C# поступили гораздо умнее. Там ввели модификатор internal доткрытый доступ внутри сборки.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, c-smile, Вы писали:
D>>>>Вынеси main в другой модуль — и работать перестанет... L>>>Хммм, как то глупо =). CS>>Почему? WH>По тому что глупо. private должен быть private.
Для кого он должен быть private? Для меня — того человека что
пишет этот модуль? А смысл?
CS>>private for module. имхо это удобнее чем лепить friends в C++ по поводу и без повода. WH>В C# поступили гораздо умнее. Там ввели модификатор internal доткрытый доступ внутри сборки.
Здравствуйте, c-smile, Вы писали:
CS>Для кого он должен быть private?
Для всех кроме того класса в котором он объявлен. На то он и private чтобы никто своими руками в реализацию не лез. CS>Для меня — того человека что пишет этот модуль?
Модуль может быть большим. Напиример в одной из сборок того проекта который я сейчас пишу пол метра исходников в 104х файлах.
И пишут его два человека. CS>А смысл?
Может тогда вобще убрать модификаторы доступа? В чем смысл то?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Andrei N.Sobchuck, Вы писали:
CS>>>А смысл? WH>>Может тогда вобще убрать модификаторы доступа? В чем смысл то? ANS>Присоединяюсь к вопросу: в чем их смысл то?
Смысл чего? Модификаторов доступа?
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
CS>>>>А смысл? WH>>>Может тогда вобще убрать модификаторы доступа? В чем смысл то? ANS>>Присоединяюсь к вопросу: в чем их смысл то? WH>Смысл чего? Модификаторов доступа?
Здравствуйте, Dusty, Вы писали:
D>Здравствуйте, c-smile, Вы писали:
CS>>Здравствуйте, Losar, Вы писали:
L>>>Привет, forum! L>>>Я недавно стал изучать язык D и у меня возникло несколько вопросов?
L>>>1. Как можно скрыть реализацию класса? Т.е. допустим есть класс, который что то делает. я создаю из него библиотеку (lib), как сделать так что бы я мог отдать эту либ и её можно было юзать но, была скрыта реализация класса? L>>>(В си к примеру мы даём заголовки где лежат описание класса и либу, а сами реализация скрыта)
CS>>Напиши так:
далее есть main.d
/*********************************** main.d **************************************/
import std.stdio;
import lib;
int main()
{
A a = new A();
return 0;
}
/********************************************************************************/
собираю
dmd -O -release -L mylib.lib main.d
он начинает ругатся что типа незнает A;
но если я заменю import lib на import lib_r
все собирается и работает?
Здравствуйте, Andrei N.Sobchuck, Вы писали:
WH>>В контроле инкапсуляции компилятором. ANS>Так инкапсуляция либо есть либо нет. А атрибутов много. ANS>Значит в чем то другом дело.
Дело в уровнях инкапсуляции.
public — Публичный интерфейс класса.
protected — Интерфейс класса доступный потомкам.
internal — Интерфейс класса доступный внутри сборки.
private — Детали реализации класса.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн