I just can give you an overall answer:
Command line options are often parsed using the library function "getopt". Originally it only accepted aguments consisting of a - followd by a symbol. This effectively limits the amount of options you have, more or less -A to -Z, -a to -z and -0 to -9. You can imagine that you will not use an option without at least a hint to the real use, like -h for help or -v for version information or verbose output.
In Linux and the often associated standard C library glibc there is the extension to getopt to also handle -- - like options. Coming with this is that many commands developed under GNU (like glibc) used this extension. Now for many comands you also have the GNU-like style option. -v and --verbose, -h and --help and so on. I guess the same happened in BSD (though I am no BSD guy, please correct me).
Your ps-command comes from a software collection called procps and I guess that they want to mimic the option style specific for a certain platform. So for the UNIX guys it has - options. For BSD it also accepts something like "ps aux" and so on.
PS is not the only programm behaving like this. Many of the standard programms understand the "old" UNIX style (POSIX) and some modern extensions.