Co to jest struktura oprogramowania? [Zamknięte]

193

Czy ktoś może mi wyjaśnić, czym jest struktura oprogramowania? Dlaczego potrzebujemy ram? Co robi środowisko, aby ułatwić programowanie?

Niespokojny
źródło

Odpowiedzi:

422

Jestem bardzo spóźniony na odpowiedź. Chciałbym jednak podać jeden przykład, o którym myślałem tylko dzisiaj. Gdybym kazał ci wyciąć kawałek papieru o wymiarach 5 na 5 m, to na pewno byś to zrobił. Przypuśćmy jednak, że proszę cię o wycięcie 1000 kawałków papieru o tych samych wymiarach. W takim przypadku nie wykonasz pomiaru 1000 razy; oczywiście zrobiłbyś ramę o wymiarach 5 na 5 m, a następnie przy jej pomocy byłbyś w stanie wyciąć 1000 kawałków papieru w krótszym czasie. To, co zrobiłeś, było stworzeniem frameworka, który wykonałby określony rodzaj zadania. Zamiast wielokrotnie wykonywać ten sam typ zadania dla tego samego typu aplikacji, tworzysz strukturę posiadającą wszystkie te funkcje razem w jednym ładnym pakiecie, zapewniając w ten sposób abstrakcję dla twojej aplikacji i, co ważniejsze, wielu aplikacji.

Neha Choudhary
źródło
27
Chciałbym poznać przyczynę odmowy głosowania nad odpowiedzią. Pomoże mi to poprawić.
Neha Choudhary
4
fajne bardzo łatwe do zrozumienia ........... dzięki wielkie
Premkumar
25
@NehaChoudhary, nie ja, ale on -1, ponieważ mówisz o bibliotece, a nie o frameworku, ponieważ nie ma IoC.
Pacerier
11
Przeczytałem twój post, ale to, co publikujesz, brzmi jak biblioteka. Co powiesz na wyjaśnienie różnicy między frameworkiem a biblioteką?
Aaron Liu
2
Nie rozumiem. Z tego, co wyjaśniłeś, byłoby to bardziej jak biblioteka, prawda?
router
92

Technicznie nie potrzebujesz ramy. Jeśli tworzysz naprawdę bardzo prostą stronę (pomyśl o Internecie w 1992 r.), Możesz to wszystko zrobić na sztywno HTML i trochę CSS.

A jeśli chcesz stworzyć nowoczesną aplikację internetową, nie musisz też używać do tego frameworka.

Zamiast tego możesz za każdym razem napisać całą logikę, której potrzebujesz. Możesz napisać własną warstwę trwałości / przechowywania danych lub - jeśli jesteś zbyt zajęty - po prostu napisać niestandardowy kod SQL dla każdego dostępu do bazy danych. Możesz pisać własne warstwy uwierzytelniania i obsługi sesji. I twój własny szablon do renderowania logiki. I twoja własna logika obsługi wyjątków. I twoje własne funkcje bezpieczeństwa. I twoja własna struktura testów jednostkowych, aby upewnić się, że wszystko działa dobrze. A twoje własne ... [trwa dość długo]

Potem znowu, jeśli zrobić użyciu ramy , będziesz mógł korzystać z dobra, zazwyczaj oceniane przez ekspertów i bardzo dobrze przetestowane pracę dziesiątki jeśli nie setki innych deweloperów, który może okazać się lepszy niż ty. Będziesz mógł szybko budować to, co chcesz, bez konieczności poświęcania czasu na budowanie lub martwienie się zbytnio o elementy infrastruktury wymienione powyżej.

Możesz zrobić więcej w krótszym czasie i wiedzieć, że kod frameworki, którego używasz lub rozszerzasz, jest prawdopodobnie lepszy niż robisz to sam.

A koszt tego? Poświęć trochę czasu na naukę ram. Ale - o czym świadczy praktycznie każdy twórca stron internetowych - zdecydowanie warto poświęcić czas na naukę, aby uzyskać ogromne (naprawdę ogromne) korzyści z korzystania z dowolnych ram.

Steve Jalim
źródło
17
Dlaczego nie zainwestować tej energii w tworzenie frameworku open source, zamiast tworzyć własne rzeczy? „Możemy samodzielnie przenosić skały; razem możemy przenosić góry i tak dalej
Steve Jalim
7
@Jefffrey „Więc jak się nauczysz? Jak dorośniesz jako programista?” Dowiedz się, jak chcesz, ale jeśli zamierzasz pracować dla prawdziwego klienta, powinieneś zapewnić najlepsze możliwe rozwiązanie w jak najkrótszym czasie. TWÓJ „prawdopodobnie błędny” kod jest do tego niedopuszczalny.
Cmorales,
6
@Cmorales, jeśli chcesz nauczyć się języka programowania ani żadnego problemu określonej domeny nie są z pewnością będzie mieć żadnego „prawdziwego” klienta (i ewentualnie będziesz mieć dużo czasu w ręku) i że dlatego sugeruję początkujących nie zaczynać od ram.
But
3
@Jefffrey W swoim komentarzu nie powiedziałeś nic o początkujących, to było ogólne. Zgadzam się, że powinieneś uczyć się sam, ale twój komentarz nie precyzował tego, aw prawdziwym (zawodowym) życiu nie możesz sobie pozwolić na używanie błędnego kodu tylko do nauki. Znam facetów, którzy nie używają frameworków, ponieważ myślą, że wiedzą lepiej ... i spędzają dwa razy więcej czasu na każdym projekcie.
Cmorales
1
@Cmorales Znam również ludzi, którzy używają frameworków, ale poświęcają dwa razy więcej czasu na każdy projekt. Szybkość programowania nie zawsze zależy od używanych narzędzi.
Cypher
53

Podsumowanie na Wikipedii (Software Framework) (pierwsze google hit btw) wyjaśnia to całkiem dobrze:

Struktura oprogramowania w programowaniu komputerowym jest abstrakcją, w której wspólny kod zapewniający ogólną funkcjonalność może być selektywnie zastępowany lub wyspecjalizowany przez kod użytkownika zapewniający określoną funkcjonalność. Frameworki są szczególnym przypadkiem bibliotek oprogramowania, ponieważ stanowią one wielokrotnego użytku abstrakcje kodu opakowane w dobrze zdefiniowany interfejs programowania aplikacji (API), ale zawierają pewne kluczowe cechy odróżniające je od normalnych bibliotek.

Ramy oprogramowania mają następujące cechy odróżniające je od bibliotek lub zwykłych aplikacji użytkownika:

  1. inwersja kontroli - w ramach, w przeciwieństwie do bibliotek lub zwykłych aplikacji użytkownika, ogólny przepływ programu nie jest podyktowany przez osobę wywołującą, ale przez środowisko. [1]
  2. domyślne zachowanie - Framework ma domyślne zachowanie. To domyślne zachowanie musi w rzeczywistości być pewnym użytecznym zachowaniem, a nie serią braków.
  3. rozszerzalność - framework może być rozszerzony przez użytkownika zwykle przez selektywne przesłonięcie lub wyspecjalizowany przez kod użytkownika zapewniający określoną funkcjonalność.
  4. niemodyfikowalny kod frameworka - kod frameworku ogólnie nie może być modyfikowany. Użytkownicy mogą rozszerzać framework, ale nie mogą modyfikować jego kodu.

Możesz go „potrzebować”, ponieważ może on stanowić doskonały skrót podczas tworzenia aplikacji, ponieważ zawiera wiele już napisanych i przetestowanych funkcji. Powód jest dość podobny do powodu korzystania z bibliotek oprogramowania.

aioobe
źródło
13
biała część twojej odpowiedzi była znacznie lepsza niż szara część, zgodnie z rodzajem pytania ...
OlimilOops
Jestem prawie pewien, że osoba zadająca pytanie również znalazła wpis w Wikipedii ... Prawdopodobnie szukał bardziej wyczerpującej odpowiedzi.
Stophface
31

Wiele dobrych odpowiedzi już, ale pozwól mi zobaczyć, czy mogę dać ci inny punkt widzenia.

Upraszczając rzeczy, możesz zobaczyć platformę jako kompletną aplikację, z wyjątkiem faktycznej funkcjonalności. Podłączasz funkcjonalność i PRESTO! masz aplikację.

Rozważmy, powiedzmy, strukturę GUI. Struktura zawiera wszystko, czego potrzebujesz, aby utworzyć aplikację. Rzeczywiście, często możesz w prosty sposób stworzyć minimalną aplikację z bardzo małą liczbą linii źródłowych, która absolutnie nic nie robi - ale daje ci zarządzanie oknami, zarządzanie podokienami, menu, paski przycisków itp. To jest podstawowa strona rzeczy. Dodając funkcjonalność aplikacji i „podłączając ją” w odpowiednie miejsca w ramach, zmieniasz tę pustą aplikację, która robi nic więcej niż zarządzanie oknami itp. W prawdziwą, pełnowartościową aplikację.

Istnieją podobne typy platform dla aplikacji internetowych, aplikacji po stronie serwera itp. W każdym przypadku platforma zapewnia większość żmudnego, powtarzalnego kodu (miejmy nadzieję), podczas gdy zapewniasz rzeczywistą funkcjonalność domeny problemowej. (Jest to ideał. W rzeczywistości sukces frameworka jest bardzo zmienny).

Podkreślam ponownie, że jest to uproszczony pogląd na to, czym są ramy. Nie używam strasznych terminów, takich jak „Inversion of Control” i tym podobne, chociaż większość platform ma wbudowane takie przerażające koncepcje. Ponieważ jesteś początkujący, pomyślałem, że oszczędzę ci żargonu i pójdę z łatwym przykładem.

WŁAŚNIE MOJA poprawna OPINIA
źródło
14

Nie jestem pewien, czy istnieje jednoznaczna definicja „frameworka”. Czasami duży zestaw bibliotek nazywa się ramą, ale myślę, że typowe użycie tego słowa jest bliższe definicji przyniesionej przez aioobe.

Ten bardzo fajny artykuł podsumowuje różnicę między zestawem bibliotek a frameworkiem:

Framework można zdefiniować jako zestaw bibliotek, które mówią „Nie dzwoń do nas, my zadzwonimy”.

W jaki sposób ramy mogą ci pomóc? Ponieważ zamiast pisać coś od zera, po prostu rozszerzasz daną działającą aplikację. W ten sposób zyskujesz dużą produktywność - czasem wynikowa aplikacja może być znacznie bardziej skomplikowana niż sama w tym samym czasie - ale zwykle cechuje się dużą elastycznością.

Dąb
źródło
8

Prostym wyjaśnieniem jest: Framework to rusztowanie, w którym można budować aplikacje.

Framework ogólnie zapewnia pewną podstawową funkcjonalność, z której można korzystać i rozszerzać go w celu tworzenia bardziej złożonych aplikacji, istnieją ramy dla wszelkiego rodzaju rzeczy. Framework Microsofts MVC jest tego dobrym przykładem. Zapewnia wszystko, czego potrzebujesz, aby wyjść ze strony internetowej budynku przy użyciu wzorca MVC, obsługuje żądania internetowe, trasy i tym podobne. Wszystko, co musisz zrobić, to wdrożyć „Kontrolery” i dostarczyć „Widoki”, które są dwiema konstrukcjami zdefiniowanymi w ramach MVC. Struktura MVC obsługuje następnie wywoływanie kontrolerów i renderowanie widoków.

Być może nie najlepsze sformułowanie, ale mam nadzieję, że to pomoże

Sekhat
źródło
1
W rzeczywistości bardziej przypomina budowanie aplikacji na rusztowaniu niż wokół niego.
Jörg W Mittag
4

na najniższym poziomie środowisko to środowisko, w którym otrzymujesz zestaw narzędzi do pracy

narzędzia te mają postać bibliotek, plików konfiguracyjnych itp.

to tak zwane „środowisko” zapewnia podstawową konfigurację (raporty błędów, pliki dziennika, ustawienia języka itp.) ... którą można modyfikować, rozszerzać i rozbudowywać.

Ludzie tak naprawdę nie potrzebują ram, to tylko kwestia chęci zaoszczędzenia czasu, a inni tylko kwestia osobistych preferencji.

Ludzie uzasadnią, że dzięki frameworkowi nie musisz pisać kodu od zera. Ale to tylko ludzie mylący biblioteki z frameworkami.

Nie jestem tutaj stronniczy, aktualnie używam frameworka.

Yretuta
źródło
4

Ogólnie rzecz biorąc, praca z ramą jest rzeczywistą lub konceptualną strukturą, która ma służyć jako wsparcie lub przewodnik do budowania czegoś, co rozwija strukturę w coś użytecznego ...

uma
źródło
2

Struktura zapewnia funkcje / rozwiązania dla konkretnego obszaru problemu.
Definicja z wiki :

Struktura oprogramowania w programowaniu komputerowym jest abstrakcją, w której wspólny kod zapewniający ogólną funkcjonalność może być selektywnie zastępowany lub wyspecjalizowany przez kod użytkownika zapewniający określoną funkcjonalność. Frameworki są szczególnym przypadkiem bibliotek oprogramowania, ponieważ stanowią one wielokrotnego użytku abstrakcje kodu opakowane w dobrze zdefiniowany interfejs programowania aplikacji (API), ale zawierają pewne kluczowe cechy odróżniające je od normalnych bibliotek.

Soe Moe
źródło
W pierwszym zdaniu jest słowo „abstrakcja”. co przez to rozumiesz ? gdzie używamy abstrakcji?
Kumaresan Perumal
2

Framework pomaga nam w korzystaniu z „już utworzonego”, metafora może być taka,

myślę, że materiał ziemi jest językiem programowania,

i na przykład „kamera” to program, a ty postanowiłeś stworzyć zeszyt. Nie musisz odtwarzać kamery za każdym razem, po prostu korzystasz z szkieletu ziemi (na przykład w sklepie technologicznym), weź aparat i zintegruj go z notebookiem.

stckvrflw
źródło
2

Framework ma pewne funkcje, których możesz potrzebować. być może potrzebujesz tablic, które mają wbudowane mechanizmy sortowania. A może potrzebujesz okna, w którym chcesz umieścić elementy sterujące, wszystko, co możesz znaleźć w frameworku. to rodzaj PRACY, która obejmuje RAMĘ wokół twojej pracy.

EDYCJA: OK Mam zamiar wykopać to, co próbowaliście mi powiedzieć;) być może nie zauważyliście informacji między wierszami „PRACA, która rozciąga się wokół RAMKI ...”, zanim to się jeszcze głębiej zapadnie. Staram się dać temu wyraz, mając nadzieję, że jesteś łaskawie:
dobre wyjaśnienie pytania „Różnica między biblioteką a ramą ” znalazłem tutaj
http://ifacethoughts.net/2007/06/04/difference-between- a-biblioteka-i-framework /

OlimilOops
źródło
całkowicie nie rozumiem głosów oddanych ... Jestem całkowicie oszołomiony. pytanie jest rodzajem podstawowego pytania dla początkujących, a moja odpowiedź była zgodna z tym dość dobrym ...
OlimilOops
4
Żeby było jasne: nie oddałem głosu. Jednak to, o czym mówisz, znajduje się na znacznie niższym poziomie niż ramy. Na przykład kolekcje i algorytmy sortowania są bardziej standardowymi bibliotekami niż frameworkami.
bakkal
1
dzięki za odpowiedź, ale ... to nie jest odpowiedź na moje pytanie. zgodnie z pytaniem PO, niewłaściwe jest tutaj rozróżnianie między „standardową biblioteką” a „strukturą”. np. w frameworku .net można znaleźć kolekcje przestrzeni nazw w części frameworku. Nigdy nie słyszałem, żeby ktoś powiedział, że kolekcjonowanie przestrzeni nazw nie jest częścią .netframework. więc twoja odpowiedź na moje pytanie jest błędna
OlimilOops
1
To jest definicja biblioteki . Tęskni za wyróżniającą cechą frameworka w przeciwieństwie do biblioteki: Inversion of Control .
Jörg W Mittag
2

Poza definicjami, które czasem są zrozumiałe tylko wtedy, gdy już rozumiesz, przykład pomógł mi.

Wydaje mi się, że dostrzegłem błysk zrozumienia, gdy szukałem sortowania listy w .Net; przykład frameworka zapewniającego funkcjonalność dostosowaną do kodu użytkownika zapewniającego określoną funkcjonalność. Weź List.Sort (IComparer). Algorytm sortowania, który znajduje się w frameworku .Net w metodzie Sort, musi wykonać szereg porównań; czy obiekt A występuje przed czy za obiektem B? Ale samo sortowanie nie ma pojęcia, jak dokonać porównania; tylko sortowany typ wie o tym. Nie można napisać algorytmu sortowania porównawczego, który może być ponownie użyty przez wielu użytkowników i przewidzieć wszystkie typy, do których sortowania zostaniesz wezwany. Tę część pracy musisz pozostawić samemu użytkownikowi. Więc tutaj, sortuj, zwany też frameworkiem, wywołuje metodę w kodzie użytkownika, sortując typ, aby mógł dokonać porównania. (Lub można użyć delegata;

Czy dobrze to zrozumiałem?

BillB
źródło