Object Oriented Programming
The logical extension of the structural paradigm is the object-oriented paradigm. It emerged almost spontaneously. Several programmers working with the structural language Algol happened to notice that if you declare variables in a subroutine and place them not on the stack but in a memory area called the heap, then all nested subroutines can later refer to these variables. The subroutine in which the variables were declared became known as the class constructor. These ideas were further developed in languages such as Smalltalk, and later in C++. OOP took its more modern form with the advent of Java.
The advent of object-oriented programming gave a strong boost to the industry as a whole. Concepts such as class and object were introduced, and polymorphism of subtypes became possible, allowing programmers to develop similar implementations of program logic in different ways.
As a result, there are many progressive programming languages that incorporate some or all of the different paradigms. For example, Java quietly follows the imperative paradigm and also uses techniques from the structural paradigm, but not fully. A Java program cannot be written in a procedural style because it is completely object-oriented. A Java program always starts with a class, which must have a Main method, and if there is a class, then we are following the object-oriented paradigm.
At the same time, there is an opposite example - Python. It also has classes, it can safely be called an object-oriented language, but nobody forbids writing code completely in procedural style.
An important foundation is laid by the architect of a programming language when it is created, and depending on the paradigm's bias in favour of one or the other, you get different possibilities and programming styles that developers can use.