Skip to content

Instantly share code, notes, and snippets.

@pjastr
Last active October 17, 2017 21:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pjastr/7ff9706caaa737515b6420973c1b0d6d to your computer and use it in GitHub Desktop.
Save pjastr/7ff9706caaa737515b6420973c1b0d6d to your computer and use it in GitHub Desktop.

Hermetyzacja:

  • Zapewnia utrzymanie właściwego stanu klasy. Pola klasy są inicjowane, modyfikowane i odczywywane w sposób przewidziany przez autora klasy.
  • Ukrycie wewnętrznego stanu klasy, a udostępnienie tylko tego co jest niezbędne do komunikacji z innymi klasami
  • Użycie odpowiednich modyfikatorów dostępu do pól i metod,
  • Innymi słowy, nie pozwalajcie innym mieszać w stanie waszej klasy, gdyż to utrudnia odnajdywanie błędów.

Przykładowe zadanie polega na napisaniu klasy Licznik, ma być ona wykorzystywana w wielu modułach zliczających rozpoczęcie i zakończenie jakiegoś zdarzenia. Licznik nie może być mniejszy od 0. Klasa Licznik ma 3 metody Zwiększ(), Zmniejsz(), WypiszStan().

    class Licznik
    {
        public int stan;

        public void Zwieksz()
        { 
            this.stan += 1; 
        } 
        
        public void Zmniejsz() 
        { 
            if (this.stan > 0)
                this.stan -= 1; 
        } 
        public void WypiszStan() 
        { 
            Console.Write(this.stan); 
        } 
    }
            Licznik l1 = new Licznik();
            l1.Zmniejsz();
            l1.Zmniejsz();
            l1.stan = -200;
            l1.Zwieksz();
            l1.WypiszStan();

Co należałoby poprawić w klasie Licznik?

Najlepszym wyjściem byłoby uniemożliwienie zmiany zmiennej stan, ustalając jej dostęp z public na private. Dzięki temu nikt nie może dostać się do zmiennej i jest to zablokowane na poziomie kompilacji.

Źródło: https://drive.google.com/drive/folders/0B4rqQMWTVxb8WTVkS2kySTRpN1k?usp=sharing

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment