Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 144 145 [146] 147 148 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#2176
,
|
|
|
|
Цитата DesweR @ Цитата D_KEY @ Не было такого. Извини, но у тебя есть проблемы с понимаеним того, что происходит в теме. Разговор был в очередной раз замят. Причем вашей стороной. Извини, но вы в очередной раз увиливаете ![]() От чего? Все подробно вам объясняем. Ждем от вас того же, не всегда дожидаемся. Shaggy вот большое спасибо, за некоторые разъяснения. Цитата Почитай "Сущность технологии СОМ" (Дональд Бокс), там подробно рассматриваются данные аспекты и мотивы их решений. Какое отношение имеет эта отдельно взятая технология к языковым механизмам? Добавлено Цитата DesweR @ Почитай "Сущность технологии СОМ" (Дональд Бокс), там подробно рассматриваются данные аспекты и мотивы их решений. Можно поконкретнее(раздел,глава), то что непосредственно относится к нашему обсуждению. |
|
Сообщ.
#2177
,
|
|
|
|
Цитата MyNameIsIgor @ Необходимо ли указывать, как каким методам внутреннего объекта будет иметь доступ внешний код? в идеале -- это чтоб можно было сказать либо "весь-интерфейс", либо список методов Добавлено Цитата Мяут-Настоящий @ А кто определяет, к каким методам x обратиться можно, а к каким нельзя? И потом, если C должен иметь подможество интерфейса x, не проще ли унаследоваться от x и не заморачиваться? C и определяет. Естественно он может выбирать только из публичных. ещё раз: как ты предлагаешь наследоваться от Int, в случае когда в C необходимо иметь несколько объектов класса Int? Добавлено хотя возможно лучше без выбора: либо все публичные, либо никаких. Частичное сокрытие интерфейса внутреннего объекта может нарушить логику его поведения |
|
Сообщ.
#2178
,
|
|
|
|
Цитата D_KEY @ От чего? Все подробно вам объясняем. Ждем от вас того же, не всегда дожидаемся. Ну ну, лукавить только не надо korvin Так что ли? ![]() ![]() IInt = interface function GetX: Integer; procedure SetX(const AX: Integer); property X: Integer read GetX write SetX; end; TInt = class(TInterfacedObject, IInt) strict private FX: Integer; function GetX: Integer; procedure SetX(const AX: Integer); end; ... var Int: IInt; begin Int := TInt.Create; Int.X ... end; Цитата D_KEY @ Какое отношение имеет эта отдельно взятая технология к языковым механизмам? Это не просто технология - это стиль компонентно‑ориентированного программирования. Цитата D_KEY @ Можно поконкретнее(раздел,глава), то что непосредственно относится к нашему обсуждению. Во первых: я уже точно не помню, там ещё манера изложения материала - по спирали, т.е. как минимум нужно по диагонали пробежаться; Во вторых: мне некогда и лень сейчас искать/качать книгу; В третьих: если действительно интересно - найдешь без труда, содержание там есть. Ну и в четвёртых: о С++ там тоже идёт речь Добавлено Цитата korvin @ хотя возможно лучше без выбора: либо все публичные, либо никаких. Кажется понял, ты хочешь чтобы "автоматом" получались все методы? |
|
Сообщ.
#2179
,
|
|
|
|
Цитата DesweR @ "Пойди туда, сам знаешь куда, принести то, сам знаешь что" Во первых: я уже точно не помню, там ещё манера изложения материала - по спирали, т.е. как минимум нужно по диагонали пробежаться; Во вторых: мне некогда и лень сейчас искать/качать книгу; В третьих: если действительно интересно - найдешь без труда, содержание там есть. |
|
Сообщ.
#2180
,
|
|
|
|
Цитата DesweR @ Цитата D_KEY @ Какое отношение имеет эта отдельно взятая технология к языковым механизмам? Это не просто технология - это стиль компонентно‑ориентированного программирования. http://en.wikipedia.org/wiki/Component_Object_Model Цитата В основном сомнительной достоверности Ну и в четвёртых: о С++ там тоже идёт речь |
|
Сообщ.
#2181
,
|
|
|
|
Цитата DesweR @ Кажется понял, ты хочешь чтобы "автоматом" получались все методы? по-моему это не то, что я хочу |
|
Сообщ.
#2182
,
|
|
|
|
?
![]() ![]() IInt = interface function GetX: Integer; procedure SetX(const AX: Integer); end; TInt = class(TInterfacedObject, IInt) strict private FX: Integer; strict protected function GetX: Integer; procedure SetX(const AX: Integer); end; TC = class strict private FInts: TList<IInt>; //всё в списке, для удобства function GetInt(const AIndex: Integer): IInt; public constructor Create(const AIntsCount: Integer); destructor Destroy; override; property Ints[const Index: Integer]: IInt read GetInt; //получаем интерфейс, а не сам объект end; function TInt.GetX: Integer; begin Result := FX; end; procedure TInt.SetX(const AX: Integer); begin FX := AX; end; constructor TC.Create(const AIntsCount: Integer); var i: Integer; begin FInts := TList<IInt>.Create; FInts.Capacity := AIntsCount; for i := 0 to AIntsCount - 1 do FInts.Add(TInt.Create); end; destructor TC.Destroy; begin FreeAndNil(FInts); end; function TC.GetInt(const AIndex: Integer): IInt; begin Result := FInts[AIndex]; end; ... var C: TC; begin C := TC.Create(3); C.Ints[0].SetX(111); C.Ints[1].SetX(222); C.Ints[2].SetX(333); Writeln(C.Ints[0].GetX); Writeln(C.Ints[1].GetX); Writeln(C.Ints[2].GetX); C.Free; end; |
|
Сообщ.
#2183
,
|
|
|
|
зачем ты усложняешь?
|
|
Сообщ.
#2184
,
|
|
|
|
Цитата korvin @ зачем ты усложняешь? Ну а как? Добавлено ![]() ![]() TC = class strict private FInts1: IInt; FInts2: IInt; FInts3: IInt; public constructor Create; property Int1: IInt read FInts1; property Int2: IInt read FInts2; property Int3: IInt read FInts3; end; |
|
Сообщ.
#2185
,
|
|
|
|
вот пример, как это могло бы быть на Java (интерфейс Show здесь не важен, просто для App.println):
![]() ![]() package example; interface Show { public String show (); } class Point implements Show { private int x = 1; private int y = 2; public int getX () { return x; } public int getY () { return y; } public void setX (int x) { this.x = x; } public void setY (int y) { this.y = y; } public String show () { return String.format( "(%d, %d)", x, y ); } } class Line implements Show { /*спецификатор*/ Point A = new Point(); /*спецификатор*/ Point B = new Point(); public String show () { return String.format( "[%s - %s]", A.show(), B.show() ); } } public class App { static void println (Show s) { System.out.println( s.show() ); } public static void main (String[] args) { Line L = new Line(); L.A.setX(8); // OK L.A.setY(9); // OK println(L); println(L.A); // ошибка компиляции } } Добавлено Цитата DesweR @ Цитата korvin @ зачем ты усложняешь? Ну а как? Добавлено ![]() ![]() TC = class strict private FInts1: IInt; FInts2: IInt; FInts3: IInt; public constructor Create; property Int1: IInt read FInts1; property Int2: IInt read FInts2; property Int3: IInt read FInts3; end; а что будет, если ![]() ![]() var A : TC; B : IInt; ... B := A.Int1; ? |
|
Сообщ.
#2186
,
|
|
|
|
korvin, еще раз, в чем разница между предоставлением доступа к методам get/set и доступом "к самому объекту", если ты с объектом все-равно ничего сделать не сможешь, кроме get и set?
|
|
Сообщ.
#2187
,
|
|
|
|
Цитата korvin @ а что будет, если Ну разве что объявить интерфейс и реализующий его класс внутри класса С. ![]() ![]() TC = class strict private type IInt = interface function GetX: Integer; procedure SetX(const AX: Integer); end; TInt = class(TInterfacedObject, IInt) strict private FX: Integer; strict protected function GetX: Integer; procedure SetX(const AX: Integer); end; strict private FInts: TList<IInt>; function GetInt(const AIndex: Integer): IInt; public constructor Create(const AIntsCount: Integer); destructor Destroy; override; property Ints[const Index: Integer]: IInt read GetInt; end; ![]() ![]() var C: TC; B: IInt;//ошибка, необъявленный идентификатор B: TC.IInt;//Cannot access private symbol TC.IInt begin C := TC.Create(3); B := C.Ints[0]; Добавлено Собственно тогда и интерфейс не нужен... |
|
Сообщ.
#2188
,
|
|
|
|
Цитата D_KEY @ korvin, еще раз, в чем разница между предоставлением доступа к методам get/set и доступом "к самому объекту", если ты с объектом все-равно ничего сделать не сможешь, кроме get и set? get/set -- это условно, мне лень было придумывать кучу методов. разница в невозможности изменить часть объекта независимо от объекта, т.е. взять "адрес" на внутренний объект, передать куда-то и где-то там менять. |
|
Сообщ.
#2189
,
|
|
|
|
korvin, как я понимаю нужно что-то вроде:
![]() ![]() class button { public: boost::function<void()> onClick; }; class player { public: void play(); void stop(); }; button playButton, stopButton; player thePlayer; void connect() { playButton.onClick = boost::bind(&player::play, &thePlayer); stopButton.onClick = boost::bind(&player::stop, &thePlayer); } (пример кстати взят из документации по boost) Для класса button в данном случае сокрыты не нужные методы player. |
|
Сообщ.
#2190
,
|
|
|
|
Ну или так.
![]() ![]() TInt = class strict private FX: Integer; public function GetX: Integer; procedure SetX(const AX: Integer); end; TC = class strict private type TTCInt = class(TInt) end; strict private FInts: TList<TTCInt>; function GetInt(const AIndex: Integer): TTCInt; public constructor Create(const AIntsCount: Integer); destructor Destroy; override; property Ints[const Index: Integer]: TTCInt read GetInt; end; ![]() ![]() var C: TC; //B: TTCInt; так не сработает B: TInt; //а так можно обойти, если догадаешься begin C := TC.Create(3); B := C.Ints[0]; Добавлено Цитата Мяут-Настоящий @ korvin, как я понимаю нужно что-то вроде: Ты вручную делегируешь методы, а Корвину это не нравится |