Java 9 będzie zawierać moduły oprócz pakietów. Zwykle języki mają jeden lub drugi. I większość programistów postrzega dwa terminy jako synonimy. Moduły są zbudowane na pakietach, traktując je jak prymitywy. Wzór złożony sugeruje równomierne traktowanie prymitywów i kompozytów. W przeciwnym razie zdarzają się złe rzeczy. Na przykład spójrz na projekt Valhalla, w którym starają się zmodernizować wspólny nadtyp dla typów pierwotnych (wartość) i referencyjnych.
Czy moduły i pakiety reprezentują semantycznie odrębne pojęcia? Oznacza to, że rozsądnie jest mieć oba w dowolnym języku (oddzielenie problemów). Czy Java musi mieć jedno i drugie jako hołd dla wstecznej kompatybilności?
Po co wprowadzać nową koncepcję zamiast rozszerzać istniejącą?
JSR 376 : „System modułów platformy Java” zaimplementowany w ramach projektu Jigsaw .
Według SOTMS
Moduł to nazwany, samoopisujący zbiór kodu i danych. Jego kod jest zorganizowany jako zestaw pakietów zawierających typy, tj. Klasy Java i interfejsy; jego dane obejmują zasoby i inne rodzaje informacji statycznych.
JLS ostrożnie unika definiowania pakietu . Z Wikipedii :
Pakiet Java to technika porządkowania klas Java w przestrzeniach nazw podobnych do modułów Modula, zapewniająca programowanie modułowe w Javie.
Wiem, że cytowanie Wikipedii jest złą praktyką, ale odzwierciedla powszechne zrozumienie. Od pozycji programowania modułowego:
Termin pakiet jest czasem używany zamiast modułu (jak w Dart, Go lub Java). W innych implementacjach jest to odrębna koncepcja; w Pythonie pakiet jest kolekcją modułów, podczas gdy w nadchodzącej Javie 9 planowane jest wprowadzenie nowej koncepcji modułów (zbiór pakietów z rozszerzoną kontrolą dostępu).
package
jest / robi / znaczy, ani też nie zmieni systemu (klasycznego, dość okropnego) systemu ścieżek klas w środowisku JRE. Pytanie nr 2 czuję się przede wszystkim opinia zorientowany (to odpowiada , ale moja odpowiedź, a ktoś inny może się różnić i żadna z nas nie musi być źle).
jigsaw
moduły-style są tylko ulepszeniem technicznym w stosunku do pakietów? 3) (jeśli nie 1 i jeśli 2), Java po prostu (lub pozornie) zachowuje obie koncepcje dla kompatybilności wstecznej. Na niektóre z tych pytań można odpowiedzieć, inne są przede wszystkim oparte na opiniach. Wydaje mi się, że edycja upraszczająca poszukiwane wyjaśnienia jest w tym miejscu.