As you know, and as far as I know, all the computer languages, which used popularly, are based on English. Oh… machine language is one exception.
Have you ever thought during in your freshman or sophomore about computer languages resembled English? I don’t mean keywords like class, int, float, and so on. What I mean is the way computer languages are composed of.
For example, function declaration is like
doSomething( int x, char *what)
It is composed as
verb + objective + objective
Let’s consider some other human language. Because I’m Korean, let’s pick Korean.
Korean is like
(subject) + objective + verb
So, if most of computer scientist who created computer languages had been Korean, they have designed them like
( int x, char *what )do
I remember that most of my classmates had difficulty in learning C++. At that time, the most important aspect of C++ was its OOPness, not meta-language portion of the language. Because they were trained to use procedural language, they had to think about logic flow. ( Yes, for procedural languages, people invented “Flow chart” for the same reason. )
I couldn’t understand it. Why did my classmates have difficulty in understanding OOP? Some even said, “People use C++ like C”, and I would like to understand what they meant. They just meant that people use C++ only with procedural part without using classes, templates and so on.
They are also the ones who didn’t understand OOPness of C++.
OOP, pushed by C++, was really about component, or unit of a program.
In OOP paradigm, you think about what entities or component you need to write a program. A S/W program is just a combination of the entities and communication among those entities.
So, first thing you should figure out is to identify those entities, and the second thing is to decide what each of them does. Then just write methods for those entities. The entities are called classes.
Instantiated class is called an instance of a class or an object. Then you make one entity call other entity for certain necessity. If you complete the relationship among those entities, you have a finished S/W program on your hand. So, it was kind of magic. Without thinking about complicated logic for the whole S/W program, you divide and conquer the program. Because you take out entities, your problem space is now small, and you focus on the small problem space.
So, as an answer to Flow Chart, you have UML for OOP.
However, flow chart is still necessary, because it describes how each entity communicates one another.
To me, OOP paradigm was like
subject + verb
subject + verb + objective
You declare an object and call its method or call its method with some parameters.
CDog myDog; myDog.Eat(); CCat yourCat; myDog.Bite( yourCat );
So, if a korean computer scientist designed it, it would be like
CDog myDog; myDog.( )Eat; CCat yourCat; myDog.( yourCat )Bite;
During early 90’s, I have heard that one professor in Korea designed a computer language with Korean in mind. I have never seen it how it looked like, but if he really considered Korean, wouldn’t it be look like the one I described here?
ADDED : If computer languages were designed like Korean, there is possibility that parsers and general algorithm can be “data-centric” rather than “behaviour” or “verb” or “function” centric. Because nouns like objectives , which are for “for what things should be done”, are analyzed earlier than verb which are for “what to do”.