Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

To jest post przetłumaczony przez AI.

제이온

[Obiekty] Rozdział 1. Obiekty, projektowanie

  • Język pisania: Koreański
  • Kraj referencyjny: Wszystkie kraje country-flag

Wybierz język

  • Polski
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Nederlands
  • हिन्दी
  • Magyar

Tekst podsumowany przez sztuczną inteligencję durumis

  • W rozwoju oprogramowania praktyka jest ważniejsza niż teoria, a prosty program pozwala zrozumieć znaczenie obiektowego projektowania.
  • Na przykładzie aplikacji do sprzedaży biletów opisano, jak pisać elastyczny kod poprzez zmniejszenie zależności i sprzężenia między obiektami, a także porównano różnice między programowaniem proceduralnym a obiektowym.
  • Obiektowe projektowanie tworzy kod, który można modyfikować, a obiekty są autonomicznymi bytami, które same odpowiadają za dane, a zarządzanie zależnościami między współpracującymi obiektami powinno być odpowiednie.

Wprowadzenie

Robert L. Glass argumentował, że praktyka jest ważniejsza niż teoria. W szczególności rozwój oprogramowania jest doskonałym przykładem tego, gdzie praktyka wyprzedza teorię, a programiści uczą się najwięcej, gdy brudzą sobie ręce, tworząc konkretny kod. Dlatego też teoria i koncepcje zostaną na chwilę odłożone na bok, aby przyjrzeć się prostym programom.


Implementacja aplikacji sprzedaży biletów

  • Planowane jest zorganizowanie małego wydarzenia w celu promocji małego teatru.
    • Treść wydarzenia: Losowanie wśród widzów, którzy otrzymają bezpłatne zaproszenia na spektakl
  • Konieczne jest rozdzielenie widzów, którzy wygrali w losowaniu, od tych, którzy nie wygrali.
    • Widzowie, którzy wygrali w losowaniu: Wymiana zaproszenia na bilet
    • Widzowie, którzy przegrali w losowaniu: Zakup biletów za gotówkę



Jaki jest problem?

Robert Martin opisuje trzy funkcje, które powinien mieć moduł oprogramowania (bez względu na rozmiar, taki jak klasa, pakiet, biblioteka lub dowolny element składający się na program).


  • Działa prawidłowo podczas wykonywania.
  • Istnieje w celu zmian.
    • Zmiany powinny być możliwe przy minimalnym wysiłku.
  • Komunikuje się z osobami czytającymi kod.
    • Programiści powinni być w stanie łatwo czytać i rozumieć kod.


Powyższa aplikacja sprzedaży biletów spełnia pierwsze ograniczenie, czyli prawidłowe działanie, ale nie spełnia celów zmiany i komunikacji.


Kod, który nie spełnia oczekiwań

Spójrzmy na powód, dla którego nie spełnia celu komunikacji.


  • Co robi metoda enter() klasy Theater?
    • Teatr sprawdza, czy w torbie widza znajduje się zaproszenie.
    • Jeśli w torbie widza znajduje się zaproszenie, teatr prosi sprzedawcę o przeniesienie biletu przechowywanego w kasie do torby widza.
    • Jeśli w torbie widza nie ma zaproszenia, teatr zabiera z torby widza tyle gotówki, ile kosztuje bilet, kupuje bilet i wkłada go do torby.
  • Z punktu widzenia widza, teatr jako strona trzecia niepotrzebnie grzebie w jego torbie, zabiera pieniądze i wkładają bilet.
  • Z punktu widzenia sprzedawcy, teatr jako strona trzecia niepotrzebnie manipuluje biletami i pieniędzmi w kasie bez pozwolenia.
  • Zrozumiały kod to kod, którego działanie nie odbiega znacząco od naszych oczekiwań, a teatr wykracza poza nasze oczekiwania.
    • Widz powinien samodzielnie wyciągnąć pieniądze z torby i zapłacić sprzedawcy za bilet.
    • Sprzedawca powinien samodzielnie wyciągnąć bilet z kasy i przekazać go widzowi, a następnie odebrać od niego pieniądze i przechować je w kasie.
  • Aby zrozumieć metodę enter(), należy pamiętać o wielu szczegółach.
    • Audience ma Bag.
    • W Bag znajdują się pieniądze i bilet.
    • TiketSellet sprzedaje bilety w TicketOffice, a TicketOffice przechowuje pieniądze i bilety.


Kod podatny na zmiany

Metoda enter() zakłada dwa warunki.

  • Widz zawsze nosi ze sobą torbę, aby przechowywać pieniądze i zaproszenie.
  • Sprzedawca sprzedaje bilety tylko w kasie.


A co, jeśli:

  • Widz może nie mieć torby.
  • Widz może płacić kartą kredytową zamiast gotówki.
  • Sprzedawca może sprzedawać bilety poza kasą.


Na przykład, aby spełnić pierwszy wymóg, należy usunąć obiekt Bag klasy Audience i zmodyfikować metodę enter() klasy Theater. Dzieje się tak ponieważ klasa Theater jest nadmiernie uzależniona od faktu, że widz nosi ze sobą torbę, a sprzedawca sprzedaje bilety tylko w kasie. Jeśli którykolwiek z tych szczegółów ulegnie zmianie, konieczna będzie modyfikacja zarówno tej klasy, jak i klas od niej zależnych (np. Theater).


Jest to problem związany z zależnością między obiektami, a zależność ta sugeruje wpływ na zmiany. Jednak projektowanie obiektowe ma na celu utworzenie społeczności obiektów współpracujących ze sobą i wzajemnie od siebie zależnych, dlatego nie chodzi o całkowite usunięcie zależności, ale o zachowanieminimalnej ilości zależnościniezbędnych do realizacji funkcji aplikacji i usunięcie zbędnych zależności.


Jeśli istnieje zbyt wiele zależności między obiektami, mówimy o wysokiej łącznościIm wyższa łączność między dwoma obiektami, tym większe prawdopodobieństwo, że będą one zmieniane razem. Zatem celem projektu jest zmniejszenie łączności między obiektami w celu stworzenia projektu łatwego w modyfikacji.


Poprawa projektu

Teatr nie musi wiedzieć, czy widz ma torbę, czy sprzedawca sprzedaje bilety w kasie. Teatr po prostu chce, aby widz wszedł do teatru. Dlatego widz powinien samodzielnie zarządzać pieniędzmi i zaproszeniem w torbie, a sprzedawca powinien samodzielnie zarządzać biletami i cenami biletów w kasie.


Zwiększenie autonomii

Obiekt, który wykonuje tylko ściśle powiązane zadania, a zadania niezwiązane z nim deleguje innym obiektom, nazywamy obiektem o wysokiej spójności. Tworzenie autonomicznych obiektów, które samodzielnie zarządzają swoimi danymi, pozwala na zmniejszenie łączności i zwiększenie spójności.


Programowanie proceduralne i obiektowe

  • Programowanie proceduralne
    • Metoda enter() klasy Theater to proces, a Audience, TicketSeller, Bag, TicketOffice to dane.
    • Programowanie proceduralne to umieszczanie procesów i danych w oddzielnych modułach.
    • Istnieje wiele kodów sprzecznych z naszą intuicją (np. widz samodzielnie zarządza pieniędzmi i zaproszeniem).
    • Trudno jest ograniczyć wpływ zmian danych.
    • Zarządzanie odpowiedzialnością jest scentralizowane (Theater zarządza wszystkim).
  • Programowanie obiektowe
    • Programowanie obiektowe to umieszczanie danych i procesów w tym samym module.
    • Możliwość pisania kodu zgodnego z naszą intuicją.
    • Możliwość skutecznego ograniczenia wpływu zmian danych dzięki kapsułkowaniu.
    • Każdy obiekt jest odpowiedzialny za siebie.


Można go jeszcze poprawić.

  • Klasa Bag klasy Audience nadal jest pasywnym elementem sterowanym przez klasę Audience, dlatego należy stworzyć klasę Bag jako autonomiczny obiekt.
  • TicketOffice klasy TicketSeller jest również sterowane przez TicketSeller. TicketOffice należy stworzyć jako autonomiczny obiekt.
    • Jednak po zmianie TicketOffice ma dodatkową łączność z Audience.
    • Projektowanie polega na rozsądnym podejściu do kompromisów. W tym przypadku można uzgodnić, że TicketOffice będzie w pewnym stopniu obiektem pasywnym, aby zmniejszyć łączność z Audience.



Tak, to kłamstwo!

  • Nawet jeśli w rzeczywistości coś jest pasywne, w świecie obiektowym wszystko staje się aktywne i autonomiczne.
  • Dobrze jest używać personifikacji, aby traktować obiekty pasywne tak, jakby się śmiały, rozmawiały i złościły.


Projektowanie obiektowe

Dlaczego projektowanie jest konieczne?

  • Projektowanie to umieszczanie kodu.
  • Dobry projekt to taki, który w pełni realizuje dzisiejsze potrzeby, a jednocześnie bezproblemowo dostosowuje się do jutrzejszych zmian.


Projektowanie obiektowe

  • Zmienne kody są łatwe do zrozumienia.
  • Paradygmat obiektowy pozwala na tworzenie kodu w sposób zgodny z naszym spojrzeniem na świat.
  • Obiekt jest autonomicznym bytem odpowiedzialnym za swoje dane.
  • Doskonałe projektowanie obiektowe to zarządzanie zależnościami między współpracującymi obiektami.


Źródło

  • Obiekty
제이온
제이온
제이온
제이온
[Obiekty] Rozdział 2. Programowanie obiektowe Dokument opisujący metodologię programowania obiektowego stosowaną do implementacji systemu rezerwacji biletów na film, obejmujący takie koncepcje jak współpraca, obiekty, klasy, dziedziczenie, polimorfizm, abstrakcja i kompozycja. Prezentuje metody zwięk

28 kwietnia 2024

[Efektywny Java] Punkt 6. Unikaj niepotrzebnego tworzenia obiektów Przewodnik po sposobach zmniejszenia liczby niepotrzebnych tworzeń obiektów w Javie. W przypadku obiektów niezmiennych, takich jak String, Boolean, lepiej jest używać literałów, a wyrażenia regularne najlepiej buforować w instancji Pattern. Ponadto automa

28 kwietnia 2024

Co to jest Java Collections Framework (JCF)? - Definicja i cechy JCF (JAVA) Java Collections Framework (JCF) to zbiór klas Java, który zapewnia standardowy sposób efektywnego przetwarzania wielu danych. JCF implementuje struktury danych do przechowywania danych i algorytmy jako klasy, co zwiększa możliwość ponownego użycia kodu,

27 kwietnia 2024

[Bez stopnia, przetrwać jako programista] 14. Podsumowanie często zadawanych pytań na rozmowach kwalifikacyjnych dla początkujących programistów Przewodnik po przygotowaniu do rozmów kwalifikacyjnych dla programistów. Wyjaśnia takie pojęcia często pojawiające się podczas rozmów jak: obszary pamięci głównej, struktury danych, RDBMS i NoSQL, programowanie proceduralne i obiektowe, nadpisywanie i prz
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

3 kwietnia 2024

Modelowanie danych koncepcyjnych Modelowanie danych koncepcyjnych to proces oddzielania jednostek i przedstawiania relacji między nimi w postaci diagramu ERD. Jednostki to niezależne jednostki informacji, a atrybuty to dane posiadane przez jednostki. Identyfikator jednoznacznie identyfik
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

8 kwietnia 2024

[Javascript] Struktura obiektu (V8) Obiekt JavaScript w silniku V8 jest optymalizowany jak struktura w zależności od stanu, przełączając się między szybkim trybem i trybem słownika, który działa jako mapa skrótów. Szybki tryb jest szybki, gdy klucz i wartość są prawie stałe, ale może spowol
곽경직
곽경직
곽경직
곽경직
곽경직

18 marca 2024

Co sądzicie o moim pomyśle? Sens idei wykracza poza zwykłe twórcze myślenie, zależy od tego, jaki wpływ wywiera na codzienne życie innych ludzi i jakie znaczenie im przekazuje. Z perspektywy filozoficznej Heideggera możemy ponownie przeanalizować prawdziwą wartość i znaczenie idei,
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

7 maja 2024

Modelowanie danych logicznych w projekcie Kanban Board 2 Artykuł opisuje krok po kroku proces modelowania danych logicznych w oparciu o ERD modelowania danych koncepcyjnych. Prezentuje wyzwania związane z normalizacją i rozwiązania problemów. Szczegółowo omawia zagadnienie rozdzielenia author_id i responsibilit
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그
제이의 블로그

9 kwietnia 2024

"Love is in the Air" 2 i kultura organizacyjna: Siła obserwacji - część 2 Zamiast polegać na zewnętrznych konsultantów w celu poprawy kultury organizacyjnej, należy analizować kulturę organizacyjną i szukać zmian poprzez obserwację „wewnętrzną”, taką jak interakcje pracowników, rozmieszczenie przestrzeni i symbole. W popularnym
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son
Byungchae Ryan Son

9 maja 2024