• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Hermetyzacja funkcji

0 głosów
527 wizyt
pytanie zadane 26 lutego 2017 w C i C++ przez John Doe Obywatel (1,720 p.)
edycja 26 lutego 2017 przez John Doe

Cześć!

Nie mam bladego pojęcia o wzorcach projektowych, a chciałbym zaprojektować funkcję kompresującą tekst przy pomocy kodowania huffmana (nazwijmy ją funkcją główną). Miałaby ona tylko wywoływać inne funkcje pomocnicze i zwracać żądaną wartość.

Pragnąłbym jednak, aby funkcje pomocnicze były widoczne jedynie dla funkcji głównej.

W C# można tworzyć klasy statyczne, co chyba pasowałoby w tej sytuacji. W C++ mogę stworzyć klasę z prywatnym konstruktorem domyślnym i statycznymi funkcjami pomocniczymi, a publiczną statyczną funkcję główną.

Mógłbym też po prostu ograniczyć dane funkcje pomocnicze do jednej jednostki translacji słowem kluczowym static i może coś pomącić z przestrzeniami nazw, ale wydaje mi się to niechlujne.

Jakie rozwiązanie podobnego problemu hermetyzacji funkcji byłoby najelegantsze? :)

 

2 odpowiedzi

0 głosów
odpowiedź 26 lutego 2017 przez CzikaCarry Szeryf (75,340 p.)
To tak, tworzysz klasę w której jest konstruktor, robisz drugą klasę z funkcjami pomocniczymi, ustawiasz friendship między tymi dwoma klasami, a następnie rozszerzasz pierwszą klasę o następne metody przy użyciu ":" (public ClassA : public ClassB)
komentarz 26 lutego 2017 przez John Doe Obywatel (1,720 p.)
Konstruktor? Właśnie w tym rzecz, żeby obiektów nie tworzyć* :D

Dlaczego dwie zaprzyjaźnione klasy? Jaką ma to przewagę nad pierwszym rozwiązaniem jakie zasugerowałem (statyczne metody i użycie private oraz public w klasie). Może to jakiś wzorzec projektowy?

Edit:*nie tworzyć obiektów, ponieważ tworzenie obiektu tylko po to, aby użyć jednej funkcji wydaje się mało eleganckie

Edit2: a może nie zrozumiałem w pełni Twojego pomysłu; jeżeli tak, proszę, popraw mnie :|
komentarz 26 lutego 2017 przez CzikaCarry Szeryf (75,340 p.)
Myślałem, że w klasie masz kilka metod, a chcesz aby tylko jedna mogła korzystać z pozostałych. Widocznie się myliłem :). Twój pierwszy sposób w zamyśle który mi przedstawiłeś jest OK :D
komentarz 26 lutego 2017 przez John Doe Obywatel (1,720 p.)
Mam morze funkcji, a chcę tylko jedną z nich udostępnić a resztę ukryć :)
0 głosów
odpowiedź 26 lutego 2017 przez mokrowski Mędrzec (158,960 p.)
Zastosuj anonimową przestrzeń nazw.
komentarz 26 lutego 2017 przez John Doe Obywatel (1,720 p.)
Ale czy to nie będzie miało tej samej funkcjonalności, co zwyczajne funkcje statyczne? A jeżeli tak, to czy anonimowa przestrzeń nazw jest lepsza od funkcji statycznych?

Podobne pytania

0 głosów
2 odpowiedzi 1,208 wizyt
pytanie zadane 12 lutego 2016 w C i C++ przez marekl91 Początkujący (380 p.)
+1 głos
2 odpowiedzi 1,912 wizyt
pytanie zadane 25 marca 2021 w Python przez Patryk01 Obywatel (1,270 p.)
+1 głos
1 odpowiedź 1,768 wizyt
pytanie zadane 10 marca 2019 w Rozwój zawodowy, nauka, praca przez Teslum_369 Gaduła (4,190 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...