It is called packages. There is nothing on the modules as programming concept that requires the existence of functions as entity.

Again, Smalltalk did it first, and is actually one of the languages on the famous GoF book, used to create all the OOP patterns people complain about, the other being C++.

> There is nothing on the modules as programming concept that requires the existence of functions as entity.

I didn't claim it does. To make the point though: bare functions are a much simpler building block, and a much cleaner building block than classes. Classes by their nature put state and behavior in one place. If one doesn't need that, then a class is actually not the right concept to go for (assuming one has the choice, which one doesn't in Java). A few constants and a bunch of functions would be a simpler and fully sufficient concept in that case. And how does one group those? Well, a module.

In Java you are basically forced to make unnecessary classes, that only have static functions as members, to achieve a similar simplicity, but then you still got that ugly class thing thrown in unnecessarily.

In a few other languages maybe things are based on different things than functions. Like words in Forth or something. But even they can be interpreted to be functions, with a few implicit arguments. And you can just write them down. No need to put them into some class or some blabliblub concept.

From type systems theory point of view, a class is an extensible module that can be used as a variable.

As mentioned in another reply, Java did not invent this, it was building upon Smalltalk and SELF, with a little bit of Objective-C on the side, and C++ like syntax.

Try to create a single function in Smalltalk, or SELF.

http://stephane.ducasse.free.fr/FreeBooks.html

https://www.strongtalk.org/

https://selflanguage.org/

It is also no accident that when Java came into the scene, some big Smalltalk names like IBM, one day of the other easily migrated their Smalltalk tooling into Java, and to this day Eclipse still has the same object browser as any Smalltalk environment.

Smalltalk,

https://www.researchgate.net/figure/The-Smalltalk-browser-sh...

Which you will find a certain similarity including with NeXTSTEP navigation tools, and eventually OS X Finder,

The code browser in Eclipse

https://i.sstatic.net/4OFEM.png

By the way, in OOP languages like Python, even functions are objects,

    Python 3.14.0 (tags/v3.14.0:ebf955d, Oct  7 2025, 10:15:03) [MSC v.1944 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> def sum(x, y): return x + y
    ...
    >>> sum
    <function sum at 0x0000017A9778D4E0>
    >>> dir(sum)
    ['__annotate__', '__annotations__', '__builtins__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__getstate__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__type_params__']
    >>> type(sum)
    <class 'function'>
    >>> sum.__name__
    'sum'
    >>> sum.__class__
    <class 'function'>

> The code browser in Eclipse

> https://i.sstatic.net/4OFEM.png

«

Error 1011 Ray ID: 9973d6cc1badc66a • 2025-10-31 14:28:28 UTC

Access denied

What happened?

The owner of this website (i.sstatic.net) does not allow hotlinking to that resource (/4OFEM.png).

»

In java, it has to be a class in a package. Packages are sane enough. That isnt the point.

That is the point, packages the Java programming language feature for the CS concept of modules.

https://en.wikipedia.org/wiki/Modular_programming

> Languages that formally support the module concept include Ada, ALGOL, BlitzMax, C++, C#, Clojure, COBOL, Common Lisp, D, Dart, eC, Erlang, Elixir, Elm, F, F#, Fortran, Go, Haskell, IBM/360 Assembler, IBM System/38 and AS/400 Control Language (CL), IBM RPG, Java, Julia, MATLAB, ML, Modula, Modula-2, Modula-3, Morpho, NEWP, Oberon, Oberon-2, Objective-C, OCaml, several Pascal derivatives (Component Pascal, Object Pascal, Turbo Pascal, UCSD Pascal), Perl, PHP, PL/I, PureBasic, Python, R, Ruby,[4] Rust, JavaScript,[5] Visual Basic (.NET) and WebDNA.

If the whole complaint is that you cannot have a bare bones function outside of a class, Java is not alone.

Predating Java by several decades, Smalltalk, StrongTalk, SELF, Eiffel, Sather, BETA.

And naturally lets not forget C#, that came after Java.