The origin of the object-oriented programming

The origin of the object-oriented programming

I. Overview

1.1 1940: Machine-oriented

First programming in machine language is written, to use the binary code that the machine can recognize and execute instructions and data. Simply put, the direct write 0 and 1 to represent the sequence of programming languages. For example: 0000. Representative load (LOAD), 0001 on behalf of storage (the STORE) and the like.
Machine language directly executed by a machine, fast speed, but an obvious drawback is that: to write is too difficult, once you find yourself
wrong, change them more boring this led directly to the programming efficiency is very low, write! time program takes the actual running time is often
several times or several hundred times.
There is a joke about the machine language and Bill Gates, it is that Bill Gates took the needle poke on a single disc, the Windows to poke out! But if you really let go poke, not to mention Windows, even a a simple "Hello world" people have poked eye smoke!

Because machine language is too hard to write, so he developed a compiled language. Also known symbol assembler language, instead of the instruction mnemonic of the machine language opcodes, instead of the instruction address or operand address with a symbol (Symbol) or label (Label),. As is the use of assembly language mnemonics to write programs, specific binary machine language programming convenient to simplify the programming process to a certain extent. 0000 using, for example instead of LOAD, STORE used instead of 0001.

Even compared to machine language assembly language to enhance readability, but its essence is a machine-oriented language, writing the same difficulties, but also prone to error. I believe that many computer graduates so far are frightened of the school curriculum in the compilation of exercise programs.

Machine from Step 1.2: Process for

Machine-oriented language under normal circumstances is considered a "low-level language", in order to solve machine-oriented language problems, computer science predecessors and create a process-oriented language. Process-oriented language is considered a "high-level language", compared to machine-oriented language, process-oriented language itself is no longer concerned about the operation of the machine instructions, storage, etc., but to focus on how to solve specific step by step question, namely: the process of solving the problem, this process should also be reason for argument.

Compared to machine-oriented thinking, it is a process-oriented ideological leap, will relieve the programmer from the details of complex machine operation and running out, and focus instead on the specific problem to be solved; the process is no longer oriented language needs and specific binding machines, which have the portability and versatility; itself is also much easier to write and maintain process-oriented language. These factors add up, greatly reducing the burden on the programmer, improved programmer productivity, so as to promote the rapid development of the software industry.

A typical process-oriented language has: COBOL, FORTRAN, BASIC, C language.

1.3 for the first time the software crisis: structured programming

Fundamental reason is spaghetti code number of process-oriented language goto statement causes, greatly limits the size of the program. Structured programming (English: Structured programming), a programming paradigm. It uses a subroutine (function is a kind of subroutine), block codes, etc. for loop and while loop structure to replace the conventional goto. We are hoping to improve the clarity of the computer program, and the quality of the development time, and avoid write spaghetti code.

With the rapid development of computer hardware and application complexity is increasing, more and more large-scale software, the original program development approach has become increasingly unable to meet demand. The mid-1960s, the software crisis broke out for the first time, the typical manifestations of poor software quality, the project can not be completed on schedule, project cost overruns and other serious, serious accidents have occurred as a result of the software. For example, the United States (1963 http://en.wikipedia.org/wiki/Mariner_1 ) One sailor rocket launch failure accident, because one line of code FORTRAN error.

Software crisis, the most typical example is the operating system developed IBM's System / 360's. Fred Brooks (Frederick P. Brooks, Jr.) as a project manager, led more than 2,000 programmers worked day and night, spent a total of 5,000 people work for a year, nearly 100 million lines of source code to write the total investment $ 500 million, is America's "Manhattan" atomic bomb plans to invest a quarter. Despite such a huge investment, but it has repeatedly delayed the progress of the project, software quality is not guaranteed. "The Mythical Man Month," a book based on Brooks later this summary of project experience, has become the best-selling software engineering books.

To solve the problem, it has held two famous NATO meeting in years 1968, 1969, meeting formally created the "software crisis" word, and proposed specific solutions "software engineering." After Although the "software engineering" also made the field of software was seen as a silver bullet, but it turned out, software engineering, the same can not solve the software crisis.

At about the same time, "structured programming" as another scheme to solve the software crisis was brought up. Edsger Dijkstra in 1968 published the famous "GOTO harmful theory" of the paper, causing several years of debate, and the resulting structured programming methods. Meanwhile, the first structured programming language Pascal was born at this time, and quickly became popular.

The main features of structured programming is to abandon the goto statement, adopt a "top-down, stepwise refinement, modular," the guiding ideology. Structured programming design is a process that essentially oriented design, but the "top-down, stepwise refinement, modular" approach, the complexity of software controlled within a certain range, thereby reducing the whole the complexity of software development. Structured programming method has become a trend in the 1970s software development.

Research shows that the presence of the human brain in general human short-term memory can only remember 5-9 things, this is the famous 7 + - 2 principle. Structured programming is a process-oriented design improvements, making software development more in line 7 + -2 characteristics of the human mind.

1.4 Second software crisis: Object-Oriented Programming

Structured programming is popular to some extent eased the software crisis, however, did not last long, with the rapid development of hardware, more and more business needs

Complex programming and more extensive applications, the second software crisis soon arrived.

The second root cause of the crisis lies with the software productivity software is far behind the development of hardware and services, compared to the first software crisis is mainly reflected in the "complexity" and the second software crisis is mainly reflected in the "scalability "" maintainability "above. The traditional process-oriented (including structured programming) method has been increasingly unable to meet rapidly changing business requirements, and software fields eager to find new silver bullet to solve the software crisis, in this context, object-oriented thinking He began to pop up.

Object-oriented thinking is not appearing in the software after the second crisis, in early 1967, Simula language began brought up, but the second crisis to promote object-oriented software development. Object Oriented really became popular in the 1980s decade, mainly due to the credit of C ++, and later of Java, C # object-oriented pushed to new heights. Until now, object-oriented development has become a mainstream idea.

Although the beginning of object-oriented software is also used as the silver bullet to solve the crisis, but it turns out, and as software engineering, object-oriented is not a silver bullet, but rather a new approach to software only.

While not a silver bullet object-oriented software to solve the crisis, but compared and process-oriented, object-oriented thinking closer to the characteristics of the human mind, thinking more out of the machine, is a software design ideological leap.

Second, a detailed history of the development

2.1 Prior to 1940:

FIG: Huolieruisi type punch (pantograph), for the 1890 Census.
Huolieruisi type punch (Pantograph)

The first programming language earlier than the birth of the modern computer. First of all, this is a kind of coded language (en: code).

Jacquard loom in 1801 invention (also known as A Katy flower loom), the use of pot holes on punched cards to represent sewing loom arm movements in order to generate automated decorative pattern.

Ada Lovelace between 1842 and spent nine months in 1843, the Italian mathematician Luigi Menabrea memoir on Charles Babbage's Analytical Engine newly released machine translation is complete. She added details a method to calculate Bernoulli numbers using analytical engine behind the article, is partially historians believe is the world's first computer program.

Herman Hollerith observing the conductor of the passenger ticket stubs after a certain position holes of the way, realized that he could record the information encoded on punch cards, and then to encode and record 1890 found that the use of punch cards based on the demographic data.

The first is a computer code for their applications face design. In the first decade of the 20th century it is mainly used decimal arithmetic, and later it was discovered that not just with words, can also be used to represent digital logic. For example, once formulated Alonzo Church (formulaic) way of expressing λ calculus. Turing machine is a set of abstract operations after the method of marking the tape (tape-marking) machine (like the telephone company with the kind). Such Turing machine presented by way of a limited number (finite number), the program as the basis Von Neumann architecture computer data is stored in the same manner. But unlike λ calculus, Turing machine and the code is no way to become a cornerstone of high-level programming language, it is because its main purpose is to analyze the complexity of the algorithm.

Like many "first" in the history as the first modern programming language is also difficult to define. The very beginning because the hardware limitations defined language, punch cards 80 to allow the length of the row (column), but a few lines of the card must be used sequentially recorded. FORTRAN then incorporate some English words with the same keywords, such as "IF", "GOTO" (original words to go to), and "CONTINUE". After using the drum (magnetic drum) is used as a memory, a computer program must also represent insert (interleave) the drum rotation (rotation) of. And now comparison, it also allows the programming language to be more dependent on the hardware (hardware-dependent).

People must think on the part of the state before the "programming language" is established, based on the ability (power) and the degree of readability (human-readability) to determine the history of what a programming language is the language. Jacquard looms and Charles Babbage's Difference Engine produced (en: Difference Engine) all have a lot of restrictions in simple language describing the machine should run behavior. Also a kind of design is not restricted to human use domain-specific language (en: domain-specific language), is the use of punch cards to the player piano (en: player piano) on.

2.2 1940s:

The first to be confirmed by modern, computer power guide (electrically powered) is about to be created in the 1940s. Programmers under limited memory capacity and speed limitations, writing manual adjustment (hand tuned) through the assembly language program. And soon found that the use of assembly language written this way takes a lot of mental (intellectual effort) and error prone (error-prone).

Konrad Zuse published a paper he designed Plankalkül programming language in 1948 [1]. But the language has failed to achieve in his lifetime, and his original contribution was also isolated other developments.

Was developed during this period important languages ​​include:

  • 1943 - Plankalkül (Konrad Zuse)
  • 1943 - ENIAC coding system
  • 1949 - C-10

2.3 1950 and 1960:

There are three modern programming language was designed in the 1950s, which spawned three languages ​​until today is still widely adopted:

  • Fortran (1955), taken from the name "FORmula TRANslator" (Formula translator), invented by John Backus and others;
  • LISP, the name is taken from "LISt Processor" (enumeration processor), invented by John McCarthy and others;
  • COBOL, the name is taken from "COmmon Business Oriented Language" (common business oriented language), invented by the Short Range Committee was deeply affected by Grace Hopper.

Another milestone in the late 1950s by the ALGOL 60 report from the US and European computer scientists for the committee "new language algorithm" composed of publication (the name is taken from "ALGOrithmic Language" (algorithmic language)). The report reinforces that time many ideas about computing, and put forward innovative features on the two languages:

  • Nested block structure: meaningful code fragment into the group may be a block (block), instead of dispersed and turned into specific nomenclature program.
  • Range of vocabulary (lexical scoping): the block can not block external access by name, belonging to the block itself variables, procedures and functions.

Another innovation is the description of the way language:

Called Backus - Naur Form (BNF) notation of mathematical precision is used to describe the grammar of the language. After almost all of the programming language similar manner as described BNF syntax of the program context-free.
Algol after 60 pairs poses a particular impact on the design language, the language part of the soon to be widely adopted. In order to expand the development of the follow-up of a subset of Algol, we designed a program called Burroughs: large system (en Burroughs large systems) is.

The key idea of ​​the results generated by the continuation of Algol is ALGOL 68:

  • The syntax with semantics becomes more quadrature (orthogonal), anonymous course (routines), using advanced recursive input (higher-order) function (typing) systems.
  • The entire portion of the language and semantics are to be formally defined by the description language specifically designed for the Van Wijngaarden grammar, and not end portion of the context-free.

Algol 68 some of the less used to the language features (such as synchronization and parallel blocks), a complex system of grammatical shortcuts, as well as automatic type coercion (coercions), so that the implementers lack of interest, but also to Algol 68 was obtained hard to use (diffcult) reputation. Niklaus Wirth will simply leave the Design Council, an additional Pascal to develop a simpler language.

Was developed during this period important languages ​​include:

  • 1951 - Regional Assembly Language
  • 1952 - Autocode
  • 1954 - FORTRAN
  • 1954 - IPL (LISP pioneer)
  • 1955 - FLOW-MATIC (COBOL pioneer)
  • 1957 - COMTRAN (COBOL pioneer)
  • 1958 - LISP
  • 1958 - ALGOL 58
  • 1959 - FACT (COBOL pioneer)
  • 1959 - COBOL
  • 1962 - APL
  • 1962 - Page
  • 1962 - Shnobhola
  • 1963 - CPL (Herald of C)
  • 1964 - BASIC
  • 1964 - PL/I
  • 1967 - BCPL (Herald of C)

2.4 1967-1978: the establishment of a foundation paradigm

During the late 1970s to the late 1960s, the development of programming languages ​​also have significant results. Most of the major language paradigms are now used in the invention during this period:

  • Simula, in the late 1960s in a manner superset of Algol 60 and developed by Naijia Te Dahl, but also the first designed to support object-oriented programming language developed.
  • C, at between 1969 and 1973 developed by Bell Labs researcher Dennis Ritchie and Ken Thompson, is an early system programming (en: system programming) language.
  • Smalltalk, developed in the mid-1970s, is a completely from scratch (ground-up) design of object-oriented programming language.
  • Prolog, designed in 1972 by the Colmerauer, Roussel, and Kowalski, was the first logic programming language.
  • ML, in 1973, invented by Robin Milner, is a polymorphic (polymorphic) type system constructed based on Lisp, but also a pioneer in statically typed functional programming languages.

These languages ​​have their own play exhibited his family branch, the ancestors of today's most modern programming languages ​​can be traced back at least more than one of them.

In the 1960s and 1970s advantages of structured programming has also brought a lot of controversy, do not use GOTO especially in the process of program development. The dispute with the language itself is designed very relationship: Some languages ​​do not contain GOTO, which also forced programmers to write programs must be structured. Despite the controversy at the time quarreling days, but almost all programmers agree that even if the language itself provides the GOTO function, except for a few rare cases continue to use GOTO is kind of bad style program. The result is after generation programming language designers realized that the structured programming language controversy is really tedious and dazzling.

Was developed during this period important languages ​​include:

  • 1968 - Logo
  • 1970 - Pascal
  • 1970 - Forth
  • 1972 - C language
  • 1972 - Smalltalk
  • 1972 - Prolog
  • 1973 - ML
  • 1975 - Scheme
  • 1978 - SQL (at first just a query language, after expansion also have a program structure)

2.5 1980: enhanced module performance

Programming language in the 1980s compared with the previous even more powerful. C ++ incorporates object-oriented programming and systems. The US government standardize a system called the Ada programming language and is available to defense contractors. Japan and other places use a lot of money on the fifth-generation language using logic programming language structure were studied. Functional programming language community put the focus shifted to standardize ML and Lisp body. These activities are not in the development of a new paradigm, but the idea of ​​the last generations invention further forward.

However, there is a major new trend in language design, is to study the use of modules, or large-scale organized program units to develop large-scale systems. Modula, Ada, and ML all developed a modular system is worth noting that in the 1980s. Modular systems often employ generic programming stick structure: generic presence (generics being), nature (essence), parameterized modules (parameterized modules). (See polymorphism)

Although the new paradigm of the main programming language does not appear, many researchers still on the idea to expand the language and before they apply to the new content. For example, the language system with Emerald Argus and object-oriented language applied to the distributed system.

Programming language in the 1980s has also been progress in the achievement. Computer system architecture RISC hardware should be assumed to progress compiler design, as human beings rather than assembly language programmers. By means of a central processor to speed with the help of compiler technology has become increasingly active, RISC developments brought no small concern for the high-level language compiler technology.

These developments and language technology continues into the 1990s.

Was developed during this period important languages ​​include:

  • 1980 - There
  • 1983 - C ++ (just as there are categories of C)
  • 1984 - Common Lisp
  • 1985 - Eiffel
  • 1986 - Erlang
  • 1987 - Perl
  • 1988 - Tcl
  • 1989 - FL (Backus)

2.6 1990s: the Internet age

1990 did not see any major innovation, mostly before restructuring or changes in vision. Mainly driven philosophy is to enhance programmer productivity during this period. Many "Rapid Application Development" (RAD) language have emerged, most of these languages ​​have a corresponding integrated development environment, garbage collection mechanism, and most of the previous language of the derivatives language. This type of language is mostly object-oriented programming language that includes Object Pascal, Visual Basic, and C #. Java is a more conservative language, but also with the garbage collection mechanism. Compared with other similar language, but also by more concept note. The new scripting language is newer and better than the RAD language. This language is not derived directly from other languages, and more open to new syntax (liberal) and functional fit. While RAD scripting language than the language of more productive, but mostly because there will be a small program is relatively simple, but large-scale program using a scripting language is difficult to write and maintain concerns. Nevertheless, the shine on the network level scripting language or application.

Was developed during this period important languages ​​include:

  • 1990 - Haskell
  • 1991 - Python
  • 1991 - Visual Basic
  • 1993 - Ruby
  • 1993 - Lua
  • 1994 - CLOS (part of ANSI Common Lisp)
  • 1995 - Java
  • 1995 - Delphi (Object Pascal)
  • 1995 - JavaScript
  • 1995 - PHP
  • 1997 - REBOL
  • 1999 - D

Today's trend 2.7

Programming language evolution in the sustainable development of the academic and enterprise levels, some of the current trends included:

  • Increase the safety and reliability verification mechanism in language: additional stack checking, the flow of information (information flow) control, and static thread-safe.
  • Provide modular alternative mechanism: mixing (en: mixin), delegate (en: delegates), and the views of the guide.
  • Guide component (component-oriented) Software Development
  • Meta-programming, or access reflection abstract syntax tree (en: Abstract syntax tree)
  • More emphasis on distributed and mobile applications.
  • And integrated database, including XML and relational databases.
  • Support the use of Unicode programming, the source code is not limited ASCII character set, and can be used like a non-Latin scripts or extend punctuation.
  • XML (XUL, XAML) graphical user interface used.

Was developed during this period important languages ​​include:

  • 2001 - C#
  • 2001 - Visual Basic .NET
  • 2002 - F#
  • 2003 - Scala
  • 2003 - Factor
  • 2006 - Windows PowerShell
  • 2007 - Clojure
  • 2009 - Go
  • 2014 - Swift (programming language)

2.8 outstanding figures in the history of programming language development

  • John Backus, invented Fortran.
  • Alan Cooper, the development of Visual Basic.
  • Aizi Ge · Dijkstra, creating a framework for the correct use of the programming language (proper programming) of.
  • James Gosling, the development of Oak, the language for the Java pioneer.
  • Anders Hejlsberg, the development of Turbo Pascal, Delphi, and C #.
  • Grace Hopper developed Flow-Matic, the language COBOL had an impact.
  • Kenneth Iverson, the development of APL, and developed in collaboration with Roger Hui J.
  • Bill Joy, invented vi, early author of BSD Unix, SunOS and sponsor of the operating system later renamed Solaris.
  • Alan Kay, creating object-oriented programming language, Smalltalk and sponsors.
  • Brian Kernighan, Dennis Ritchie and co-author of the first book of the C programming language, but also the co-author of AWK and AMPL programming languages.
  • John McCarthy invented the LISP.
  • John von Neumann, the originator of the concept of the operating system.
  • Dennis Ritchie, invented C.
  • Bjarne Stroustrup developed C ++.
  • Ken Thompson invented Unix.
  • Niklaus Wirth, invented the Pascal and Modula.
  • Larry Wall, Perl and created a Perl 6.
  • Guido van Rossum, creating Python.

Guess you like

Origin www.cnblogs.com/randysun/p/11414453.html