Perkembangan bahasa c. §1 Maklumat am tentang bahasa. Peringkat-peringkat reka bentuk program. Model kitaran hayat aplikasi. Model Kitar Hayat Aplikasi

C++ ialah bahasa pengaturcaraan tersusun tujuan umum yang menggabungkan sifat-sifat kedua-dua bahasa pengaturcaraan peringkat tinggi dan rendah. Berbanding dengan pendahulunya, bahasa pengaturcaraan C, perhatian terbesar diberikan kepada menyokong pengaturcaraan berorientasikan objek dan generik. Nama "bahasa pengaturcaraan C++" berasal daripada bahasa pengaturcaraan C, di mana operator unary ++ menandakan kenaikan pembolehubah.

Bahasa pengaturcaraan C++ digunakan secara meluas untuk pembangunan perisian. Iaitu, penciptaan pelbagai program aplikasi, pembangunan sistem pengendalian, pemacu peranti, serta permainan video dan banyak lagi. Ia dicipta pada awal 1980-an oleh Björn Stroustrup. Dia datang dengan beberapa penambahbaikan kepada bahasa pengaturcaraan C untuk keperluannya sendiri. mereka. Pada mulanya tiada rancangan untuk mencipta bahasa pengaturcaraan C++.

Ia menyokong paradigma pengaturcaraan seperti pengaturcaraan prosedur, pengaturcaraan berorientasikan objek, pengaturcaraan generik, menyediakan modulariti, kompilasi berasingan, pengendalian pengecualian, abstraksi data, pengisytiharan jenis objek (kelas), fungsi maya.

Nama bahasa yang terhasil berasal daripada operator kenaikan postfix unary C++ (meningkatkan nilai pembolehubah sebanyak satu). Nama C+ tidak digunakan kerana ia adalah ralat sintaks dalam C dan juga kerana nama itu diduduki oleh bahasa lain. Bahasa itu juga tidak dinamakan D kerana ia "adalah lanjutan daripada C dan tidak cuba menyelesaikan masalah dengan mengalih keluar elemen C."

Kelebihan bahasa:

1. Kebolehskalaan. Program dibangunkan dalam C++ untuk pelbagai jenis platform dan sistem.

2. Keupayaan untuk bekerja pada tahap rendah dengan memori, alamat, port.

3. Keupayaan untuk mencipta algoritma umum untuk jenis data yang berbeza, pengkhususannya dan pengiraan pada peringkat penyusunan menggunakan templat.

4. Merentas platform. Penyusun tersedia untuk sejumlah besar platform, dan program dibangunkan dalam C++ untuk pelbagai jenis platform dan sistem.

5. Kecekapan. Bahasa ini direka untuk memberikan kawalan maksimum kepada pengaturcara ke atas semua aspek struktur program dan susunan pelaksanaan.

Kelemahan bahasa:

1. Kehadiran banyak ciri yang melanggar prinsip keselamatan jenis membawa kepada fakta bahawa ralat halus boleh dengan mudah merayap ke dalam program C++.

2. Sokongan yang lemah untuk modulariti. Menyambung antara muka modul luaran melalui sisipan prapemproses bagi fail pengepala (#include) melambatkan penyusunan apabila menyambungkan sejumlah besar modul.

3. Bahasa C++ sukar dipelajari dan disusun.

4. Sesetengah jenis penukaran adalah tidak intuitif. Khususnya, operasi pada nombor yang tidak ditandatangani dan ditandatangani menghasilkan keputusan yang tidak ditandatangani.

5. Sesetengah orang menganggap kekurangan sistem pengumpulan sampah terbina dalam sebagai kelemahan bahasa C++. Sebaliknya, C++ mempunyai alat yang mencukupi untuk hampir menghapuskan penggunaan penunjuk berbahaya; tiada masalah asas dalam pelaksanaan dan penggunaan kutipan sampah (di peringkat perpustakaan, bukan peringkat bahasa). Ketiadaan kutipan sampah terbina dalam membolehkan pengguna memilih strategi pengurusan sumber mereka sendiri.

Apakah sebab status bahasa C ini? Dari segi sejarah, bahasa ini tidak dapat dipisahkan daripada sistem pengendalian Unix, yang kini mengalami kelahiran semula. Tahun 60-an adalah era pembentukan sistem pengendalian dan bahasa pengaturcaraan peringkat tinggi. Pada masa itu, OS dan penyusun dibangunkan secara bebas untuk setiap jenis komputer, dan sering juga bahasa pengaturcaraan mereka sendiri (ingat, sebagai contoh, PL/I). Pada masa yang sama, persamaan masalah yang timbul dalam kes ini telah menjadi jelas. Sambutan terhadap kesedaran tentang persamaan ini adalah percubaan untuk mencipta sistem pengendalian mudah alih universal, dan ini memerlukan bahasa pengaturcaraan universal dan mudah alih yang sama. C menjadi bahasa sedemikian, dan Unix menjadi OS pertama yang ditulis hampir keseluruhannya dalam bahasa peringkat tinggi.

Hubungan rapat dengan Unix memberikan bahasa C tempat ujian yang tiada bahasa lain pada masa itu. Masalah pengaturcaraan sistem dianggap paling sukar dalam industri pada masa itu. Untuk sebahagian besar, mereka sangat bergantung kepada mesin sehingga ramai yang tidak terfikir untuk menyelesaikannya secara berbeza daripada dalam pemasang. Bahasa peringkat tinggi bertujuan untuk pengaturcaraan aplikasi dan hanya melaksanakan fungsi yang sangat terhad yang diperlukan untuk kerja sistem, selalunya hanya untuk jenis mesin tertentu.

Sejak awal lagi, bahasa C dicipta supaya tugasan sistem boleh ditulis di dalamnya. Pencipta C tidak membangunkan model abstrak pelaksana bahasa, tetapi hanya melaksanakan di dalamnya keupayaan yang paling diperlukan dalam amalan pengaturcaraan sistem. Ini adalah terutamanya cara kerja langsung dengan ingatan, struktur kawalan struktur dan organisasi modular program. Dan pada dasarnya tiada apa-apa lagi yang dimasukkan dalam bahasa. Segala-galanya telah dimasukkan ke dalam pustaka runtime. Oleh itu, pengkritik kadangkala merujuk kepada bahasa C sebagai penghimpun struktur. Tetapi tidak kira apa yang mereka katakan, pendekatan itu ternyata sangat berjaya. Terima kasih kepadanya, tahap baru dicapai dari segi kesederhanaan dan keupayaan bahasa.

Walau bagaimanapun, terdapat satu lagi faktor yang menentukan kejayaan bahasa tersebut. Pencipta dengan sangat mahir mengasingkan sifat bergantung pada mesin dan sifat bebas di dalamnya. Terima kasih kepada ini, kebanyakan program boleh ditulis secara universal - prestasi mereka tidak bergantung pada pemproses dan seni bina ingatan. Beberapa bahagian kod yang bergantung kepada perkakasan boleh disetempatkan dalam modul berasingan. Dan menggunakan prapemproses, anda boleh mencipta modul yang, apabila disusun pada platform yang berbeza, akan menghasilkan kod yang bergantung kepada mesin yang sepadan.

Sintaks bahasa C telah menimbulkan banyak kontroversi. Teknik pemendekan yang digunakan di dalamnya, jika digunakan secara berlebihan, boleh menyebabkan program tidak boleh dibaca sepenuhnya. Tetapi, seperti yang dikatakan Dijkstra, cara tidak boleh dipersalahkan kerana fakta bahawa ia digunakan secara buta huruf. Malah, singkatan sintaks yang dicadangkan dalam C sepadan dengan situasi stereotaip yang paling biasa dalam amalan. Jika kita menganggap singkatan sebagai simpulan bahasa untuk pembentangan ekspresif dan padat situasi sedemikian, maka faedahnya menjadi tanpa syarat dan jelas.

Jadi, C muncul sebagai bahasa pengaturcaraan sistem universal. Tetapi dia tidak kekal dalam had ini. Menjelang penghujung tahun 80-an, bahasa C, setelah menolak Fortran daripada kedudukan kepimpinannya, mendapat populariti besar-besaran di kalangan pengaturcara di seluruh dunia dan mula digunakan dalam pelbagai jenis tugas yang digunakan. Peranan penting di sini dimainkan oleh penyebaran Unix (dan oleh itu C) dalam persekitaran universiti, di mana generasi baru pengaturcara dilatih.

Seperti semua bahasa, C telah dipertingkatkan secara beransur-ansur, tetapi kebanyakan penambahbaikan tidak radikal. Yang paling penting daripada ini, mungkin, harus dipertimbangkan pengenalan spesifikasi ketat jenis fungsi, yang meningkatkan dengan ketara kebolehpercayaan komunikasi antara modul dalam C. Semua penambahbaikan tersebut telah termaktub pada tahun 1989 dalam piawaian ANSI, yang masih mentakrifkan bahasa C.

Tetapi jika semuanya begitu cerah, maka mengapa semua bahasa lain terus digunakan, yang menyokong kewujudan mereka? Tumit Achilles bahasa C ialah ia ternyata terlalu rendah untuk tugas-tugas yang diletakkan dalam agenda pada tahun 90-an. Selain itu, masalah ini mempunyai dua aspek. Di satu pihak, alatan terlalu rendah telah dibina ke dalam bahasa - terutamanya pengurusan memori dan aritmetik alamat. Ia bukan tanpa sebab bahawa menukar kapasiti bit pemproses mempunyai kesan yang sangat menyakitkan pada banyak program C. Sebaliknya, C tidak mempunyai ciri peringkat tinggi - jenis data dan objek abstrak, polimorfisme, pengendalian pengecualian. Akibatnya, dalam program C, teknik melaksanakan tugas sering mendominasi kandungannya.

Percubaan pertama untuk membetulkan kelemahan ini mula dibuat pada awal 80-an. Walaupun begitu, Bjarne Stroustrup di AT&T Bell Labs mula membangunkan lanjutan bahasa C di bawah nama kod. Gaya pembangunan agak konsisten dengan semangat di mana bahasa C itu sendiri dicipta - ciri-ciri tertentu telah diperkenalkan ke dalamnya untuk menjadikan kerja orang dan kumpulan tertentu lebih mudah. Penterjemah komersial pertama bahasa baharu itu, yang dipanggil C++, muncul pada tahun 1983. Ia adalah prapemproses yang menterjemah program ke dalam kod C. Walau bagaimanapun, kelahiran sebenar bahasa itu boleh dianggap sebagai penerbitan buku Stroustrup pada tahun 1985. Dari saat inilah C++ mula mendapat populariti di seluruh dunia.

Inovasi utama C++ ialah mekanisme kelas, yang memungkinkan untuk menentukan dan menggunakan jenis data baharu. Pengaturcara menerangkan perwakilan dalaman objek kelas dan satu set kaedah fungsi untuk mengakses perwakilan ini. Salah satu matlamat yang dihargai apabila mencipta C++ ialah keinginan untuk meningkatkan peratusan penggunaan semula kod yang sudah ditulis. Konsep kelas menawarkan mekanisme pewarisan untuk ini. Warisan membolehkan anda mencipta kelas baharu (berasal) dengan perwakilan lanjutan dan kaedah yang diubah suai, tanpa menjejaskan kod terkumpul kelas asal (asas). Pada masa yang sama, warisan menyediakan salah satu mekanisme untuk melaksanakan polimorfisme - konsep asas pengaturcaraan berorientasikan objek, mengikut mana kod yang sama boleh digunakan untuk melaksanakan jenis pemprosesan yang sama bagi jenis data yang berbeza. Sebenarnya, polimorfisme juga merupakan salah satu kaedah untuk memastikan penggunaan semula kod.

Pengenalan kelas tidak meletihkan semua inovasi bahasa C++. Ia melaksanakan mekanisme pengendalian pengecualian berstruktur lengkap, ketiadaannya dalam C menjadikannya lebih sukar untuk menulis program yang boleh dipercayai, mekanisme templat - mekanisme penjanaan makro yang canggih yang terbina dalam bahasa, membuka laluan lain untuk penggunaan semula kod, dan banyak lagi.

Oleh itu, garis umum perkembangan bahasa itu bertujuan untuk mengembangkan keupayaannya dengan memperkenalkan konstruk peringkat tinggi baharu sambil mengekalkan keserasian sepenuhnya dengan ANSI C yang mungkin. Sudah tentu, perjuangan untuk meningkatkan tahap bahasa itu juga diteruskan. hadapan kedua - kelas yang sama memungkinkan, dengan pendekatan yang cekap, untuk menyembunyikan operasi peringkat rendah, supaya pengaturcara sebenarnya berhenti bekerja secara langsung dengan memori dan entiti yang bergantung kepada sistem. Walau bagaimanapun, bahasa itu tidak mengandungi mekanisme yang memaksa pembangun untuk menstruktur program dengan betul, dan pengarang tidak mengeluarkan sebarang cadangan sistematik untuk menggunakan binaannya yang agak canggih. Mereka juga tidak mengambil berat tepat pada masanya untuk mencipta perpustakaan kelas standard yang melaksanakan struktur data yang paling kerap ditemui.

Semua ini membawa kepada fakta bahawa banyak pembangun terpaksa meneroka labirin semantik linguistik sendiri dan secara bebas mencari simpulan bahasa yang berjaya. Sebagai contoh, pada peringkat pertama pembangunan bahasa, ramai pencipta perpustakaan kelas berusaha untuk membina satu hierarki kelas dengan Objek kelas asas yang sama. Idea ini dipinjam daripada Smalltalk, salah satu bahasa berorientasikan objek yang paling terkenal. Walau bagaimanapun, ia ternyata tidak berdaya maju sepenuhnya dalam C++ - hierarki perpustakaan kelas yang direka dengan teliti ternyata tidak fleksibel, dan kerja kelas tidak jelas. Agar perpustakaan kelas boleh digunakan, ia perlu dibekalkan dalam kod sumber.

Kemunculan kelas templat menafikan sepenuhnya arah pembangunan ini. Warisan mula digunakan hanya dalam kes di mana perlu untuk menjana versi khusus kelas sedia ada. Perpustakaan mula terdiri daripada kelas berasingan dan hierarki kecil yang tidak berkaitan. Walau bagaimanapun, di sepanjang laluan ini, penggunaan semula kod mula merosot, kerana dalam C++ penggunaan polimorfik kelas daripada hierarki bebas adalah mustahil. Penggunaan templat yang meluas membawa kepada peningkatan yang tidak boleh diterima dalam jumlah kod yang disusun - jangan lupa, templat dilaksanakan menggunakan kaedah penjanaan makro.

Salah satu kelemahan C++ yang paling serius, yang diwarisi daripada sintaks C, ialah keupayaan pengkompil untuk menerangkan struktur dalaman semua kelas yang digunakan. Akibatnya, mengubah struktur dalaman perwakilan kelas perpustakaan membawa kepada keperluan untuk menyusun semula semua program di mana perpustakaan ini digunakan. Ini sangat mengehadkan pembangun perpustakaan daripada menaik tarafnya, kerana apabila mengeluarkan versi baharu, mereka mesti mengekalkan keserasian binari dengan versi sebelumnya. Masalah inilah yang membuatkan ramai pakar percaya bahawa C++ tidak sesuai untuk menjalankan projek yang besar dan sangat besar.

Namun, walaupun terdapat kekurangan yang disenaraikan dan juga ketiadaan standard bahasa (ini adalah selepas penggunaan lebih daripada lima belas tahun!), C++ kekal sebagai salah satu bahasa pengaturcaraan yang paling popular. Kekuatannya terletak terutamanya pada keserasiannya yang hampir lengkap dengan bahasa C. Terima kasih kepada ini, pengaturcara C++ mempunyai akses kepada semua perkembangan yang dibuat dalam C. Pada masa yang sama, C++, walaupun tanpa menggunakan kelas, membawa kepada C beberapa ciri tambahan yang penting dan kemudahan yang ramai menggunakannya hanya sebagai C yang dipertingkatkan.

Bagi model objek C++, selagi program anda tidak menjadi sangat besar (ratusan ribu baris), ia agak boleh digunakan. Trend terkini ke arah perisian berasaskan komponen hanya mengukuhkan kedudukan C++. Apabila membangunkan komponen individu, kekurangan C++ belum muncul, dan pemautan komponen ke dalam sistem kerja tidak lagi dilakukan pada peringkat bahasa, tetapi pada peringkat sistem pengendalian.

Berdasarkan semua yang telah diperkatakan, prospek untuk C++ tidak kelihatan suram. Walaupun dia tidak akan mempunyai monopoli ke atas pasaran bahasa pengaturcaraan. Mungkin satu-satunya perkara yang boleh kita katakan dengan pasti ialah bahasa ini tidak akan bertahan dalam satu lagi pengembangan pemodenan. Bukan tanpa alasan apabila Java muncul, ia mendapat perhatian yang begitu dekat. Bahasa itu, yang hampir dalam sintaks dengan C++, dan oleh itu nampaknya biasa kepada ramai pengaturcara, telah terlepas daripada kekurangan C++ yang paling ketara, yang diwarisi dari tahun 70-an. Walau bagaimanapun, Java nampaknya tidak memenuhi peranan yang diberikan oleh sesetengah orang kepadanya.

Peranan istimewa bahasa C/C++ dalam pengaturcaraan moden menjadikannya tidak bermakna untuk menyediakan alamat khusus di Internet di mana anda boleh mencari bahan padanya. Terdapat terlalu banyak tempat seperti ini. Walau bagaimanapun, jika anda berminat untuk mengetahui lebih lanjut tentang evolusi C++, mulakan dengan artikel pendek ini http://citforum.syzran.ru/programming/prg96/76.shtml.

Alexander Sergeev, [e-mel dilindungi]
Artikel daripada majalah BYTE/Russia, Mac 2000

Untuk menunjukkan dengan jelas penggunaan bahasa yang diterangkan dalam amalan, kami memilih tugas di mana ia diperlukan untuk memasukkan satu siri integer daripada input standard atau dari fail, dan kemudian mengeluarkan hanya yang ganjil, dalam susunan terbalik . Ini adalah salah satu masalah paling mudah yang pada asasnya memerlukan kerja dengan tatasusunan, gelung, percabangan dan I/O untuk menyelesaikannya, dan juga membolehkan anda menunjukkan panggilan subrutin. Pada masa yang sama, ia kelihatan dan mudah dilihat.

Penyenaraian 1. C

1 #termasuk /* Sambungkan fungsi I/O */ 2 3 lompang utama(kosong) 4 ( 5 int M; /* Tatasusunan 10 integer, dikira dari 0 */ 6 int N; 7 untuk (N=0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>=0; --N) /* Kami melalui tatasusunan secara terbalik */ 12 jika (M[N]%2) /* tertib dan cetak yang ganjil */ 13 printf("%d\n", M[N]); 14 )

  • Baris 3. Dalam C/C++, pelaksanaan program sentiasa bermula dengan fungsi utama.
  • Baris 7 dan 11. Dalam pengepala gelung, tetapan awal, keadaan kesinambungan dan peraturan untuk mengira semula parameter gelung ditunjukkan, dipisahkan dengan koma bertitik. operasi ++ Dan -/- - singkatan bahasa C yang paling terkenal, yang bermaksud kenaikan dan pengurangan pembolehubah, iaitu peningkatan dan penurunan nilainya sebanyak satu.
  • Baris 8. Fungsi scanf masuk, mengikut format yang ditentukan oleh parameter pertama, nilai pembolehubah yang alamatnya ditentukan oleh parameter yang tinggal. Di sini alamat di mana nilai dimasukkan dikira menggunakan aritmetik alamat ke alamat lokasi tatasusunan M offset ditambah dengan N elemen. Kesan yang sama boleh dicapai dengan menulis &M[N].
  • Baris 12. Operasi % mengira baki pembahagian. Keadaan operator jika dianggap dilaksanakan jika nilai berangka ungkapan berbeza daripada sifar.
  • Baris 13. Fungsi printf- percetakan mengikut format berfungsi dengan cara yang sama scanf, tetapi bukannya alamat ia dihantar nilai untuk menjadi output.
1 #termasuk templat 2 3 kelas Tatasusunan 4 ( 5 awam: Tatasusunan (Saiz T=1) : M (T baharu), N(Saiz), n(0) () 6 Tatasusunan (kosong) ( padam M;) 7 T Kiraan (kosong) const ( return n; ) 8 T operator (int i) const ( return M[i]; ) 9 void Add (T Data); 10 private: 11 T* M; // Alamat memori teragih 12 int N, n; // N - diedarkan; n - digunakan 13); 14 15 templat batal Array ::Tambah(T Data) 16 ( jika (N-n) // Jika semua yang diperuntukkan 17 digunakan ( int* P = T baharu; // ruang, edarkan lebih 18 untuk (int i=0; i A; // Tatasusunan integer saiz berubah 28 manakala (1) // Gelung tak terhingga 29 ( int N; 30 cin >> N; // cin - aliran input standard 31 jika (cin.eof()) putus; // Keluar dari gelung pada akhir fail 32 A.Add(N); // Tambah nombor yang dimasukkan pada tatasusunan 33 ) 34 untuk (int N=A.Count()-1; N>=0; --N) // Berjalan melalui tatasusunan 35 jika ( A[N]%2) 36 cout<, dan mengosongkan ingatan
  • Baris 3-13. Kelas templat diisytiharkan Susunan dengan parameter T. Ia ialah tatasusunan objek jenis bersaiz berubah-ubah T. Sudah tentu, dalam tugas kami tidak perlu menggunakan kelas templat. Walau bagaimanapun, kami ingin menunjukkan cara C++ boleh mencipta struktur data polimorfik yang boleh berfungsi dengan sebarang jenis elemen.
  • Baris 5. Pembina kelas. Ia memulakan perwakilan objek. Sebagai contoh, di lapangan M alamat blok memori yang dipesan oleh operasi dimasukkan T baru.
  • Baris 8. Contoh lebihan beban operasi. Fungsi pengendali akan dipanggil apabila kurungan segi empat sama muncul di sebelah kanan objek kelas Susunan.
  • Baris 9. Fungsi ini adalah yang utama dalam pelaksanaan. Ia menambah elemen pada tatasusunan, mengembangkannya mengikut keperluan. Oleh kerana ia lebih kompleks daripada yang lain, takrifannya diambil daripada huraian kelas. Fungsi yang diterangkan dalam badan kelas dilaksanakan dalam C++ bukan dengan memanggil, tetapi dengan penggantian sebaris. Ini mempercepatkan program, walaupun ia meningkatkan saiznya.
  • Baris 15-24. Definisi Fungsi Tatasusunan::Tambah(T)(itu nama penuh dia, by the way).
  • Baris 27. Buat objek jenis Susunan. templat Aggau diparameterkan mengikut jenis int.

C++ (baca c-plus-plus) ialah bahasa pengaturcaraan tujuan am yang ditaip secara statik di mana anda boleh mencipta atur cara dari sebarang tahap kerumitan.
Selama lebih daripada 20 tahun, bahasa ini telah menjadi antara tiga bahasa pengaturcaraan yang paling popular dan dalam permintaan. (Anda boleh mengesahkan ini dengan melawati laman web TIOBE).
Bahasa ini berasal pada awal 1980-an, apabila pekerja Bell Labs Björn Stroustrup menghasilkan beberapa penambahbaikan kepada bahasa C untuk keperluannya sendiri.

Bjarne Stroustrup – pencipta bahasa C++

Stroustrup memutuskan untuk melanjutkan bahasa C dengan keupayaan yang terdapat dalam bahasa Simula. C, sebagai bahasa asas sistem UNIX yang digunakan oleh komputer Bell, adalah pantas, kaya dengan ciri dan mudah alih. Stroustrup menambah keupayaan untuk bekerja dengan kelas dan objek. Akibatnya, masalah pemodelan praktikal ternyata mudah diselesaikan baik dari segi masa pembangunan (berkat penggunaan kelas seperti Simula) dan dari segi masa pengiraan (berkat kelajuan C).
Begini cara pembangun bahasa sendiri bercakap mengenainya:



Pada tahun 1998, standard bahasa pertama, yang dikenali sebagai C++98, telah diterbitkan oleh jawatankuasa standard. C++ terus berkembang untuk memenuhi permintaan hari ini. Salah satu kumpulan membangunkan bahasa C++ dan mengemukakan cadangan untuk menambah baiknya kepada Jawatankuasa Standard C++ ialah Galakan, yang terlibat, antara lain, dalam meningkatkan keupayaan bahasa dengan menambahkan ciri pengaturcaraan meta padanya. Standard terbaharu dikeluarkan pada tahun 2017 dan dipanggil C++17. Piawaian seterusnya tidak akan lama lagi dan dijangka muncul pada tahun 2020.
Tiada siapa yang memiliki hak ke atas bahasa C++; ia adalah percuma. Pada Mac 2016, kumpulan kerja WP21 C++ telah dicipta di Rusia. Kumpulan itu dianjurkan untuk mengumpul cadangan untuk piawaian C++, menghantarnya kepada jawatankuasa dan mempertahankannya pada mesyuarat agung Pertubuhan Antarabangsa untuk Standardisasi.
C++ ialah bahasa berbilang paradigma (daripada perkataan paradigma - gaya penulisan program komputer), termasuk pelbagai gaya pengaturcaraan dan teknologi yang berbeza. Ia sering diklasifikasikan sebagai bahasa berorientasikan objek, tetapi secara tegas, ini tidak berlaku. Semasa proses kerja, pembangun menerima kebebasan mutlak dalam memilih alat supaya masalah yang diselesaikan menggunakan pendekatan tertentu diselesaikan dengan seefisien mungkin. Dengan kata lain, C++ tidak memaksa pengaturcara untuk mematuhi hanya satu gaya pembangunan program (contohnya, berorientasikan objek).
C++ mempunyai perpustakaan standard yang kaya yang termasuk bekas dan algoritma biasa, I/O, ungkapan biasa, sokongan multithreading dan ciri lain. C++ telah mempengaruhi banyak bahasa pengaturcaraan, termasuk: Java, C#, D. Memandangkan C++ tergolong dalam keluarga bahasa berdasarkan sintaks bahasa C, anda boleh menguasai bahasa pengaturcaraan lain keluarga ini dengan mudah: JavaScript, PHP , Perl, Objektif-C dan banyak lagi . dsb., termasuk bahasa induk itu sendiri - C. ()
Semasa kewujudannya, bahasa C++ telah memperoleh mitos berterusan yang mudah disangkal (lihat di sini: Bahagian 1 dan Bahagian 2)

Sejarah keluaran bahasa dan standard

1983

Pencipta bahasa itu ialah Björn Stroustrup, pekerja Bell Labs, memperkenalkan versi awal bahasa C++ (“C dengan kelas”)

1985

Keluaran komersial pertama C++, bahasa itu mengambil nama modennya

1986

Keluaran edisi pertama The C++ Programming Language - sebuah buku khusus untuk C++ yang ditulis oleh Björn Stroustrup

1998

Standard antarabangsa untuk bahasa C++ telah disahkan: ISO/IEC 14882:1998 “Standard for the C++ Programming Language”

2003
2005

Laporan Teknikal Perpustakaan 1 (TR1) telah dikeluarkan. Walaupun bukan sebahagian daripada standard secara rasmi, laporan itu menerangkan sambungan kepada perpustakaan standard yang harus disertakan dalam versi bahasa C++ yang seterusnya.

2011

Keluaran standard baharu – C++11 atau ISO/IEC 14882:2011; standard baharu itu termasuk penambahan kepada teras bahasa dan pengembangan perpustakaan standard, termasuk kebanyakan TR1

2014

Keluaran standard C++14 (“Bahasa Pengaturcaraan C++ Standard Antarabangsa ISO/IEC 14882:2014(E)”); C++14 boleh dilihat sebagai sambungan kecil berbanding C++11, mengandungi kebanyakan pembetulan pepijat dan peningkatan kecil

2017

Keluaran standard baharu – C++1z (C++17). Piawaian ini memperkenalkan banyak perubahan dan penambahan. Sebagai contoh, STD menyertakan perpustakaan standard C11, sistem fail berdasarkan rangsangan::sistem fail, dan kebanyakan perpustakaan TS I percubaan.

2020

C++20 ialah nama tidak rasmi bagi standard ISO/IEC untuk bahasa pengaturcaraan C++, yang dijangka mengikuti C++17. Draf standard N4800.

Falsafah C++

Dalam bukunya The Design and Evolution of C++ (2007), Björn Stroustrup menerangkan prinsip yang dia ikuti semasa mereka bentuk C++ (disingkatkan):

  • Dapatkan bahasa tujuan umum dengan jenis data statik, kecekapan dan mudah alih bahasa C.
  • Menyokong pelbagai gaya pengaturcaraan secara langsung dan menyeluruh.
  • Berikan pengaturcara kebebasan memilih, walaupun ia memberi dia peluang untuk memilih secara salah.
  • Kekalkan keserasian dengan C sebanyak mungkin, dengan itu membuat peralihan mudah daripada pengaturcaraan C mungkin.
  • Elakkan percanggahan antara C dan C++: sebarang binaan yang sah dalam kedua-dua bahasa mesti bermakna perkara yang sama dalam setiap bahasa dan membawa kepada tingkah laku program yang sama.
  • Elakkan ciri yang bergantung pada platform atau tidak universal.
  • "Jangan bayar untuk apa yang anda tidak gunakan" - tiada ciri bahasa harus membawa kepada penurunan prestasi program yang tidak menggunakannya.
  • Tidak memerlukan persekitaran pengaturcaraan yang terlalu rumit.

C dan C++

Sintaks C++ diwarisi daripada bahasa C. Walaupun, secara rasmi, salah satu prinsip C++ kekal mengekalkan keserasian dengan bahasa C, sebenarnya, kumpulan penyeragaman untuk bahasa ini tidak berinteraksi, dan perubahan yang mereka buat tidak hanya tidak mengaitkan, tetapi selalunya secara asasnya bercanggah antara satu sama lain secara ideologi. Oleh itu, unsur-unsur yang ditambahkan oleh piawaian C baharu pada kernel adalah dalam elemen standard C++ perpustakaan standard dan tidak berada dalam kernel sama sekali, contohnya, tatasusunan dinamik, tatasusunan dengan sempadan tetap, kemudahan pemprosesan selari. Menurut Stroustrup, menggabungkan pembangunan kedua-dua bahasa ini akan memberi manfaat yang besar, tetapi ia tidak mungkin dilakukan atas sebab politik. Jadi keserasian praktikal antara C dan C++ secara beransur-ansur akan hilang.
Dalam contoh ini, bergantung pada pengkompil yang digunakan, sama ada "C++" atau "C" akan dikeluarkan:

Program 9.1

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

Ini disebabkan oleh fakta bahawa pemalar aksara dalam C adalah jenis int , dan dalam C++ ia adalah jenis char , tetapi saiz jenis ini berbeza.

Model Kitar Hayat Aplikasi

Kitaran hidup perisian ialah satu tempoh masa yang bermula dari saat keputusan dibuat mengenai keperluan untuk mencipta produk perisian dan berakhir pada masa ia ditarik balik sepenuhnya daripada perkhidmatan. Kitaran ini ialah proses membina dan membangunkan perisian. Terdapat beberapa model kitaran hayat.
Model lata kitaran hayat (model air terjun Inggeris) telah dicadangkan pada tahun 1970 oleh Winston Royce. Ia memperuntukkan pelaksanaan berurutan bagi semua peringkat projek dalam susunan tetap yang ketat. Peralihan ke peringkat seterusnya bermakna penyiapan lengkap kerja pada peringkat sebelumnya. Keperluan yang ditentukan pada peringkat pembentukan keperluan didokumenkan dengan ketat dalam bentuk spesifikasi teknikal dan direkodkan untuk keseluruhan pembangunan projek. Setiap peringkat memuncak dengan pengeluaran set lengkap dokumentasi yang mencukupi untuk membolehkan pembangunan diteruskan oleh pasukan pembangunan yang lain.
Peringkat projek mengikut model air terjun:

  1. Pembentukan keperluan;
  2. Reka bentuk;
  3. Pelaksanaan;
  4. Ujian;
  5. Pelaksanaan;
  6. Operasi dan penyelenggaraan.

Dalam model lata, peralihan daripada satu fasa projek ke fasa lain mengandaikan bahawa keputusan fasa sebelumnya adalah betul sepenuhnya. Dalam projek besar ini hampir mustahil untuk dicapai. Oleh itu, model ini hanya sesuai untuk membangunkan projek kecil. (W. Royce sendiri tidak mematuhi model ini dan menggunakan model berulang).
Model berulang
Alternatif kepada model lata ialah model pembangunan berulang dan inkremental (IID), yang diterima daripada T. Gilb pada tahun 70-an. nama model evolusi. Model IID melibatkan pemecahan kitaran hayat projek ke dalam urutan lelaran, setiap satunya menyerupai "projek mini", termasuk semua proses pembangunan yang digunakan untuk penciptaan kepingan fungsi yang lebih kecil berbanding projek secara keseluruhan. Matlamat setiap lelaran adalah untuk mendapatkan versi sistem perisian yang berfungsi, termasuk fungsi yang ditakrifkan oleh kandungan bersepadu semua lelaran sebelumnya dan semasa. Hasil daripada lelaran akhir mengandungi semua kefungsian produk yang diperlukan. Oleh itu, dengan selesainya setiap lelaran, produk menerima kenaikan - kenaikan - kepada keupayaannya, yang, oleh itu, berkembang secara evolusi.


Pelbagai varian pendekatan berulang dilaksanakan dalam kebanyakan metodologi pembangunan moden:

Proses Pembangunan - Proses Bersepadu Rasional (RUP)

Proses Bersepadu Rasional (RUP)(proses bersatu rasional) ialah metodologi pembangunan perisian yang diselenggara oleh Rational Software (IBM). Metodologi menyediakan cadangan untuk semua peringkat pembangunan: daripada pemodelan perniagaan kepada ujian dan pentauliahan program yang telah siap. Bahasa Pemodelan Bersepadu (UML) digunakan sebagai bahasa pemodelan.
Kitaran hayat pembangunan produk yang lengkap terdiri daripada empat fasa, setiap satunya termasuk satu atau lebih lelaran.

  • Peringkat permulaan (Permulaan)
  • Menentukan skop projek dan jumlah sumber yang diperlukan. Keperluan asas, had dan kefungsian utama produk ditentukan. Risiko dinilai. Perancangan tindakan. Pada akhir fasa awal, pencapaian Pencapaian Objektif Kitaran Hayat dinilai, yang mengandaikan persetujuan antara pihak berkepentingan untuk meneruskan projek.

  • Penjelasan
  • Keperluan dokumentasi. Reka bentuk, pelaksanaan dan ujian seni bina boleh laku. Penjelasan terma dan kos. Mengurangkan risiko utama. Selesai dengan jayanya fasa pembangunan bermakna mencapai Pencapaian Seni Bina Kitaran Hayat.

  • Pembinaan
  • Dalam fasa "Bina", kebanyakan fungsi produk dilaksanakan: reka bentuk aplikasi selesai, kod sumber ditulis. Fasa Bina berakhir dengan keluaran luaran pertama sistem dan pencapaian Keupayaan Operasi Permulaan.

  • pengenalan
  • Dalam fasa "Pelaksanaan", versi akhir produk dibuat dan dipindahkan daripada pembangun kepada pelanggan. Ini termasuk program ujian beta, latihan pengguna dan menentukan kualiti produk. Sekiranya kualiti tidak memenuhi jangkaan pengguna atau kriteria yang ditetapkan dalam fasa Mula, fasa Pelaksanaan diulang semula. Menyelesaikan semua matlamat bermakna mencapai peristiwa penting Keluaran Produk dan melengkapkan kitaran pembangunan penuh.



"Teknologi maklumat. Kejuruteraan sistem dan perisian. Proses kitaran hayat perisian". Piawaian ini telah diterima pakai oleh Agensi Persekutuan untuk Peraturan Teknikal dan Metrologi Persekutuan Rusia dan serupa dengan piawaian antarabangsa ISO/IEC 12207:2008. Piawaian ini menetapkan struktur umum proses kitaran hayat perisian yang boleh diikuti dalam industri perisian. Piawaian tidak mencadangkan model kitaran hayat tertentu. Peruntukannya adalah biasa kepada mana-mana model kitaran hayat, kaedah dan teknologi untuk penciptaan perisian. Ia menerangkan struktur proses kitaran hayat tanpa menyatakan cara untuk melaksanakan atau menyelesaikan aktiviti dan tugas yang termasuk dalam proses tersebut.

Persembahan untuk pelajaran
Topik mesej
  • Yayasan Perisian Percuma (FSF)
  • Lesen perisian percuma
  • Perisian Percuma dan Sumber Terbuka
  • Sejarah perkembangan bahasa pengaturcaraan
  • Sejarah bahasa C. C dan C++
  • cerita
  • Kritikan terhadap C++
  • Sejarah UNIX
  • Model kitaran hayat perisian lingkaran
  • UML (Bahasa Pemodelan Bersatu)
  • Rangka Kerja Penyelesaian Microsoft
  • IDE untuk pengaturcaraan C/C++ pada Windows
  • Penyusun C/C++
  • Mencipta Aplikasi Konsol pada Windows
Soalan
  1. Mengapakah model air terjun pembangunan perisian tidak digunakan dalam projek besar?
  2. Apakah perbezaan antara model pembangunan air terjun dan berulang?
  3. Senaraikan peringkat pembangunan perisian dalam metodologi Rational Unified Process (RUP).

Sejarah penciptaan

Bahasa ini berasal pada awal 1980-an, apabila pekerja Bell Labs Björn Stroustrup menghasilkan beberapa penambahbaikan kepada bahasa C untuk keperluannya sendiri. Apabila Stroustrup mula bekerja di Bell Labs pada akhir 1970-an mengenai masalah dalam teori beratur (seperti yang digunakan untuk memodelkan panggilan telefon), beliau mendapati bahawa percubaan untuk menggunakan bahasa pemodelan yang sedia ada pada masa itu adalah tidak berkesan, dan penggunaan bahasa mesin yang sangat cekap ​terlalu sukar untuk dilaksanakan kerana ekspresi mereka yang terhad. Oleh itu, bahasa Simula mempunyai ciri yang sangat berguna untuk membangunkan perisian yang besar, tetapi terlalu perlahan, dan bahasa BCPL cukup pantas, tetapi terlalu dekat dengan bahasa peringkat rendah dan tidak sesuai untuk membangunkan perisian yang besar.

Mengimbas kembali pengalaman disertasinya, Stroustrup memutuskan untuk menambah bahasa C (pengganti BCPL) dengan keupayaan yang tersedia dalam bahasa Simula. C, sebagai bahasa asas sistem UNIX yang digunakan oleh komputer Bell, adalah pantas, kaya dengan ciri dan mudah alih. Stroustrup menambah keupayaan untuk bekerja dengan kelas dan objek. Akibatnya, masalah pemodelan praktikal ternyata mudah diselesaikan baik dari segi masa pembangunan (berkat penggunaan kelas seperti Simula) dan dari segi masa pengiraan (berkat kelajuan C). Pertama sekali, kelas (dengan enkapsulasi), warisan kelas, semakan jenis kuat, fungsi sebaris dan argumen lalai telah ditambahkan pada C. Versi awal bahasa, yang asalnya dipanggil "C dengan kelas", tersedia pada tahun 1980.

Semasa membangunkan C dengan kelas, Stroustrup menulis program yang dipanggil cfront, penterjemah yang menukar kod sumber C dengan kelas kepada kod sumber C biasa. Ini membolehkan untuk mengusahakan bahasa baharu dan menggunakannya dalam amalan, menggunakan infrastruktur yang sedia ada dalam UNIX untuk pembangunan dalam C. Bahasa baru, tanpa diduga untuk pengarang, dia mendapat populariti besar di kalangan rakan-rakannya dan tidak lama kemudian Stroustrup tidak lagi dapat menyokongnya secara peribadi, menjawab beribu-ribu soalan.

Apabila mencipta C++, Björn Stroustrup mahu
  • Dapatkan bahasa tujuan umum dengan jenis data statik, kecekapan dan mudah alih bahasa C.
  • Menyokong pelbagai gaya pengaturcaraan secara langsung dan menyeluruh, termasuk pengaturcaraan prosedur, abstraksi data, pengaturcaraan berorientasikan objek dan pengaturcaraan generik.
  • Berikan pengaturcara kebebasan memilih, walaupun ia memberi dia peluang untuk memilih secara salah.
  • Kekalkan keserasian dengan C sebanyak mungkin, dengan itu membuat peralihan mudah daripada pengaturcaraan C mungkin.
  • Elakkan percanggahan antara C dan C++: sebarang binaan yang sah dalam kedua-dua bahasa mesti bermakna perkara yang sama dalam setiap bahasa dan membawa kepada tingkah laku program yang sama.
  • Elakkan ciri yang bergantung pada platform atau tidak universal.
  • “Jangan bayar apa yang anda tidak gunakan”—tiada ciri bahasa yang boleh menyebabkan kemerosotan prestasi untuk program yang tidak menggunakannya.
  • Tidak memerlukan persekitaran pengaturcaraan yang terlalu rumit.

Pilihan C sebagai asas untuk mencipta bahasa pengaturcaraan baru dijelaskan oleh fakta bahawa bahasa C:

1. ialah bahasa pelbagai guna, ringkas dan beraras rendah;
2. sesuai untuk menyelesaikan kebanyakan masalah sistem;
3. dilakukan di mana-mana dan pada segala-galanya;
4. antara muka dengan persekitaran pengaturcaraan UNIX.

- B. Stroustrup. Bahasa pengaturcaraan C++. Bahagian 1.6

Walaupun terdapat beberapa kelemahan yang diketahui dalam bahasa C, Stroustrup memutuskan untuk menggunakannya sebagai asas, kerana "C mempunyai masalahnya, tetapi bahasa yang dibangunkan dari awal akan mengalaminya, dan kami tahu masalah C." Di samping itu, ini memungkinkan untuk mendapatkan pengkompil prototaip (cfront) dengan cepat, yang hanya menterjemahkan elemen sintaksis tambahan ke dalam bahasa C asal.

Semasa C++ dibangunkan, ciri-ciri lain disertakan yang meliputi keupayaan konstruk C, dan oleh itu persoalan meninggalkan keserasian bahasa dengan mengalih keluar binaan usang telah berulang kali dibangkitkan. Walau bagaimanapun, keserasian telah dikekalkan atas sebab-sebab berikut:

  • pemeliharaan kod semasa, asalnya ditulis dalam C dan terus dipindahkan ke C++;
  • menghapuskan keperluan untuk melatih semula pengaturcara yang sebelum ini mempelajari C (mereka hanya perlu mempelajari alat C++ baharu);
  • menghapuskan kekeliruan antara bahasa apabila digunakan bersama ("jika dua bahasa digunakan bersama-sama, perbezaannya harus sama ada minimum atau terlalu besar sehingga mustahil untuk mengelirukan bahasa").

Menjelang tahun 1983, ciri-ciri baru telah ditambah ke dalam bahasa, seperti fungsi maya, fungsi dan operator lebih muatan, rujukan, pemalar, kawalan pengguna ke atas pengurusan memori percuma, pemeriksaan jenis yang dipertingkatkan, dan gaya komen baharu (//). Bahasa yang terhasil bukan lagi sekadar versi tambahan bagi C klasik dan dinamakan semula daripada C dengan kelas kepada "C++". Keluaran komersial pertamanya berlaku pada Oktober 1985.

Nama bahasa yang terhasil berasal daripada operator kenaikan postfix unary C++ (meningkatkan nilai pembolehubah sebanyak satu).

Sebelum penyeragaman rasmi bermula, bahasa ini dibangunkan terutamanya oleh Stroustrup sebagai tindak balas kepada permintaan daripada komuniti pengaturcaraan. Fungsi perihalan standard bahasa dilakukan oleh karya bercetak yang ditulis oleh Stroustrup pada C++ (huraian bahasa, manual rujukan, dan sebagainya).

Sejarah piawaian

Pada tahun 1985, edisi pertama Bahasa Pengaturcaraan C++ telah diterbitkan, memberikan penerangan pertama bahasa, yang sangat penting kerana kekurangan piawaian rasmi.


Pada tahun 1989, C++ versi 2.0 telah dikeluarkan. Ciri baharunya termasuk berbilang warisan, kelas abstrak, fungsi ahli statik, fungsi malar dan ahli yang dilindungi. Pada tahun 1990, "Panduan Rujukan Beranotasi untuk C++" telah diterbitkan, yang kemudiannya menjadi asas standard. Kemas kini terkini telah menyertakan templat, pengecualian, ruang nama, jenis penghantaran baharu dan jenis boolean.

Perpustakaan Standard C++ juga berkembang dengannya. Penambahan pertama kepada perpustakaan standard C++ ialah aliran I/O, yang menyediakan cara untuk menggantikan fungsi C printf dan scanf tradisional. Kemudian, pembangunan perpustakaan standard yang paling ketara ialah kemasukan Perpustakaan Templat Standard.

Pada tahun 1998, standard bahasa ISO/IEC 14882:1998 (dikenali sebagai C++98), yang dibangunkan oleh Jawatankuasa Piawaian C++ (kumpulan kerja ISO/IEC JTC1/SC22/WG21), telah diterbitkan. Piawaian C++ tidak menerangkan cara objek dinamakan, beberapa butiran pengendalian pengecualian, dan ciri terperinci pelaksanaan lain, menjadikan kod objek yang dihasilkan oleh penyusun berbeza tidak serasi. Walau bagaimanapun, banyak piawaian telah dibuat oleh pihak ketiga untuk seni bina dan sistem pengendalian tertentu.

Pada tahun 2005, Laporan Teknikal Perpustakaan 1 (disingkat TR1) telah dikeluarkan. Walaupun bukan sebahagian daripada standard secara rasmi, laporan itu menerangkan sambungan kepada pustaka standard yang penulis jangkakan akan disertakan dalam versi bahasa C++ yang seterusnya. Sokongan TR1 bertambah baik dalam hampir semua penyusun C++ yang disokong.

Sejak 2009, kerja telah dijalankan untuk mengemas kini piawaian sebelumnya, versi awal piawaian baharu ialah C++09 yang pertama, dan setahun kemudian C++0x, hari ini C++11, yang termasuk penambahan kepada teras bahasa dan pengembangan perpustakaan standard, termasuk termasuk kebanyakan TR1.

C++ terus berkembang untuk memenuhi permintaan hari ini. Salah satu kumpulan membangunkan bahasa C++ dan mengemukakan cadangan untuk penambahbaikannya kepada jawatankuasa penyeragaman C++ ialah Boost, yang terlibat, antara lain, dalam meningkatkan keupayaan bahasa dengan menambahkan ciri pengaturcaraan meta padanya.

Tiada siapa yang memiliki hak ke atas bahasa C++; ia adalah percuma. Walau bagaimanapun, dokumen standard bahasa itu sendiri (tidak termasuk draf) tidak tersedia secara percuma.

Apabila reputasi anda berfungsi untuk keuntungan anda

Pengurusan komuniti

Penciptaan Nada Suara. Pemprosesan segera komen negatif dan positif bagi pihak jenama. Pengurusan komunikasi mengikut senario yang ditetapkan. Terjemahan isu bermasalah kepada pelanggan.

Agen pengaruh

Penciptaan dan pelaksanaan "maya" di forum dan rangkaian sosial. Terdapat pangkalan data akaun yang dinaik taraf dan langsung di lebih daripada 300 tapak.

Bekerja dengan ulasan

Menulis, menyelaras dan menyiarkan ulasan tentang jenama di platform teratas dan tapak ulasan. Memproses dan menutup komen negatif dengan komen positif. Akibatnya, negatif secara beransur-ansur dipaksa keluar daripada hasil carian.

Pemantauan media sosial

Bekerja dengan sistem Youscan, IQbuzz, Analitis Jenama. Kawalan sebutan jenama. Mengenal pasti cerapan utama dan bertindak balas dengan segera kepada negatif. Alat yang sangat diperlukan untuk memantau maklum balas pelanggan.

Analisis dan penyelidikan

Analisis bidang maklumat, penyelidikan kategori produk dan pesaing utama jenama. Alat ini merangkumi tugas daripada pemantauan reputasi dan pemasaran masa nyata kepada penyelidikan yang mendalam.

SERM

Analisis terperinci hasil carian untuk kata kunci yang dipilih. Mengumpul rujukan tentang pelanggan di rangkaian sosial, forum dan laman berita. Membangunkan strategi untuk menangani maklumat negatif. Pelanggan menerima penghantaran terkawal sepenuhnya dalam TOP10.