-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.task.gda.pl!not-for-mail
From: zażółcony <r...@c...pl>
Newsgroups: pl.comp.programming
Subject: Jaki wzorzec projektowy: pilnowanie cyklu życia innego obiektu ?
Date: Fri, 16 Mar 2012 10:39:17 +0100
Organization: CI TASK http://www.task.gda.pl/
Lines: 59
Message-ID: <jjv1o4$brh$1@news.task.gda.pl>
NNTP-Posting-Host: efp194.internetdsl.tpnet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.task.gda.pl 1331890756 12145 83.14.249.194 (16 Mar 2012 09:39:16 GMT)
X-Complaints-To: a...@n...task.gda.pl
NNTP-Posting-Date: Fri, 16 Mar 2012 09:39:16 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20120216
Thunderbird/10.0.2
Xref: news-archive.icm.edu.pl pl.comp.programming:196103
[ ukryj nagłówki ]Najbardziej mi tu pasuje Proxy, ale Proxy jest zbyt ogólny.
Może macie inny pomysł.
Sytuacja jest taka: mamy język programowania,
w którym destruktory są wywoływane w ściśle określonych
momentach, tzn. mamy np. C++ bez garbage collectora
lub np. FoxPro.
Wykorzystujemy destruktory obiektów do tego, by
obiekty sprzątały po sobie. Np. mamy obiekt File, który
w destruktorze robi closa na deskryptorze otwartego pliku.
Albo mamy obiekt Transakcja, który w destruktorze stara
się zrobić commit'a. Albo mamy obiekt BlokadaZasobu czy
Mutex, który w destruktorze zwalnia zablokowany
zasób/podnosi opuszczony wcześniej semafor.
Wykorzystujemy tu destruktory po to, by zminimalizować
potrzebę pamiętania o sprzątaniu po obiektach, u których
czas życia nie budzi wątpliwości (bo są np. tworzone
lokalnie w procedurze, czy nawet zagłębionej sekcji jakiejś
procedury(funkcji,metody), a referencja nie jest nigdzie
przekazywana. Da się na tym budować bardzo ładny, elegancki kod,
który w przypadku języków z garbage collectorem trzeba najczęściej
dodatkowo obudowywać klauzulami try {}finally {...}, żeby sprzątać
jawnie. Tu tego nie mamy, a przynajmniej mamy znacznie mniej.
A teraz idźmy dalej: teraz chcę wszystkie w.w. obiekty plików czy
blokad zasobów gromadzić w jakiejś kolekcji utrzymywanej i zarządzanej
przez jakiś singleton (np. Manager Blokad, Manager Transakcji ...),
np. po to, żeby móc je sobie wszystkie wyświetlić.
Czyli łamię zasadę nie przekazywania/nie trzymania referencji
obiektów na zewnątrz. Złamanie tej zasady wprost prowadzi
do tego, że przestaje działać sprzątanie/zamykanie (ze względu
na wiszące referencje).
Nie mamy do dyspozycji czegoś takiego, jak weak reference, więc żeby
temu zaradzić działamy wg. wzorca takiego:
Lokalnie tworzymy obiekt proxy, który trzyma referencję
na obiekt właściwy i proxy w swoim destruktorze pilnuje,
by obiekt, którym się obiekuje "wypisać z systemu"/posprzątać
po nim/zlikwidować wszystkie referencje.
Pasowało mi określenie 'strażnik', ale Guard Pattern to raczej do
walidacji się nadaje, więc nie pasuje.
Teoretycznie każdy z obiektów typu Plik czy Semafor mógłby sam siebie
zapisywać i wypisywać z globalnych list - ale uważam, ze czystsze jest
rozwiązanie, kiedy tego typu obiekty nie maja za bardzo pojęcia
kto i dlaczego się nimi interesuje, zajmują się swoimi technicznymi
zadaniami i niczym więcej.
Cały obowiązek pilnowania powiązań składam więc bardziej na factory
tych obiektów, które to będą bardziej świadome, co jest w systemie
i gdzie obiekty są zapisywane. No właśnie - z kreacją nie ma
problemu - jest wzorzec factory. A brakuje mi tu jakiegoś wzorca
typu 'Garbage', 'Złomuj' :)))
Jakiegoś urzędnika, który uczestniczył w narodzinach, zapisał to
w swoich papierach i jest bardzo zainteresowany, by zarejestrować
również śmierć. Bez tego papiery mu się nie będą zgadzać :)
Następne wpisy z tego wątku
- 16.03.12 10:04 Bronek Kozicki
- 16.03.12 10:06 zażółcony
- 16.03.12 11:06 Andrzej Jarzabek
- 16.03.12 12:28 zażółcony
- 17.03.12 12:17 Andrzej Jarzabek
- 21.03.12 08:13 zażółcony
- 21.03.12 14:22 Andrzej Jarzabek
- 21.03.12 14:42 Andrzej Jarzabek
- 21.03.12 14:46 zażółcony
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-02 Akumulatorki Ni-MH AA i AAA Green Cell
- 2024-12-02 Usiłowanie zabójstwa
- 2024-12-01 Rambo 2024. Co z radio-stopem
- 2024-12-01 Pijani kierowcy
- 2024-12-01 "Chciałem zamówić kurs tym"
- 2024-11-30 Windykatorzy ścigają spadkobierców z mandat nieboszczyka za przekroczenie prędkości???
- 2024-11-30 Łódź => Technical Artist <=
- 2024-11-30 Lublin => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-11-30 Warszawa => Microsoft Dynamics 365 Business Central Developer <=
- 2024-11-30 Bieruń => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-30 Zielona Góra => Senior PHP Symfony Developer <=
- 2024-11-30 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-30 Lublin => Spedytor międzynarodowy <=
- 2024-11-30 Warszawa => Mid IT Recruiter <=
- 2024-11-30 Warszawa => Fullstack Developer <=