Ramy oprogramowania - Software framework


W programowaniu komputerowym , wykorzystując ramy oprogramowanie jest abstrakcją , przy którym oprogramowanie , zapewniając ogólną funkcjonalność może być selektywnie zmieniane przez dodatkowy kod napisany przez użytkownika, zapewniając w ten sposób specyficzne dla aplikacji oprogramowania. Zapewnia standardowy sposób tworzenia i wdrażania aplikacji oraz jest uniwersalnym środowiskiem oprogramowania wielokrotnego użytku , które zapewnia określoną funkcjonalność jako część większej platformy oprogramowania w celu ułatwienia tworzenia aplikacji , produktów i rozwiązań. Struktury oprogramowania mogą obejmować programy pomocnicze, kompilatory, biblioteki kodu, zestawy narzędzi i interfejsy programowania aplikacji (API), które łączą wszystkie różne komponenty w celu umożliwienia rozwoju projektu lub systemu .

Frameworki mają kluczowe cechy odróżniające je od zwykłych bibliotek :

  • odwrócenie kontroli : we frameworku, w przeciwieństwie do bibliotek lub standardowych aplikacji użytkownika, ogólny przepływ kontroli w programie nie jest dyktowany przez wywołującego, ale przez framework. Zwykle osiąga się to za pomocą wzorca metody szablonu .
  • zachowanie domyślne : można to zapewnić za pomocą niezmiennych metod wzorca metody szablonu w klasie abstrakcyjnej, która jest udostępniana przez platformę.
  • rozszerzalność : użytkownik może rozszerzyć strukturę – zwykle przez selektywne nadpisywanie – lub programiści mogą dodać wyspecjalizowany kod użytkownika, aby zapewnić określoną funkcjonalność. Zwykle osiąga się to za pomocą metody przechwytującej w podklasie, która zastępuje metodę szablonu w nadklasie.
  • niemodyfikowalny kod frameworka : kod frameworka, ogólnie rzecz biorąc, nie powinien być modyfikowany podczas akceptowania rozszerzeń zaimplementowanych przez użytkownika. Innymi słowy, użytkownicy mogą rozszerzać framework, ale nie mogą modyfikować jego kodu.

Racjonalne uzasadnienie

Projektanci ram oprogramowania mają na celu ułatwienie rozwoju oprogramowania poprzez umożliwienie projektantom i programistom poświęcenie czasu na spełnianie wymagań oprogramowania, zamiast zajmowania się bardziej standardowymi szczegółami niskiego poziomu dostarczania działającego systemu, zmniejszając w ten sposób ogólny czas opracowywania. Na przykład zespół korzystający z frameworka internetowego do tworzenia witryny bankowej może skupić się na pisaniu kodu specyficznego dla bankowości, a nie na mechanice obsługi żądań i zarządzaniu stanem .

Struktury często zwiększają rozmiar programów, zjawisko określane jako „ rozdęcie kodu ”. Ze względu na potrzeby aplikacji zorientowanych na potrzeby klientów, zarówno konkurencyjne, jak i uzupełniające się frameworki czasami trafiają do produktu. Ponadto, ze względu na złożoność ich interfejsów API, zamierzone skrócenie całkowitego czasu opracowywania może nie zostać osiągnięte ze względu na konieczność poświęcenia dodatkowego czasu na naukę korzystania z platformy; ta krytyka jest wyraźnie słuszna, gdy zespół programistów po raz pierwszy napotka specjalny lub nowy framework. Jeśli taka struktura nie jest używana w kolejnych zadaniach zawodowych, czas zainwestowany w naukę struktury może kosztować więcej niż specjalnie napisany kod znany personelowi projektu; wielu programistów przechowuje kopie przydatnego boilerplate’u na zwykłe potrzeby.

Jednak po zapoznaniu się z ramami przyszłe projekty mogą być szybsze i łatwiejsze do ukończenia; koncepcja frameworka polega na stworzeniu jednego uniwersalnego zestawu rozwiązań, a po zaznajomieniu się, produkcja kodu powinna logicznie wzrosnąć. Nie ma takich twierdzeń dotyczących rozmiaru kodu ostatecznie dołączonego do produktu wyjściowego, ani jego względnej wydajności i zwięzłości. Korzystanie z dowolnego rozwiązania bibliotecznego z konieczności wciąga dodatki i nieużywane, obce zasoby, chyba że oprogramowanie jest łącznikiem kompilatora-obiektu, tworzącym ścisły (mały, w pełni kontrolowany i określony) moduł wykonywalny.

Problem trwa, ale ponad dekada doświadczeń w branży pokazała, że ​​najskuteczniejszymi frameworkami okazują się te, które ewoluują z refaktoryzacji wspólnego kodu przedsiębiorstwa, zamiast używania ogólnego „uniwersalnego dla wszystkich ” ramy opracowane przez strony trzecie do celów ogólnych. Przykładem może być to, jak interfejs użytkownika w takim pakiecie aplikacji, jak pakiet biurowy, rozwija się, aby mieć wspólny wygląd, działanie oraz atrybuty i metody udostępniania danych, ponieważ niegdyś odmienne pakiety aplikacji ujednolicają się w pakiet, który jest ciaśniejszy i mniejsze; nowszy/rozwinięty pakiet może być produktem, który udostępnia integralne biblioteki narzędziowe i interfejsy użytkownika.

Ten trend w kontrowersji porusza ważną kwestię dotyczącą ram. Tworzenie ram, które są eleganckie, w przeciwieństwie do tych, które jedynie rozwiązują problem, nadal jest raczej rzemiosłem niż nauką. „ Elegancja oprogramowania ” oznacza przejrzystość, zwięzłość i niewielką ilość odpadów (dodatkowe lub obce funkcje, z których większość jest definiowana przez użytkownika). Dla tych frameworków, które generują kod, na przykład „elegancja” oznaczałaby stworzenie kodu, który jest czysty i zrozumiały dla rozsądnego programisty (i który w związku z tym jest łatwy do modyfikacji), w przeciwieństwie do takiego, który generuje tylko poprawny kod. Kwestia elegancji polega na tym, że stosunkowo niewiele frameworków programowych przetrwało próbę czasu: najlepsze frameworki były w stanie z wdziękiem ewoluować wraz z zaawansowaną technologią, na której zostały zbudowane. Nawet tam, po ewolucji, wiele takich pakietów zachowa starsze możliwości, nadymając finalne oprogramowanie, ponieważ w inny sposób zastąpione metody zostały zachowane równolegle z nowszymi metodami.

Przykłady

Python Powered.png

Struktury oprogramowania zazwyczaj zawierają znaczną część kodu porządkowego i narzędziowego, aby pomóc w ładowaniu aplikacji użytkownika, ale generalnie koncentrują się na określonych problemach, takich jak:

Architektura

Według Pree, frameworki oprogramowania składają się z zamrożonych i gorących punktów . Zatrzymane plamy definiują ogólną architekturę systemu oprogramowania, to znaczy jego podstawowe komponenty i relacje między nimi. Pozostają one niezmienione (zamrożone) w każdym wystąpieniu struktury aplikacji. Punkty aktywne reprezentują te części, w których programiści korzystający z frameworka dodają własny kod, aby dodać funkcjonalność specyficzną dla ich własnego projektu.

W środowisku zorientowanym obiektowo framework składa się z klas abstrakcyjnych i konkretnych . Tworzenie takiego frameworka polega na komponowaniu i subklasowaniu istniejących klas.

Niezbędna funkcjonalność może być zaimplementowana przy użyciu wzorca metody szablonu, w którym zamrożone punkty są znane jako metody niezmienne, a punkty aktywne są znane jako metody wariantowe lub przechwytujące . Niezmienne metody w superklasie zapewniają zachowanie domyślne, podczas gdy metody przechwytujące w każdej podklasie zapewniają zachowanie niestandardowe.

Tworząc konkretny system oprogramowania z ramą oprogramowania, programiści wykorzystują gorące punkty zgodnie z konkretnymi potrzebami i wymaganiami systemu. Ramy oprogramowania opierają się na zasadzie Hollywood : „Nie dzwoń do nas, zadzwonimy do ciebie”. Oznacza to, że klasy zdefiniowane przez użytkownika (na przykład nowe podklasy) otrzymują komunikaty z predefiniowanych klas frameworka. Programiści zazwyczaj radzą sobie z tym, implementując abstrakcyjne metody superklasy .

Zobacz też

Bibliografia