Niedawno przeczytałem post na blogu Three Big Lies i trudno mi uzasadnić drugie kłamstwo, które jest cytowane tutaj:
(LIE # 2) KOD MUSI BYĆ ZAPROJEKTOWANY WOKÓŁ MODELU ŚWIATA
Nie ma żadnej wartości w kodzie będącym jakimś modelem lub mapą wyimaginowanego świata. Nie wiem, dlaczego jest tak atrakcyjny dla niektórych programistów, ale jest niezwykle popularny. Jeśli w grze jest rakieta, możesz mieć pewność, że istnieje klasa „Rakieta” (zakładając, że kod to C ++), która zawiera dane dokładnie dla jednej rakiety i wykonuje rakietowe rzeczy. Bez względu na to, jaka transformacja danych jest rzeczywiście wykonywana, ani na układ danych. Lub, jeśli o to chodzi, bez podstawowego zrozumienia, że tam, gdzie jest jedna rzecz, prawdopodobnie jest więcej niż jedna.
Chociaż za tego rodzaju projekty istnieje wiele kar za wydajność, najbardziej znaczące jest to, że nie skaluje się. W ogóle. Sto rakiet kosztuje sto razy więcej niż jedna rakieta. I jest bardzo prawdopodobne, że kosztuje to jeszcze więcej! Nawet nie-programistom nie powinno to mieć żadnego sensu. Ekonomia skali. Jeśli masz coś więcej, powinno stać się tańsze, a nie droższe. Sposobem na to jest odpowiednie zaprojektowanie danych i pogrupowanie rzeczy według podobnych przekształceń.
Oto moje problemy z tym kłamstwem.
Kod ma wartość modelu / mapy wyobrażonego świata, ponieważ modelowanie wyobrażonego świata pomaga (przynajmniej ja, osobiście) wizualizować i organizować kod.
Posiadanie klasy „Rakieta” jest dla mnie idealnie uzasadnionym wyborem na klasę. Być może „rakiety” można podzielić na typy rakiet, takie jak AGM-114 Hellfire itp., Które zawierają siłę nośną, maksymalną prędkość, maksymalny promień skrętu, typ celowania itd., Ale nadal każda wystrzelona rakieta musi mieć pozycję i prędkość.
Oczywiście posiadanie 100 rakiet kosztuje więcej niż 1 rakietę. Jeśli na ekranie jest 100 Rakiet, musi być 100 różnych obliczeń, aby zaktualizować ich pozycję. Drugi akapit brzmi, jakby twierdził, że jeśli jest 100 rakiet, aktualizacja stanu powinna kosztować mniej niż 100 obliczeń?
Mój problem polega na tym, że autor przedstawia „wadliwy” model programowania, ale nie przedstawia sposobu na jego „poprawienie”. Być może podchodzę do analogii z klasą rakiet, ale naprawdę chciałbym zrozumieć powód tego kłamstwa. Jaka jest alternatywa?