Internet Windows Android

Adventik is a full-service digital agency. History of the C language Ci language

C ++ is a compiled general-purpose programming language that combines the properties of both high-level and low-level programming languages. Compared to its predecessor, the C programming language, most attention is paid to support for object-oriented and generic programming. The name C ++ programming language comes from the C programming language, in which the unary ++ operator denotes the increment of a variable.

The C ++ programming language is widely used for software development. Namely, the creation of various application programs, the development of operating systems, device drivers, as well as video games and much more. It was created in the early 1980s by Björn Stroustrup. He came up with a number of enhancements to the C programming language for his own use. those. it was not originally planned to create the C ++ programming language.

It supports such programming paradigms as procedural programming, object-oriented programming, generic programming, provides modularity, separate compilation, exception handling, data abstraction, declaration of types (classes) of objects, virtual functions.

The resulting language name comes from the C ++ unary postfix increment operator (increasing the value of a variable by one). The name C + was not used because it is a syntax error in C and, in addition, the name was taken over by another language. The language was also not named D because "it is an extension of C and does not attempt to fix problems by removing C elements."

Advantages of the language:

1. Scalability. In the C ++ language, programs are developed for a wide variety of platforms and systems.

2. Ability to work at a low level with memory, addresses, ports.

3. The ability to create generalized algorithms for different types of data, their specialization, and compilation calculations using templates.

4. Cross-platform. Compilers are available for a large number of platforms, in the C ++ language they develop programs for a wide variety of platforms and systems.

5. Efficiency. The language is designed to give the programmer maximum control over all aspects of the structure and order of program execution.

Disadvantages of the language:

1. The presence of many features that violate the principles of type safety leads to the fact that a subtle error can easily creep into C ++ programs.

2. Poor support for modularity. Connecting an external module interface via preprocessor insertion of a header file (#include) seriously slows down compilation when connecting a large number of modules.

3. The C ++ language is difficult to learn and to compile.

4. Some type conversions are not intuitive. In particular, operations on unsigned and signed numbers produce unsigned results.

5. Some consider the lack of a built-in garbage collection system to be a disadvantage of the C ++ language. On the other hand, C ++ has enough tools to almost eliminate the use of dangerous pointers; there are no fundamental problems in the implementation and use of garbage collection (at the level of libraries, not the language). The lack of built-in garbage collection allows the user to choose their own resource management strategy.

C ++ programming language

Last updated: 08/28/2017

The C ++ programming language is a high-level, statically typed, general-purpose compiled programming language that is suitable for building a wide variety of applications. Today C ++ is one of the most popular and widespread languages.

It has its roots in the C language, which was developed in 1969-1973 at Bell Labs by programmer Dennis Ritchie. In the early 1980s, Danish programmer Bjarne Stroustrup, who was at Bell Labs at the time, developed C ++ as an extension to the C language. In fact, in the beginning, C ++ simply supplemented the C language with some object-oriented programming capabilities. And so Stroustrup himself initially referred to it as "C with classes".

Subsequently, the new language began to gain popularity. New features were added to it that made it not just an addition to C, but a completely new programming language. As a result, "C with Classes" was renamed C ++. And from then on, both languages ​​began to develop independently of each other.

C ++ is a powerful language, inheriting rich memory capabilities from C. Therefore, C ++ often finds its application in system programming, in particular, when creating operating systems, drivers, various utilities, antiviruses, etc. By the way, Windows is mostly written in C ++. But the use of this language is not limited only to system programming. C ++ can be used in programs of any level where speed and performance are important. It is often used to create graphical applications, various application programs. It is also especially often used to create games with rich rich visualization. In addition, recently the mobile direction has been gaining momentum, where C ++ has also found its application. And even in web development, it is also possible to use C ++ to create web applications or some kind of helper services that serve web applications. In general, C ++ is a widely used language in which you can create almost any kind of program.

C ++ is a compiled language, which means that the compiler translates C ++ source code into an executable file that contains a set of machine instructions. But different platforms have their own characteristics, so the compiled programs cannot be simply transferred from one platform to another and run there. However, at the source code level, C ++ programs are mostly portable, unless some functions specific to the current OS are used. And the presence of compilers, libraries and development tools for almost all common platforms allows you to compile the same C ++ source code into applications for these platforms.

Unlike C, C ++ allows you to write applications in an object-oriented style, representing a program as a collection of interacting classes and objects. This makes it easy to build large applications.

The main stages of development

In 1979-80, Bjarne Stroustrup developed an extension to the C language - "C with classes". In 1983 the language was renamed C ++.

In 1985, the first commercial version of the C ++ language was released, as well as the first edition of the book "The C ++ Programming Language", which presented the first description of this language in the absence of an official standard.

In 1989, a new version of the C ++ 2.0 language was released, which included a number of new features. After that, the language developed relatively slowly until 2011. But at the same time, in 1998, the first attempt was made to standardize the language by the ISO (International Organization for Standartization). The first standard was named ISO / IEC 14882: 1998, or C ++ 98 for short. Later, in 2003, a new version of the C ++ 03 standard was published.

In 2011, the new C ++ 11 standard was published, which contained many additions and enriched the C ++ language with a large number of new functionalities. After that, in 2014, a small addition to the standard was released, also known as C ++ 14. And another key release of the language is slated for 2017.

Compilers and development environments

To develop C ++ programs, you need a compiler - it translates the C ++ source code into an executable file, which you can then run. But at the moment there are many different compilers. They can differ in various aspects, in particular, in the implementation of standards. A basic list of compilers for C ++ can be found on Wikipedia. It is recommended for development to choose those compilers that develop and implement all the latest standards. Thus, throughout this tutorial, the free g ++ compiler developed by the GNU Project will be used primarily.

You can also use IDEs such as Visual Studio, Netbeans, Eclipse, Qt, etc. to create programs.

What is the reason for this status of the C language? Historically, this language is inseparable from the Unix operating system, which is now experiencing its rebirth. The 60s were the era of the formation of operating systems and high-level programming languages. During that period, OS and compilers were independently developed for each type of computer, and often even their own programming languages ​​(remember, for example, PL / I). At the same time, the commonality of the problems arising from this has already become obvious. An attempt to create a universal mobile operating system was the answer to the realization of this commonality, and this required an equally universal and mobile programming language. C became such a language, and Unix became the first OS to be almost entirely written in a high-level language.

The close relationship with Unix gave C a testing ground that no other language had at the time. System programming tasks were considered the most challenging in the industry at the time. For the most part, they were so machine-dependent that many did not at all think of their solution differently than in assembler. High-level languages ​​were intended for application programming and only very limitedly implemented the functions necessary for system work, and often only for a certain type of machine.

The C language was created from the very beginning so that it was possible to write system tasks in it. The creators of C did not develop an abstract model of the language executor, but simply implemented in it those capabilities that were most needed in the practice of systems programming. These were, first of all, the means of direct work with memory, structural control structures and the modular organization of the program. And in fact nothing else was included in the language. Everything else was relegated to the runtime library. Therefore, ill-wishers sometimes speak of the C language as a structured assembler. But whatever they talked about, the approach turned out to be very successful. Thanks to him, a new level was reached in terms of the ratio of simplicity and language capabilities.

There is, however, another factor that has determined the success of the language. The creators very skillfully divided machine-dependent and independent properties in it. Thanks to this, most programs can be written universally - their performance does not depend on the architecture of the processor and memory. Few of the same hardware-dependent parts of the code can be localized in separate modules. And using the preprocessor, you can create modules that, when compiled on different platforms, will generate the corresponding machine-dependent code.

The syntax of the C language has caused a lot of controversy. The abbreviation techniques used in it can make the program completely unreadable if used excessively. But, as Dijkstra said, it is not the fault of the means that they are used illiterately. In fact, the syntax abbreviations proposed in C correspond to the most common stereotypical situations in practice. If abbreviations are considered idioms for expressive and compact representation of such situations, then the benefits of them become unconditional and obvious.

So, C emerged as a universal system programming language. But he did not stay within this framework. By the end of the 80s, the C language, having pushed Fortran as the leader, gained massive popularity among programmers all over the world and began to be used in a wide variety of applied tasks. The spread of Unix (and hence C) in the university environment, where a new generation of programmers was trained, played a significant role here.

Like all languages, C was gradually improved, but most of the improvements were not radical in nature. The most significant of them, perhaps, should be considered the introduction of a strict specification of the types of functions, which significantly increased the reliability of intermodular interaction in C. All such improvements were in 1989 enshrined in the ANSI standard, which still defines the C language.

But if everything is so cloudless, then why are all other languages ​​still in use, which supports their existence? The Achilles' heel of the C language was that it turned out to be too low-level for the tasks that were put on the agenda of the 90s. Moreover, this problem has two aspects. On the one hand, too low-level tools were built into the language - first of all, it is working with memory and address arithmetic. It is not for nothing that the change in the bit depth of processors is very painful for many C programs. On the other hand, C lacks high-level tools - abstract data types and objects, polymorphism, exception handling. As a result, in C programs, the technique of the task implementation often dominates over its content side.

The first attempts to correct these shortcomings began in the early 1980s. Even then, Bjarne Stroustrup at AT&T Bell Labs began to develop an extension of the C language under the code name. The development style was quite consistent with the spirit in which the C language itself was created - certain features were introduced into it in order to make the work of specific people and groups more convenient. The first commercial translator of a new language called C ++ appeared in 1983. It was a preprocessor that translated the program into C code. However, the release of Stroustrup's book in 1985 can be considered the actual birth of the language. It was from this moment that C ++ began to gain worldwide popularity.

The main innovation in C ++ is the class mechanism, which makes it possible to define and use new data types. The programmer describes the internal representation of a class object and a set of function-methods for accessing this representation. One of the cherished goals in the creation of C ++ was the desire to increase the percentage of reuse of already written code. The concept of classes suggested an inheritance mechanism for this. Inheritance allows you to create new (derived) classes with extended representation and modified methods without affecting the compiled code of the original (base) classes. At the same time, inheritance provides one of the mechanisms for implementing polymorphism - the basic concept of object-oriented programming, according to which the same code can be used to perform the same type of processing of different data types. Actually, polymorphism is also one of the methods of ensuring code reuse.

The introduction of classes does not exhaust all the innovations of the C ++ language. It implements a full-fledged structured exception handling mechanism, the absence of which in C made it much more difficult to write reliable programs, the templating mechanism is a sophisticated macro-generation mechanism deeply embedded in the language, opening another path to code reuse, and much more.

Thus, the general line of development of the language was aimed at expanding its capabilities by introducing new high-level constructions while maintaining as much as possible full compatibility with ANSI C. operations, so that the programmer actually stops working directly with memory and system-dependent entities. However, the language does not contain mechanisms forcing the developer to structure the program correctly, and the authors have not issued any systematic recommendations on the use of its rather sophisticated constructs. They did not take care of the timely creation of a standard class library that implements the most common data structures.

All this led to the fact that many developers were forced to explore the labyrinths of language semantics themselves and independently search for successfully working idioms. So, for example, at the first stage of the development of the language, many creators of class libraries tried to build a single class hierarchy with a common base class Object. This idea was borrowed from Smalltalk, one of the most famous object-oriented languages. However, it turned out to be completely unviable in C ++ - carefully thought-out class library hierarchies were inflexible, and the work of classes was not obvious. In order for the class libraries to be usable, they had to be shipped in source.

The appearance of the template classes completely refuted this direction of development. Inheritance began to be used only in cases where it was required to generate a specialized version of an existing class. Libraries began to be composed of separate classes and small, unrelated hierarchies. However, code reuse began to decrease along the way, since C ++ cannot polymorphically use classes from independent hierarchies. The widespread use of templates leads to an unacceptable increase in the amount of compiled code - let's not forget that templates are implemented using macro generation methods.

One of the gravest drawbacks of C ++, inherited from the C syntax, is that the compiler has access to a description of the internal structure of all used classes. As a consequence, changing the internal structure of the representation of a library class leads to the need to recompile all programs where this library is used. This greatly limits library developers in terms of their modernization, because when releasing a new version, they must maintain binary compatibility with the previous one. It is this problem that makes many experts believe that C ++ is unsuitable for running large and super-large projects.

And yet, despite the listed shortcomings and even the unavailability of the language standard (this is after more than fifteen years of use!), C ++ remains one of the most popular programming languages. Its strength is, first of all, in almost complete compatibility with the C language.Thanks to this, C ++ programmers have access to all the developments made in C. At the same time, C ++, even without the use of classes, introduces a number of such important additional features and conveniences to C that many use it simply as an improved C. ...

As far as the C ++ object model is concerned, as long as your program is not very large (hundreds of thousands of lines), it is quite possible to use it. The recent trend towards component software only strengthens the position of C ++. When developing individual components, the drawbacks of C ++ do not yet appear, and the linking of components into a working system is no longer at the language level, but at the operating system level.

In light of all that has been said, the outlook for C ++ does not look bleak. Although the monopoly on the market of programming languages ​​does not shine for him. Perhaps, we can only say with confidence that this language will not survive another modernization-extension. No wonder, when Java appeared, so close attention was paid to it. The language, which is close in syntax to C ++, and therefore seems familiar to many programmers, has been rid of the most egregious shortcomings of C ++, inherited from the 70s. However, Java does not seem to be up to the role assigned to it by some.

The special role of the C / C ++ languages ​​in modern programming makes it almost meaningless to provide specific addresses on the Internet where you can find materials on them. There are simply too many places like this. However, if you are interested in learning more about the evolution of C ++, then start with a short article http://citforum.syzran.ru/programming/prg96/76.shtml.

Alexander Sergeev, [email protected]
Article from BYTE magazine / Russia, March 2000

In order to clearly demonstrate the use of the described languages ​​in practice, we chose a problem in which it was required to enter a number of integers from standard input or from a file, and then output only odd ones, and in the reverse order. This is one of the simplest tasks that essentially requires working with arrays, loops, branching and I / O to solve it, and also allows you to demonstrate subroutine calls. At the same time, it is visible and easily perceived.

Listing 1.C

1 #include / * Connect input-output functions * / 2 3 void main (void) 4 (5 int М; / * Array of 10 integers, count from 0 * / 6 int N; 7 for (N = 0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>= 0; --N) / * Go through the array in reverse * / 12 if (M [N]% 2) / * order and print odd ones * / 13 printf ("% d \ n", M [N]); fourteen )

  • Line 3. In C / C ++, program execution always starts with the main function.
  • Lines 7 and 11. In the loop header, the initial setting, the continuation condition and the rule for recalculating the loop parameter are indicated separated by semicolons. Operations ++ and -/- - the most famous of the abbreviations of the C language, meaning the increment and decrement of a variable, that is, increasing and decreasing its value by one.
  • Line 8. Function scanf enters, according to the format specified by the first parameter, the values ​​of the variables whose addresses are specified by the remaining parameters. Here, the address where the value is entered is calculated using address arithmetic, to the address of the location of the array M an offset is added N elements. The same effect can be obtained by writing & M [N].
  • Line 12. Operation % calculates the remainder of the division. Operator condition if is considered fulfilled if the numerical value of the expression is nonzero.
  • Line 13. Function printf- printing by format works in the same way scanf, but instead of addresses, values ​​are passed to it to be displayed.
1 #include 2 3 template class Array 4 (5 public: Array (T Size = 1): M (new T), N (Size), n (0) () 6 Array (void) (delete M;) 7 T Count (void) const ( return n;) 8 T operator (int i) const (return M [i];) 9 void Add (T Data); 10 private: 11 T * M; // Address of allocated memory 12 int N, n; // N - allocated; n - used 13); 14 15 template void Array :: Add (T Data) 16 (if (N-n) // If all allocated 17 (int * P = new T; // space is used, allocate more than 18 for (int i = 0; i A; // Array of integers of variable size 28 while (1) // Endless loop 29 (int N; 30 cin >> N; // cin - standard input stream 31 if (cin.eof ()) break; // Exit the loop by end of file 32 A.Add (N); // Add the entered number to array 33) 34 for (int N = A.Count () - 1; N> = 0; --N) // Loop through the array 35 if ( A [N]% 2) 36 cout<, and frees up memory
  • Lines 3-13. The template class is declared Array with parameter T... It is a variable-sized array of objects like T... Of course, in our task there is no need to use a template class. However, we wanted to demonstrate how a polymorphic data structure is created in C ++ that can work with any type of element.
  • Line 5. Class constructor. It initializes the representation of the object. For example, in the field M the address of the memory block ordered by the operation is entered new T.
  • Line 8. An example of overloading an operation. Function operator will be called when square brackets appear to the right of the class object Array.
  • Line 9. This function is the main one in the implementation. It adds elements to the array, expanding it as needed. Since it is more complex than the others, its definition is taken from the class description. The functions described in the body of the class are implemented in C ++ not by calling, but by inline substitution. This speeds up the program, although it increases its size.
  • Lines 15-24. Function definition Array :: Add (T)(by the way, this is her full name).
  • Line 27. We create an object of type Array... Templet Aggau parameterized by type int.

C ++ (reads C-plus-plus) is a compiled, statically typed general-purpose programming language that can be used to create programs of any complexity.
For more than 20 years, this language has been in the top three most popular and demanded programming languages. (You can verify this by visiting the TIOBE website).
The language originated in the early 1980s, when Bell Labs employee Björn Stroustrup came up with a number of enhancements to the C language to suit his own needs.

Bjarne Stroustrup - the creator of the C ++ language

Stroustrup decided to complement the C language with the capabilities of the Simula language. C, the base language of the UNIX system on which Bell computers ran, is fast, feature-rich, and portable. Stroustrup added the ability to work with classes and objects to it. As a result, practical modeling problems turned out to be available for solving both in terms of development time (thanks to the use of Simula-like classes) and in terms of computation time (thanks to the speed of C).
This is how the language developer himself says about it:



In 1998, the first language standard, known as C ++ 98, was published by a standardization committee. C ++ continues to evolve to meet modern requirements. One of the groups that develop the C ++ language and send suggestions for improving it to the C ++ Standardization Committee is Boost, which is engaged in, among other things, improving the capabilities of the language by adding metaprogramming features to it. The last standard was released in 2017 and is called C ++ 17... The next standard will not be long in coming and will appear as expected in 2020.
Nobody owns the rights to the C ++ language, it is free. In March 2016, a working group WG21 C ++ was created in Russia. The group was organized to collect proposals for the C ++ standard, send them to the committee and defend them at general meetings of the International Organization for Standardization.
C ++ is a multi-paradigm language (from the word paradigm - the style of writing computer programs), which includes a wide range of different styles and technologies of programming. It is often referred to as an object-oriented language, but strictly speaking it is not. In the process of work, the developer gains absolute freedom in the choice of tools so that the problem solved with the help of one or another approach is solved as efficiently as possible. In other words, C ++ does not force the programmer to stick to only one style of program development (for example, object-oriented).
C ++ has a rich standard library that includes common containers and algorithms, I / O, regular expressions, multithreading support, and more. C ++ influenced many programming languages, including: Java, C #, D. Since C ++ belongs to the family of languages ​​based on the syntax of the C language, you can easily master other programming languages ​​of this family: JavaScript, PHP, Perl, Objective-C and many others. ... others, including the parent language itself - C. ()
During its existence, the C ++ language has entrenched stable myths that are easily refuted (see here: Part 1 and Part 2)

History of the language and the release of standards

1983

The creator of the language - Björn Stroustrup, Bell Labs employee, introduced an early version of C ++ (“C with Classes”)

1985

First commercial release of C ++, the language takes on its modern name

1986

First edition of The C ++ Programming Language, a C ++ book written by Bjorn Stroustrup

1998

The international standard for the C ++ language has been ratified: ISO / IEC 14882: 1998 "Standard for the C ++ Programming Language"

2003
2005

Library Technical Report 1 (TR1) released. While not officially part of the standard, the report described extensions to the standard library that should be included in the next version of the C ++ language.

2011

The release of a new standard - C ++ 11 or ISO / IEC 14882: 2011; the new standard included additions to the core of the language and an extension of the standard library, including most of TR1

2014

The release of the C ++ 14 standard ("International Standard ISO / IEC 14882: 2014 (E) Programming Language C ++"); C ++ 14 can be thought of as a small extension over C ++ 11, containing mostly bug fixes and minor improvements

2017

New standard released - C ++ 1z (C ++ 17). This standard has introduced many changes and additions. For example, the STD includes libraries of the C11 standard, a file system based on boost :: filesystem, most of the experimental TS I library.

2020

C ++ 20 is the unofficial name for the ISO / IEC standard for the C ++ programming language, which is expected after C ++ 17. Draft of the N4800 standard.

C ++ philosophy

In The Design and Evolution of C ++ (2007), Björne Stroustrup describes the principles that he followed in the design of C ++ (abbreviated):

  • Get a generic language with static data types, efficiency and portability of the C language.
  • Support many programming styles directly and comprehensively.
  • Give the programmer freedom of choice, even if it gives him the opportunity to choose the wrong one.
  • Maintain compatibility with C as much as possible, thereby making possible an easy transition from C programming.
  • Avoid confusion between C and C ++: any construct allowed in both languages ​​must mean the same in each of them and lead to the same program behavior.
  • Avoid features that are platform dependent or not generic.
  • Don't pay for what's not used — no language tool should degrade the performance of programs that don't use it.
  • Don't require an overly complicated programming environment.

C and C ++

The syntax of C ++ is inherited from the C language. Although, formally, one of the principles of C ++ remains the preservation of compatibility with the C language, in fact, the groups for the standardization of these languages ​​do not interact, and the changes they make not only do not correlate, but often fundamentally contradict each other ideologically. For example, the elements that the new C standards add to the core are elements of the standard library in the C ++ standard and are completely absent in the core, for example, dynamic arrays, arrays with fixed boundaries, parallel processing facilities. Stroustrup said it would be very beneficial to combine the development of the two languages, but it is unlikely to be possible for political reasons. So the practical compatibility between C and C ++ will gradually be lost.
In this example, depending on the compiler used, either “C ++” or “C” will be output:

Program 9.1

#include int main () (printf ("% s \ n", (sizeof ("a") == sizeof (char))? "C ++": "C"); return 0;)

This is due to the fact that character constants in C are of type int, and in C ++ they are of type char, but the sizes of these types are different.

Application lifecycle models

Life cycle software is a period of time that begins from the moment a decision is made about the need to create a software product and ends at the time of its complete retirement. This cycle is the process of building and developing software (software). There are several life cycle models.
Cascade model life cycle model was proposed in 1970 by Winston Royce. It provides for the sequential execution of all stages of the project in a strictly fixed order. The transition to the next stage means the complete completion of the work at the previous stage. The requirements identified at the stage of requirements formation are strictly documented in the form of a technical assignment and are recorded for the entire duration of the project development. Each stage ends with the release of a complete set of documentation, sufficient for development to be continued by another development team.
Project stages according to the waterfall model:

  1. Formation of requirements;
  2. Design;
  3. Implementation;
  4. Testing;
  5. Implementation;
  6. Operation and maintenance.

In a waterfall model, the transition from one phase of the project to another assumes the complete correctness of the result of the previous phase. In large projects, this is almost impossible to achieve. Therefore, this model is only suitable for developing a small project. (W. Royce himself did not adhere to this model and used an iterative model).
Iterative model
An alternative to the waterfall model is the iterative and incremental development (IID) model obtained from T. Gilb in the 70s. the name of the evolutionary model. The IID model involves breaking the project life cycle into a series of iterations, each of which resembles a "mini-project", including all development processes applied to create smaller pieces of functionality compared to the project as a whole. The goal of each iteration is to obtain a working version of the software system that includes the functionality defined by the integrated content of all previous and current iterations. The result of the final iteration contains all the required functionality of the product. Thus, with the completion of each iteration, the product receives an increment - an increment - to its capabilities, which, therefore, develop evolutionarily.


Various versions of the iterative approach are implemented in most modern development methodologies:

Development process - Rational Unified Process (RUP)

Rational Unified Process (RUP)(Lean Unified Process) is a software development methodology maintained by Rational Software (IBM). The methodology provides recommendations for all stages of development: from business modeling to testing and commissioning of the finished program. The Unified Modeling Language (UML) is used as the modeling language.
The complete product development lifecycle consists of four phases, each of which includes one or more iterations.

  • Initial stage (Inception)
  • Determine the scope of the project and the amount of resources required. The basic requirements, limitations and key functionality of the product are identified. Risks are assessed. Action planning. At the end of the initial phase, the achievement of the Lifecycle Objective Milestone is assessed, which presupposes an agreement of the stakeholders on the continuation of the project.

  • Elaboration
  • Documenting requirements. Design, implementation and testing of an executable architecture. Clarification of terms and cost. Reducing major risks. Successful completion of the development phase means reaching the Lifecycle Architecture Milestone.

  • Construction
  • In the Build phase, most of the functionality of the product is implemented: the design of the application is complete, the source code is written. The Build phase ends with the first external release of the system and an Initial Operational Capability milestone.

  • Transition
  • In the "Implementation" phase, the final version of the product is created and transferred from the developer to the customer. This includes a beta testing program, user training, and product quality determination. If the quality does not meet the expectations of users or the criteria set in the Start phase, the Implementation phase is repeated again. Meeting all goals means reaching the Product Release milestone and completing the full development cycle.



"Information technology. System and software engineering. Software Life Cycle Processes ”. This standard was adopted by the Federal Agency for Technical Regulation and Metrology of the Russian Federation and is similar to the international standard ISO / IEC 12207: 2008. This standard establishes a general framework for software life cycle processes that can be guided in the software industry. The standard does not offer a specific life cycle model. Its provisions are common to any life cycle models, methods and technologies for creating software. It describes the structure of life cycle processes without specifying how to implement or perform the activities and tasks included in these processes.

Lesson presentation
Message topics
  • Free Software Foundation (FSF)
  • Free software licenses
  • FreeSoftware and Open Source
  • History of the development of programming languages
  • The history of C. C and C ++
  • History
  • C ++ criticism
  • UNIX history
  • Spiral software life cycle model
  • UML (English Unified Modeling Language)
  • Microsoft Solutions Framework
  • IDE for C / C ++ programming on Windows
  • C / C ++ compilers
  • Creating a console application on Windows
Questions
  1. Why isn't the waterfall model of software development applied to large projects?
  2. What is the difference between waterfall and iterative development models?
  3. List the stages of software development in the Rational Unified Process (RUP) methodology

Why C ++

C ++ is currently considered the dominant language used to develop commercial software products. In recent years, this dominance has fluctuated slightly due to similar claims from a programming language such as Java, but the pendulum of public opinion has swung in the other direction, and many programmers who abandoned C ++ for Java have recently been quick to return to his old affection. In any case, these two languages ​​are so similar that by learning one of them, you automatically master 90% of the other.

C # is a new language developed by Microsoft for the networking platform. Essentially, C # is a kind of C ++, and despite a number of fundamental differences, the C # and C ++ languages ​​coincide by about 90%. It will probably take a long time before C # becomes a serious competitor to C ++; but even if this does happen, knowing the C ++ language will prove to be a significant advantage.

C ++ is a general-purpose programming language. Its natural field of application is system programming, understood in the broad sense of the word. In addition, C ++ has been successfully used in many areas of the application that go far beyond the specified scope. C ++ implementations are now found on all machines, from the humblest microcomputer to the largest supercomputer, to virtually all operating systems.

The emergence and evolution of the C ++ language

Bjarne Stroustrup is the developer of the C ++ language and the creator of the first translator. He is a Fellow at the AT&T Bell Laboratories Research Computing Center in Murray Hill, New Jersey, USA. He received his MSc in Mathematics and Computer Science from the University of Aarus (Denmark) and his PhD in Computer Science from the University of Cambridge (England). He specializes in distributed systems, operating systems, modeling and programming. Together with M. A. Ellis, he is the author of the complete guide to the C ++ language, The C ++ Handbook with Notes.

Of course, C ++ owes a lot to the C language, which is preserved as a subset of it. All the low-level tools inherent in C are also preserved, designed to solve the most urgent problems of system programming. C, in turn, owes a lot to its predecessor, the BCPL language. The BCPL comment has been restored to C ++. Another source of inspiration was the SIMULA-67 language; it was from this that the concept of classes was borrowed (along with derived classes and virtual functions). C ++ 's ability to overload operators and the freedom to place descriptions wherever an operator may appear are reminiscent of the Algol-68 language.

Earlier versions of the language, called "C with Classes", have been in use since 1980. This language arose because the author needed to write interrupt-driven simulators. The SIMULA-67 language is ideal for this, if efficiency is not considered. The C with Classes language was used for large modeling tasks. Then the possibility of writing programs on it, for which time and memory resources are critical, were subjected to a rigorous test. This language lacked overloading of operations, references, virtual functions, and many other features. For the first time, C ++ went beyond the research group in which the author worked in July 1983, but then many C ++ features had not yet been developed.

The name C ++ (si plus plus), was coined by Rick Mascitti in the summer of 1983. This name reflects the evolutionary nature of changes in the language C. The designation ++ refers to the C augmentation operation. The slightly shorter name C + is a syntax error. In addition, it has already been used as the name of a completely different language. Connoisseurs of C semantics find that C ++ is worse than ++ C. The language was not named D, because it is an extension of C, and it does not attempt to solve any problems at the expense of abandoning the capabilities of C. Another interesting interpretation of the name C ++ can be found in the appendix to.

Initially, C ++ was conceived so that the author and his friends did not need to program in assembly, C, or other modern high-level languages. Its main purpose is to simplify and make the programming process more pleasant for the individual programmer. Until recently, there was no paper C ++ development plan. Design, implementation and documentation went in parallel. There has never been a "C ++ Project" or a "C ++ Development Committee". Therefore, the language has evolved and continues to evolve so as to overcome all the problems faced by users. The author's discussions of all problems with his friends and colleagues also serve as impulses for development.

Since the first edition of this book was published, the C ++ language has undergone significant changes and refinements. It mainly deals with disambiguation on overloading, binding and memory management. At the same time, minor changes were made to increase compatibility with the C language. Several generalizations and significant extensions were also introduced, such as: multiple inheritance, member functions with static and const specifications, protected members, type templates and handling special situations. All these extensions and improvements were aimed at making C ++ a language in which libraries can be created and used. All changes are described in.

Other extensions introduced between 1985 and 1991 (such as multiple inheritance, static member functions, and pure virtual functions) are more of a generalization of C ++ programming experience than they were gleaned from other languages.

The extensions of the language made over these six years were primarily aimed at increasing the expressiveness of C ++ as a data abstraction language and object-oriented programming in general, and as a means for creating high-quality libraries with user-defined data types in particular.

Around 1987, it became apparent that work to standardize C ++ was imminent and that the foundation for it should begin immediately.

AT&T Bell Laboratories has been a major contributor to this work. About one hundred representatives from about 20 organizations reviewed and commented on what has become the current version of the ANSI standardization reference manual and source material. C ++. Finally, on the initiative of Hewlett-Packard, the X3J16 committee was formed within ANSI in December 1989. The work on C ++ standardization in ANSI (American Standard) is expected to be part of the work on standardization by ISO (International Organization for Standardization).

C ++ evolved concurrently with the development of some fundamental classes.