Po co interfejs w konkretnym przykładzie...

Odpowiedz Nowy wątek
2017-03-10 09:35

Rejestracja: 7 lat temu

Ostatnio: 2 dni temu

0

Poproszę kolegów o wyjaśnienie na konkretnym przykładzie. Myślę ze wielu z Was korzystało lub ma w zasobach edytor SynEdit. A jak nie macie to jest na Githubie: (Przykład na github.com) Tam w katalogu demos jest przykład edytora. Taki przykład chcę zaimplementować z edytorem Scintilla z możliwością otwierania w wielu zakładkach komponentu TPageControl. Nie moge znależć dobrze działającego edytora z dobra obsługa unikodu dlatego chcę zaimplementować dobrze działającą i rozwijana Scintillę . Choć już zęby zjadłem nigdy nie zagłębiałem się w interfejsy Delphi (traktując je jako dziwne stwory bez ciała :)). W tym demo jest użyta forma z edytorem (frmEditor) i skojarzony z nim interfejs(uEditAppIntfs) Czy ktoś mógłby mi wytłumaczyć w jakim konkretnie celu i jakie korzyści z tego wynikają i czy jest konieczne że, w tym przypadku użyto interfejsu. Jeżeli w tym przykładzie chodzi wyłącznie o to aby nowe metody można będzie w przyszłości nadpisywać np w pliku Main (który używa interfejsu) bez zagłębiania się w klasy bazowe to potwierdźcie tylko lub zaprzeczcie, proszę.

ps: Szukałem w poprzednich wątkach dotyczących interfejsów ale konkretnej odpowiedzi nie znalazłem. Mówi się że emeryt ma dużo czasu ale zapewniam że to nie jest prawda, emeryt goni aby zdążyć :).

edytowany 3x, ostatnio: furious programming, 2017-03-10 09:59

Pozostało 580 znaków

2017-03-10 13:47

Rejestracja: 16 lat temu

Ostatnio: 3 dni temu

0
andrzej.kmicic napisał(a):

Poproszę kolegów o wyjaśnienie na konkretnym przykładzie. Myślę ze wielu z Was korzystało lub ma w zasobach edytor SynEdit. A jak nie macie to jest na Githubie: (Przykład na github.com) Tam w katalogu demos jest przykład edytora. Taki przykład chcę zaimplementować z edytorem Scintilla z możliwością otwierania w wielu zakładkach komponentu TPageControl. Nie moge znależć dobrze działającego edytora z dobra obsługa unikodu dlatego chcę zaimplementować dobrze działającą i rozwijana Scintillę .

Można i tak, ale... SynEdit działa z Unicode.
Kiedyś było coś takiego jak UniSynEdit.
A poza tym jest jeszcze:
https://github.com/bonecode/BCEditor

Choć już zęby zjadłem nigdy nie zagłębiałem się w interfejsy Delphi (traktując je jako dziwne stwory bez ciała :)). W tym demo jest użyta forma z edytorem (frmEditor) i skojarzony z nim interfejs(uEditAppIntfs) Czy ktoś mógłby mi wytłumaczyć w jakim konkretnie celu i jakie korzyści z tego wynikają i czy jest konieczne że, w tym przypadku użyto interfejsu. Jeżeli w tym przykładzie chodzi wyłącznie o to aby nowe metody można będzie w przyszłości nadpisywać np w pliku Main (który używa interfejsu) bez zagłębiania się w klasy bazowe to potwierdźcie tylko lub zaprzeczcie, proszę.

I tak i nie.

Chodzi o to,że edytor jest osadzony na oknie, które pewnie jest dokowane na PageControl.
Natomiast jest główny toolbar dla całej aplikacji, który współpracuje z każdym aktywnym oknem.
A współpraca polega na tym, że po kliknięciu w coś (button, akcja, whatever) trzeba wykonać komendę edytora (save, load, word-delete, etc.)
A więc trzeba mieć dostęp do edytora.

Oczywiście można go upublicznić i przywiązać kod tylko do jednego typu edytora (np. SynEdit), ale można zaimplementować interfejs do komunikacji z edytorem i zaimplementować jego obsługę do SynEdita, BCEditora, Scintili, TMemo czy cokolwiek innego...
I dlatego interfejs, który daje nam spójną fasadę do dowolnego typu edytora.

ps: Szukałem w poprzednich wątkach dotyczących interfejsów ale konkretnej odpowiedzi nie znalazłem. Mówi się że emeryt ma dużo czasu ale zapewniam że to nie jest prawda, emeryt goni aby zdążyć :).
Nie znalazłeś odpowiedzi, bo nie rozumiesz do czego one tak naprawdę są...

Jestem kontent za wyjaśnienia. Pozostaje maleńka wątpliwość. Aby np przesiąść sie na scintillę musiałem przerabiać klasę bazową (nadpisałem ją) w częsci wykonawczej właśnie tej komunikującej się z konkretnym edytorem(new,undo,redo,cut,copy,paste itd), interfejsy pozostały te same czyli to chodzi właśnie o łatwe nadpisywanie ? . Nie ma jak polegać na starej znajomości :) jak pamiętam jeszcze z grupy usenetu, dziękuję i przy okazji serdecznie pozdrawiam. - andrzej.kmicic 2017-03-11 06:48
Tak, musiałeś zaimplementować interfejs komunikacyjny edytora w nowej klasie, która potrafi współpracować z innym edytorem - tu Scintilla. SAmo sie niestety nie zrobi (chociaż w mORMocie intfy po stronie klienta dla usług implementują się same ;-)) Przy okazji doczytaj sobie o implementacji intf przez delegację (słowo kluczowe: implements) - wloochacz 2017-03-11 08:49

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0