Podczas dzisiejszego przeglądu kodu mój kolega powiedział coś interesującego: prototypeprzydaje się tylko wtedy, gdy potrzebujesz dziedziczenia - a kiedy dziedziczenie jest zawsze dobrym pomysłem ? Pomyślałem o tym i zdałem sobie sprawę, że zwykle używam dziedziczenia, aby obejść kod, który został źle zaprojektowany. Współczesny styl OO woli kompozycję niż dziedziczenie, …
Oto typowy scenariusz, który zawsze frustruje mnie. Mam model obiektu z obiektem nadrzędnym. Element nadrzędny zawiera niektóre obiekty podrzędne. Coś takiego. public class Zoo { public List<Animal> Animals { get; set; } public bool IsDirty { get; set; } } Każdy obiekt podrzędny ma różne dane i metody public class …
class Boxer: def punch(self, punching_bag, strength): punching_bag.punch(strength) class PunchingBag: def punch(self, strength): print "Punching bag punched with strength", strength boxer = Boxer() punching_bag = PunchingBag() boxer.punch(punching_bag, 2) Bez wątpienia punchto dobra nazwa metody w przypadku boksera. Ale czy nazwa punchnadaje się również do metody wbijania worka? W obu przypadkach mam …
obj.idwydaje się dość powszechny i również mieści się w zakresie czegoś, co obiekt może wiedzieć o sobie. Zastanawiam się, dlaczego mój obiekt powinien znać swój identyfikator? Wydaje się, że nie ma powodu, aby to mieć? Jednym z głównych powodów jego istnienia jest jej odzyskanie, więc moje repozytoria muszą to wiedzieć, …
Alan Kay twierdzi, że „stworzyłem termin„ obiektowy ”i mogę powiedzieć, że nie miałem na myśli C ++.” Miał oczywiście na myśli Smalltalk. Ale sam nie wymyślił programowania obiektowego; podstawowe pomysły dostał od Simuli. Więc jeśli ten termin nie został jeszcze wynaleziony, to jak pierwotnie nazywali programowanie obiektowe w Simula?
Luźne sprzężenie jest dla niektórych deweloperów świętym graalem dobrze zaprojektowanego oprogramowania. Z pewnością dobrą rzeczą jest uelastycznienie kodu w obliczu zmian, które mogą nastąpić w dającej się przewidzieć przyszłości, lub uniknięcie powielania kodu. Z drugiej strony wysiłki na rzecz luźnego łączenia komponentów zwiększają stopień pośredniości w programie, zwiększając w ten …
Mam klasę CPP, której konstruktor wykonuje pewne operacje. Niektóre z tych operacji mogą się nie powieść. Wiem, że konstruktorzy nic nie zwracają. Moje pytania są Czy wolno wykonywać inne operacje niż inicjowanie elementów w konstruktorze? Czy można powiedzieć funkcji wywołującej, że niektóre operacje w konstruktorze nie powiodły się? Czy mogę …
Pochodzę z silnego zaplecza OO, a ostatnio zacząłem pracować w organizacji, która choć kod jest napisany w Javie, ma o wiele mniejszy nacisk na dobry projekt OO niż to, do czego jestem przyzwyczajony. Powiedziano mi, że wprowadzam „zbyt dużo abstrakcji” i że zamiast tego powinienem kodować tak, jak zawsze to …
W mojej obecnej pracy kilkakrotnie miałem za zadanie wyczyścić stary kod. Często kod jest labiryntem, a dane za nim jeszcze bardziej splątane. Łączę rzeczy w ładne, schludne, modułowe metody. Każda metoda robi jedną rzecz i robi to dobrze. Wtedy rzeczy zaczynają iść na południe ... Niezmiennie kończę na czystym API …
To pytanie zostało przeniesione z przepełnienia stosu, ponieważ można na nie odpowiedzieć w programie Software Engineering Stack Exchange. Migrował 8 lat temu . Widziałem innych programistów używających klas statycznych jako przestrzeni nazw public static class CategoryA { public class Item1 { public void DoSomething() { } } public class Item2 …
Zamknięte. To pytanie jest nie na temat . Obecnie nie przyjmuje odpowiedzi. Chcesz poprawić to pytanie? Zaktualizuj pytanie, aby było tematem dotyczącym wymiany stosów inżynierii oprogramowania. Zamknięte 4 lata temu . Niedawno usłyszałem instruktora, że tworzenie gier było najlepszym sposobem na naukę programowania. Poza tym, że wszystko musiało zostać utworzone …
Zadanie polega na poddaniu starszej aplikacji testowi jednostkowemu. Najpierw podstawowe informacje o aplikacji: jest to baza kodów RCP Java LOC o wielkości 600 000 LOC z tymi głównymi problemami masowe powielanie kodu bez enkapsulacji, większość danych prywatnych jest dostępna z zewnątrz, niektóre dane biznesowe również stały się singletonami, więc można …
Załóżmy, że mam interfejs FooInterfacez następującą sygnaturą: interface FooInterface { public function doSomething(SomethingInterface something); } I konkretna klasa, ConcreteFooktóra implementuje ten interfejs: class ConcreteFoo implements FooInterface { public function doSomething(SomethingInterface something) { } } Chciałbym ConcreteFoo::doSomething()zrobić coś wyjątkowego, jeśli przejdzie on przez specjalny typ SomethingInterfaceobiektu (powiedzmy, że się nazywa SpecialSomething). …
Nie pamiętam, kiedy ostatni raz pisałem lekcje ogólne. Za każdym razem, gdy wydaje mi się, że potrzebuję go po pewnym namyśle, wyciągam wniosek, że nie. Druga odpowiedź na to pytanie sprawiła, że poprosiłem o wyjaśnienia (ponieważ nie mogę jeszcze komentować, zadałem nowe pytanie). Weźmy więc podany kod jako przykład przypadku, …
Istnieje wiele powodów, dla których globale są złe w OOP. Jeśli liczba lub rozmiar obiektów wymagających współdzielenia jest zbyt duża, aby można je było efektywnie przekazać w parametrach funkcji, zwykle wszyscy zalecają Wstrzykiwanie zależności zamiast obiektu globalnego. Jednak w przypadku, gdy prawie wszyscy muszą wiedzieć o pewnej strukturze danych, dlaczego …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.