I've worked among others with Java, Prolog, SQL and C# languages so far. I know that Java and C# are imperative, Prolog declarative and SQL somewhat declarative languages. Java and C# are object-oriented and you can develop aspect-oriented programs with them.
That's already four different characteristics that certain languages might fit in or implement: imperative, declarative, object-oriented, aspect-oriented and I've come across various other categories: functional languages, assembly languages and probably lots more I haven't heard.
Is there some kind of agreed and/or logical categorization or multi-dimensional categorization among which programming languages can be classified in a somewhat consistent way?