Ekstensi file untuk kode program: cpp - apa itu? Tinjauan bahasa pemrograman dan alat pengembangan berdasarkan bahasa pemrograman yang dapat diperluas.

1.1Microsoft Visual Studio C++

Microsoft Visual Studio adalah lini produk Microsoft yang mencakup lingkungan pengembangan perangkat lunak terintegrasi dan sejumlah alat lainnya.

Visual Studio menyertakan satu atau beberapa hal berikut ini:

Visual Basic .NET, dan sebelum kemunculannya - Visual Basic;

Visual C++;

Visual C#.

Banyak pilihan pengiriman juga mencakup:

Microsoft SQL Server atau MSDE;

Visual Source Safe - sistem kontrol versi server file;

Sebelumnya, Visual Studio juga menyertakan produk berikut:

Visual InterDev;

Visual J++;

Visual J#;

Visual FoxPro.

Versi paket yang paling signifikan:

Visual Studio 97 adalah versi pertama dari Visual Studio yang dirilis dan merupakan yang pertama menyatukan berbagai alat pengembangan perangkat lunak. Itu dirilis dalam dua versi: Profesional dan Perusahaan. Ini termasuk Visual Basic 5.0, Visual C++ 5.0, Visual J++ 1.1, Visual FoxPro 5.0, dan lingkungan pengembangan ASP - Visual InterDev - muncul untuk pertama kalinya. Visual Studio 97 adalah upaya pertama Microsoft untuk menciptakan lingkungan pengembangan tunggal untuk bahasa pemrograman yang berbeda: Visual C++, Visual J++, Visual InterDev, dan MSDN semuanya berbagi satu lingkungan yang disebut Developer Studio. Visual Basic dan Visual FoxPro menggunakan lingkungan pengembangan terpisah.

Visual Studio 6.0 - dirilis pada bulan Juni 1998 - versi terbaru dari Visual Studio yang berjalan pada platform Win9x. Masih populer di kalangan programmer yang menggunakan Visual Basic. Versi ini adalah lingkungan pengembangan aplikasi utama untuk Windows dari Microsoft, sebelum munculnya platform .NET.

Visual Studio .NET (nama kode Rainier; versi internal 7.0) - dirilis Februari 2002 (termasuk .NET Framework 1.0). Service Pack 1 untuk Visual Studio .NET (2002) dirilis pada Maret 2005.

Visual Studio .NET 2003 (nama kode Everett; versi internal 7.1) - dirilis April 2003 (termasuk .NET Framework 1.1). Service Pack 1 untuk Visual Studio .NET 2003 dirilis pada 13 September 2006.

Visual Studio 2005 (nama kode Whidbey; versi internal 8.0) - dirilis akhir Oktober 2005 (termasuk .NET Framework 2.0). Pada awal November 2005, serangkaian produk edisi Express juga dirilis: Visual C++ 2005 Express, Visual Basic 2005 Express, Visual C# 2005 Express, dll. Pada tanggal 19 April 2006, edisi Express menjadi gratis. Service Pack 1 untuk VS2005 dan semua edisi Express dirilis pada 14 Desember 2006. Patch tambahan untuk SP1 yang memecahkan masalah kompatibilitas dengan Windows Vista dirilis pada tanggal 3 Juni 2007.

Visual Studio 2008 (nama kode Orcas) - dirilis 19 November 2007, bersama dengan .NET Framework 3.5. Ditujukan untuk membuat aplikasi untuk Windows Vista (tetapi juga mendukung XP), Office 2007 dan aplikasi web. Termasuk LINQ, versi baru C# dan Visual Basic. Visual J# tidak disertakan di studio. Sejak 28 Oktober 2008, versi Rusia telah tersedia untuk pertama kalinya.

Produk penerus Visual Studio 2008 diberi nama kode Hawaii. Pada tanggal 29 September 2008, muncul pengumuman yang memperkenalkan beberapa inovasi yang akan muncul di Visual Studio 2010 dan .NET Framework 4.0.

Pengembang aplikasi yang memutuskan untuk menggunakan layanan Visual Studio.Net 7.0 memiliki cukup banyak teknologi dan alat baru yang memungkinkannya dengan cepat dan efisien membuat aplikasi Windows biasa, yang sekarang biasa disebut aplikasi desktop, serta aplikasi web dan layanan web. Microsoft telah menambahkan bahasa baru ke dalam persenjataan pemrogram, C# (diucapkan "C sharp"), yang, seperti yang dijanjikan para ahli, dapat mempercepat siklus pengembangan proyek yang kompleks beberapa kali lipat.

Berita utama yang harus menarik perhatian Anda adalah bahwa Visual C++, Visual Basic, dan C# menggunakan IDE (Integrated Development Environment) yang sama, yang memungkinkan pembuatan proyek kompleks menggunakan bahasa berbeda (solusi bahasa campuran). Lingkungan pengembangan multibahasa .Net (.Net Framework) adalah gabungan dari tiga komponen:

perpustakaan runtime umum untuk kumpulan bahasa yang dipertimbangkan (Common Language Runtime);

perpustakaan terpadu kelas pengembang (Kelas Pemrograman Terpadu);

model pengembangan aplikasi web (Active Server Pages.Net).

Komponen pertama adalah runtime library (Common Language Runtime, disingkat CLR), yang berfungsi baik pada saat runtime maupun pada tahap pengembangan. Selama eksekusi kode, ia memantau dinamika aplikasi multi-thread, memastikan interkoneksi proses, menjaga keamanannya, dan mengotomatiskan prosedur untuk mengalokasikan dan mengosongkan memori. Pada tahap pengembangan, CLR mengotomatiskan tugas-tugas khas yang diselesaikan oleh pemrogram, sangat menyederhanakan penggunaan teknologi baru. Yang paling menonjol adalah keuntungan yang diperoleh saat membuat komponen standar COM (Component Object Model, disingkat COM - Multi-Component Object Model).

Komponen kedua (Kelas Pemrograman Terpadu) memberi pengembang perpustakaan kelas terpadu, berorientasi objek, dan dapat diperluas, yang, bersama dengan sumber daya lainnya, merupakan bagian dari Antarmuka Pemrograman Aplikasi (API). Ini menggabungkan elemen MFC (Microsoft Foundation Classes), WFC (Windows Foundation Classes) dan bagian dari API yang digunakan oleh Visual Basic.

Komponen ketiga (ASP.Net) adalah add-on untuk kelas, yang memungkinkan penggunaan teknologi berorientasi objek saat mengembangkan elemen antarmuka HTML standar. Sebenarnya dieksekusi di sisi server, elemen-elemen ini mengekspos fungsi antarmuka pengguna sebagai kode HTML. Namun, ketika mengembangkan server, dimungkinkan untuk menggunakan peralatan canggih yang disediakan oleh model pemrograman objek. Hasilnya adalah penyederhanaan dramatis proses pembuatan aplikasi web. Selain itu, ASP.Net mendukung konsep atau model pengembangan program yang cukup baru. Anda mungkin pernah mendengarnya sebagai teknologi klien tipis. Inti utama dari model ini adalah pemberian kode kepada pengguna bukan dalam bentuk produk yang diinstal, melainkan dalam bentuk layanan sementara.

Kode yang dibuat berdasarkan lingkungan pengembangan .Net Framework disebut kode terkelola (kode terkelola) tidak seperti kode biasa yang tidak dikelola (kode tidak dikelola). Dalam mode .Net, kompiler bahasa yang dipertimbangkan menghasilkan metadata (metadata), yang menyertai kode itu sendiri. Ini berarti bahwa mereka menghasilkan informasi tambahan yang menjelaskan tipe data, objek, dan referensi. Pustaka runtime (Common Language Runtime) menggunakan metadata untuk menemukan dan memuat objek, menjalankan fungsi, meneruskan parameter, dan menempatkan objek di memori.

Fungsi penting yang dilakukan perpustakaan runtime adalah secara otomatis mengosongkan memori yang ditempati oleh objek yang tidak lagi digunakan. Inovasi ini dirancang untuk meningkatkan keandalan masing-masing komponen dan keseluruhan aplikasi yang sedang dikembangkan. Data yang masa hidupnya dikelola dengan cara ini disebut data terkelola. (data yang dikelola). Jika kode Anda dikelola (kode terkelola), maka Anda mungkin atau mungkin tidak menggunakan data terkelola. Selain itu, Anda mungkin tidak tahu apakah data Anda dikelola.

Common Runtime Library (CLR) menyederhanakan pembuatan aplikasi dan komponennya yang dikembangkan dalam berbagai bahasa dan ditargetkan untuk menggunakan CLR. Modul-modul ini dapat diintegrasikan dalam satu proyek dan berinteraksi satu sama lain seolah-olah dibuat dalam bahasa yang sama. Misalnya, Anda bisa mendeklarasikan sebuah kelas, lalu membuat kelas turunannya dalam bahasa lain. Anda cukup menggunakan metode kelas dalam modul yang ditulis dalam bahasa lain. Integrasi ini dimungkinkan karena kompiler dan alat dalam berbagai bahasa berbagi sistem tipe umum yang ditentukan dalam CLR, serta aturan permainan baru yang diadopsi selama pengembangannya.

1.2 Pembuat C++

Borland C++ Builder adalah alat pengembangan aplikasi cepat yang baru dirilis dari Borland yang memungkinkan Anda membuat aplikasi dalam C++ menggunakan lingkungan pengembangan Delphi dan pustaka komponen. Artikel ini membahas lingkungan pengembangan C++ Builder dan teknik dasar yang digunakan dalam desain antarmuka pengguna.

C++ Builder adalah aplikasi SDI yang jendela utamanya berisi toolbar yang dapat disesuaikan (kiri) dan palet komponen (kanan). Selain itu, secara default, saat Anda meluncurkan C++ Builder, jendela Object Inspector (di sebelah kiri) dan formulir Aplikasi Baru (di sebelah kanan) muncul. Di bawah jendela formulir aplikasi adalah jendela editor kode.


Gambar.1. Lingkungan pengembangan C++ Builder

Formulir adalah inti dari aplikasi C++ Builder. Membuat antarmuka pengguna aplikasi melibatkan penambahan elemen objek C++ Builder, yang disebut komponen, ke jendela formulir. Komponen C++ Builder terletak di palet komponen, dirancang sebagai notepad multi-halaman. Fitur penting dari C++ Builder adalah memungkinkan Anda membuat komponen sendiri dan menyesuaikan palet komponen, serta membuat versi palet komponen berbeda untuk proyek berbeda.

Komponen dibedakan menjadi tampak (visual) dan tidak terlihat (non visual). Komponen visual muncul saat runtime sama seperti saat desain. Contohnya adalah tombol dan bidang yang dapat diedit. Komponen non-visual muncul selama desain sebagai ikon pada formulir. Mereka tidak pernah terlihat saat runtime, tetapi memiliki fungsi tertentu (misalnya, mereka menyediakan akses ke data, memanggil dialog standar Windows 95, dll.)


Beras. 2. Contoh penggunaan komponen tampak dan tidak terlihat

Untuk menambahkan komponen ke formulir, Anda dapat memilih komponen yang diinginkan di palet dengan mouse dan klik tombol kiri mouse di lokasi yang diinginkan pada formulir yang dirancang. Komponen akan muncul di formulir, lalu Anda dapat memindahkannya, mengubah ukurannya, dan karakteristik lainnya.

Setiap komponen C++ Builder memiliki tiga jenis karakteristik: properti, peristiwa, dan metode.

Jika Anda memilih komponen dari palet dan menambahkannya ke formulir, Object Inspector akan secara otomatis menampilkan properti dan event yang dapat digunakan dengan komponen tersebut. Di bagian atas pemeriksa objek terdapat daftar drop-down yang memungkinkan Anda memilih objek yang diinginkan dari yang tersedia di formulir.

Properti adalah atribut suatu komponen yang menentukan penampilan dan perilakunya. Banyak properti komponen di kolom properti memiliki nilai default (misalnya, tinggi tombol). Properti komponen ditampilkan pada halaman Properties. Object Inspector menampilkan properti komponen yang dipublikasikan. Selain properti yang dipublikasikan, komponen dapat, dan paling sering memiliki, memiliki properti publik yang dipublikasikan yang hanya tersedia saat aplikasi sedang berjalan. Object Inspector digunakan untuk mengatur properti pada waktu desain. Daftar properti terletak di halaman properti Object Inspector. Anda dapat menentukan properti pada waktu desain atau menulis kode untuk mengubah properti komponen pada waktu proses.

Saat mendefinisikan properti komponen pada waktu desain, Anda memilih komponen pada formulir, membuka halaman properti di Object Inspector, memilih properti yang akan ditentukan, dan mengubahnya menggunakan editor properti (ini bisa berupa teks sederhana atau bidang nomor, daftar drop-down, daftar drop-down, panel dialog, dll.).

1.3 Delfi

Delphi adalah lingkungan pengembangan yang menggunakan bahasa pemrograman Delphi (mulai dari versi 7, bahasa dalam lingkungan tersebut disebut Delphi, sebelumnya Object Pascal), dikembangkan oleh Borland dan awalnya diimplementasikan dalam paket Borland Delphi, dari mana ia menerima namanya saat ini di 2003. Object Pascal pada dasarnya merupakan penerus bahasa Pascal dengan ekstensi berorientasi objek.

Delphi adalah lingkungan pengembangan cepat yang menggunakan Delphi sebagai bahasa pemrogramannya. Bahasa Delphi adalah bahasa berorientasi objek yang sangat diketik, yang didasarkan pada Object Pascal, yang dikenal oleh para pemrogram.

Delphi merupakan kombinasi dari beberapa teknologi penting:

    kompiler berkinerja tinggi ke kode mesin;

    – model komponen berorientasi objek;

    – konstruksi aplikasi secara visual (dan, karenanya, berkecepatan tinggi) dari prototipe perangkat lunak;

    – alat skalabel untuk membangun database.

    Borland Delphi 8 Studio memungkinkan Anda membuat berbagai macam program: dari aplikasi satu jendela yang paling sederhana hingga program untuk mengelola database terdistribusi. Paket ini mencakup berbagai utilitas yang memungkinkan Anda bekerja dengan database, dokumen XML, membuat sistem bantuan, dan memecahkan masalah lainnya. Ciri khas versi ketujuh adalah dukungan teknologi .NET.

    Fokus utama model Delphi adalah memaksimalkan produktivitas kode. Hal ini memungkinkan Anda mengembangkan aplikasi dengan sangat cepat, karena objek yang telah disiapkan sebelumnya sudah ada. Anda juga dapat membuat objek sendiri, tanpa batasan apa pun. Bahasa Delphi adalah bahasa berorientasi objek yang sangat diketik, yang didasarkan pada Object Pascal, yang dikenal oleh para pemrogram.

    Delphi hadir standar dengan objek inti dari 270 kelas dasar. Bahasa ini sangat nyaman untuk menulis aplikasi database dan bahkan program game. Jika kita memperhitungkan antarmuka yang ramah pengguna untuk membuat shell grafis, maka kita dapat dengan yakin mengatakan bahwa bahasa Delphi adalah bahasa pemrograman yang sangat mudah dipahami, namun pada saat yang sama sangat kuat.

    Versi pertama dari lingkungan pengembangan Delphi yang lengkap untuk .NET adalah Delphi 8. Versi ini memungkinkan Anda menulis aplikasi hanya untuk .NET. Saat ini, di Delphi 2006, Anda dapat menulis aplikasi .NET menggunakan perpustakaan kelas .NET standar, VCL untuk .NET. Kerangka kerja ini juga memungkinkan Anda membuat aplikasi .NET di C# dan aplikasi Win32 di C++. Delphi 2006 berisi fitur untuk menulis aplikasi umum menggunakan perpustakaan VCL dan CLX. Delphi 2006 mendukung teknologi MDA menggunakan ECO (Enterprise Core Objects) versi 3.0.

    Pada bulan Maret 2006, Borland memutuskan untuk berhenti meningkatkan lebih lanjut lingkungan pengembangan terintegrasi JBuilder, Delphi dan C++ Builder karena area ini tidak menguntungkan. Pada bulan Agustus 2006, Borland merilis versi ringan RAD Studio dengan nama Turbo: Turbo Delphi, Turbo Delphi untuk .NET, Turbo C#, Turbo C++. Pada bulan Maret 2008, diumumkan bahwa pengembangan lini produk ini akan dihentikan.

    Pada bulan Maret 2007, CodeGear memuaskan pengguna dengan jajaran produk Delphi 2007 yang diperbarui untuk produk Win32 dan peluncuran produk yang benar-benar baru, Delphi 2007 untuk PHP. Pada bulan Juni 2007, CodeGear mempresentasikan rencananya untuk masa depan, yaitu menerbitkan apa yang disebut peta jalan, yang dapat ditemukan di sini

    Pada tanggal 25 Agustus 2008, Embarcadero, pemilik baru CodeGear, menerbitkan siaran pers Delphi untuk Win32 2009. Versi ini membawa banyak inovasi pada bahasa tersebut, seperti:

    – dukungan penuh untuk Unicode secara default di semua bagian bahasa, VCL dan RTL;

    – tipe umum, juga dikenal sebagai generik.

    – metode anonim.

    Di antara banyak produk perangkat lunak umum yang dibuat di Delphi, Anda dapat menemukan:

    1. Produk Borland: Borland Delphi, Borland C++ Builder, Borland JBuilder versi 1 dan 2.

    2.Administrasi/pengembangan database: Alat MySQL (Administrator, Browser Kueri), IBExpert, TOAD

    3.Perangkat lunak teknik: Altium Designer/Protel (desain elektronik).

    4. Penampil grafis: FastStone Image Viewer, FuturixImager, Photofiltre.

    5.Pemutar video dan audio: KMPlayer (pemutar video dan audio), X-Player (pemutar audio).

    6. Pengiriman informasi di Internet: Skype (VoIP dan IM), QIP, QIP Infium dan R&Q, (IMs), The Bat! dan si.Mail (klien email), PopTray (pemeriksa email), FeedDemon (penampil grup berita RSS/Atom), XanaNews (pembaca grup berita), Xnews (pembaca grup berita).

    7. Penciptaan musik: FL Studio (sebelumnya FruityLoops).

    8. Pengembangan perangkat lunak: Dev-C++, Dev-PHP, Maguma Open Studio dan Open Perl IDE (IDE), DUnit (pengujian unit), Jedi Code Format (pemformatan kode), Game Maker (pembuatan game) Bantuan & Manual (bantuan pembuatan sistem), Inno Setup (mesin instalasi).

    9.Pengembangan web: Macromedia HomeSite (editor HTML), TopStyle Pro (editor CSS), Macromedia Captivate (tangkapan layar), Quick Page 2008 (lingkungan pengembangan situs web).

    10.Web browser (shell untuk MSIE): Avant Browser, Netcaptor.

    11.Utilitas: Spybot - Search & Destroy, Ad-Aware (anti-spyware), jv16 PowerTools, FDK (utilitas pengoptimalan sistem multifungsi), Total Commander dan Frigate (manajer file), DarkCrypt TC/GUI (paket perangkat lunak enkripsi), ImageSpyer dan StegoTC (paket perangkat lunak steganografi), Copernic Desktop Search, PowerArchiver dan PeaZip (pengarsip), MCubix (penambangan data), Download Master [manajer unduhan], ACProtect (program untuk mengemas dan melindungi file EXE).

    12.Editor teks: SynEdit, Bred2, KeyNote, cEdit Professional, Notepad Programmer, UniRed, gleditor.

    13. Editor file biner (editor HEX): Hexapad

    14.Akuntansi dan Perpajakan: Perangkat Lunak Pajak Profesional Lacerte Intuit, termasuk semua subsistem seperti Utilitas Neraca Percobaan QuickBooks/EasyACCT, Sistem Manajemen Dokumen, dan Utilitas Perbaikan Basis Data Klien.

    15.Program untuk membaca dan membuat katalog teks elektronik: DarkLib (katalog dan e-reader multi-format), IxReader (e-reader).

    2 Analisis komparatif kemampuan (kelebihan) kelemahan bahasa berorientasi objek modern dan alat pengembangan berdasarkan bahasa tersebut

    2.1 Objek Pascal

    Object Pascal adalah dialek bahasa Pascal yang sepenuhnya berorientasi objek, dikembangkan oleh Apple Computer bersama dengan Niklaus Wirth. Pada tahun 1986, Borland menambahkan ekstensi Pascal serupa ke produk Turbo Pascal untuk Macintosh; dengan dirilisnya Turbo Pascal 5.5, ekstensi tersebut tersedia untuk DOS. Dimulai dengan Delphi 7, Borland mulai secara resmi menyebut bahasanya Delphi. Namun, Object Pascal dikelola dan dikembangkan oleh pengembang lain. Implementasi Object Pascal yang paling serius (selain Delphi) adalah TMT Pascal, Virtual Pascal dan Free Pascal.

    Setiap program Delphi terdiri dari file proyek (file dengan ekstensi dpr) dan satu atau lebih modul (file dengan ekstensi pas). Masing-masing file ini menjelaskan unit program Object Pascal.

    Di jendela kode, apa yang disebut kata-kata yang dicadangkan disorot dalam huruf tebal, dan komentar dicetak miring (kata-kata yang dicadangkan dan komentar dalam buku juga disorot). Seperti yang Anda lihat, teks program dimulai dengan kata cadangan program dan diakhiri dengan kata akhir diikuti dengan titik. Perhatikan bahwa kombinasi akhir dengan titik yang mengikutinya disebut terminator unit program: segera setelah terminator tersebut ditemukan dalam teks program, kompilator berhenti menganalisis program dan mengabaikan teks lainnya.

    Kata-kata yang dicadangkan memainkan peran penting dalam Object Pascal, memberikan keseluruhan program tampilan teks yang ditulis dalam bahasa Inggris yang hampir alami. Setiap kata yang dicadangkan (dan ada beberapa lusin kata di Object Pascal) membawa pesan kondisional untuk kompiler, yang menganalisis teks program dengan cara yang sama seperti kita membacanya: dari kiri ke kanan dan dari atas ke bawah.

    Komentar, sebaliknya, tidak ada artinya bagi kompiler, dan ia mengabaikannya. Komentar penting bagi pemrogram, yang menggunakannya untuk menjelaskan bagian-bagian tertentu dari program. Adanya komentar pada teks program memperjelas dan memudahkan mengingat ciri-ciri implementasi program yang ditulis beberapa tahun lalu. Dalam Object Pascal, komentar adalah rangkaian karakter apa pun yang diapit kurung kurawal. Dalam teks di atas ada dua komentar seperti itu, tetapi satu baris

    ($R *.RES)

    sebenarnya bukan sebuah komentar. Potongan kode yang ditulis khusus ini disebut arahan kompiler (dalam kasus kami, ini adalah instruksi kepada kompiler untuk menghubungkan apa yang disebut file sumber daya ke program). Direktif dimulai dengan simbol $, yang diikuti dengan kurung kurawal pembuka.

    Karena kita berbicara tentang komentar, saya perhatikan bahwa dalam Object Pascal pasangan karakter (*, *) dan // juga dapat digunakan sebagai pembatas komentar. Tanda kurung (*...*) digunakan seperti kurung kurawal, yaitu sebuah fragmen teks yang terkandung di dalamnya dianggap sebagai komentar, dan simbol // menunjukkan kepada kompiler bahwa komentar tersebut terletak di belakangnya dan berlanjut hingga akhir baris saat ini:

    (Ini adalah komentar)

    (*Ini juga sebuah komentar*)

    //Semua karakter hingga akhir baris ini merupakan komentar

    Kata Program diikuti nama program dan titik koma menjadi judul program. Mengikuti header adalah bagian deskripsi di mana pemrogram (atau Delphi) menjelaskan pengidentifikasi yang digunakan dalam program. Pengidentifikasi menunjukkan elemen program, seperti tipe, variabel, prosedur, fungsi (kita akan membicarakan elemen program nanti). Di sini, dengan menggunakan kalimat yang dimulai dengan kata khusus penggunaan, pemrogram memberi tahu kompiler tentang bagian-bagian program (modul) yang harus dianggap sebagai bagian integral dari program dan yang terletak di file lain. string

    kegunaan

    Formulir, Unit1 di 'Unitl.pas' (fmExample);

    menunjukkan bahwa selain file proyek, program harus menggunakan modul Formulir DAN Unit1. modul Formulir adalah standar (yaitu sudah dikenal Delphi), dan modul Unit1 baru, sebelumnya tidak diketahui, dan Delphi dalam hal ini juga menentukan nama file dengan teks modul (dalam 'uniti.pas') dan nama file deskripsi yang terkait dengan formulir modul (fmExample).

    Badan sebenarnya dari program dimulai dengan kata mulai dan dibatasi oleh terminator yang diakhiri dengan titik. Badannya terdiri dari beberapa pernyataan bahasa Objek Pascal. Setiap pernyataan mengimplementasikan beberapa tindakan - mengubah nilai variabel, menganalisis hasil perhitungan, memanggil subrutin, dll. Badan program kami berisi tiga pernyataan yang dapat dieksekusi:

    Aplikasi.Inisialisasi;

    Aplikasi.CreateForm(TfmExample, fmExample);

    Aplikasi.Jalankan;

    Masing-masing mengimplementasikan panggilan ke salah satu metode objek Aplikasi

    Objek adalah bagian program yang dirancang khusus yang berisi data dan subrutin untuk memprosesnya. Datanya disebut field suatu objek, dan rutinitasnya disebut metodenya. Objek secara keseluruhan dimaksudkan untuk memecahkan masalah tertentu dan dianggap dalam program sebagai satu kesatuan yang tidak dapat dibagi (dengan kata lain, tidak mungkin untuk “menarik” bidang atau metode terpisah dari objek). Objek memainkan peran yang sangat penting dalam bahasa pemrograman modern. Mereka diciptakan untuk meningkatkan produktivitas programmer dan pada saat yang sama meningkatkan kualitas program yang dikembangkannya. Dua properti utama suatu objek - fungsionalitas dan ketidakterpisahan - menjadikannya bagian program yang independen atau bahkan mandiri dan memudahkan untuk mentransfer objek dari satu program ke program lainnya. Pengembang Delphi telah menghadirkan ratusan objek untuk Anda dan saya yang dapat dianggap sebagai batu bata tempat seorang programmer membangun gedung program bertingkat. Prinsip membangun program ini disebut pemrograman berorientasi objek (OOP). Objek Aplikasi berisi data dan rutinitas yang diperlukan agar program Windows berfungsi normal secara keseluruhan. Delphi secara otomatis membuat objek program Aplikasi untuk setiap proyek baru. Garis

    Aplikasi.Inisialisasi;

    berarti memanggil metode Inisialisasi objek Aplikasi. Setelah membaca baris ini, kompiler akan membuat kode yang akan memaksa prosesor untuk mulai mengeksekusi beberapa bagian dari program yang ditulis oleh pengembang Delphi untuk kita. Setelah mengeksekusi fragmen ini (pemrogram mengatakan: setelah keluar dari subrutin), kontrol prosesor akan berpindah ke baris program berikutnya, yang memanggil metode CreateForm, dll.

    Modul adalah unit program yang dirancang untuk menampung fragmen program. Dengan bantuan kode program yang terkandung di dalamnya, seluruh sisi perilaku program diimplementasikan. Setiap modul memiliki struktur berikut: header bagian deklarasi antarmuka bagian implementasi terminator Header dibuka dengan kata yang dicadangkan Unit diikuti dengan nama modul dan titik koma. Bagian deklarasi antarmuka dibuka dengan kata yang dicadangkan Antarmuka, dan bagian implementasi dengan kata implementasi. Terminator suatu modul, seperti terminator suatu program, diakhiri dengan sebuah titik. Fragmen program berikut adalah versi modul yang benar secara sintaksis:

    satuan Unit1;

    antarmuka

    // Bagian deklarasi antarmuka

    penerapan

    // Bagian implementasi

    akhir.

    Bagian deklarasi antarmuka menjelaskan elemen program (tipe, kelas, prosedur, dan fungsi) yang akan 'terlihat' oleh modul program lain, dan bagian implementasi mengungkapkan cara kerja elemen ini. Membagi modul menjadi dua bagian memberikan mekanisme yang mudah untuk bertukar algoritma antara bagian-bagian terpisah dari program yang sama. Ini juga mengimplementasikan sarana berbagi pengembangan perangkat lunak antara pemrogram individu. Setelah menerima modul "asing" yang dikompilasi, pemrogram hanya memperoleh akses ke bagian antarmukanya, yang, sebagaimana telah disebutkan, berisi deklarasi elemen. Detail implementasi prosedur, fungsi, kelas yang dideklarasikan disembunyikan di bagian implementasi dan tidak tersedia untuk modul lain.

    Kelas berfungsi sebagai alat utama untuk mengimplementasikan fitur-fitur canggih Delphi. Kelas adalah model tempat objek dibuat, dan sebaliknya, objek adalah turunan dari implementasi kelas. Pola pembuatan elemen program di Object Pascal disebut tipe, jadi kelas TfmExampel adalah tipe. Deklarasinya didahului oleh tipe kata yang dicadangkan, yang memberi tahu kompiler bahwa bagian deklarasi tipe telah dimulai.

    Kelas TForm standar mengimplementasikan semua yang diperlukan untuk membuat dan mengoperasikan jendela Windows yang kosong. Kelas TfmExampel diturunkan dari kelas ini, sebagaimana dibuktikan dengan garis

    Contoh Tfm = kelas(TForm)

    di mana nama kelas induk ditunjukkan dalam tanda kurung setelah kelas kata yang dicadangkan. Istilah "turunan" berarti bahwa kelas TfmExample mewarisi semua kemampuan kelas TForm induk dan menambahkan miliknya sendiri dalam bentuk komponen tambahan yang dimasukkan ke dalam formulir fmExample. Daftar komponen yang kami sisipkan merupakan bagian penting dari deskripsi kelas.

    Properti pewarisan oleh kelas turunan dari semua properti kelas induk dan memperkayanya dengan kemampuan baru adalah salah satu prinsip dasar pemrograman berorientasi objek. Ahli waris baru dapat dihasilkan dari ahli waris, yang akan berkontribusi dalam bentuk komponen perangkat lunak tambahan, dll. Akibatnya, hierarki kelas percabangan dibuat, di atasnya adalah kelas paling sederhana TObject (semua kelas lain di Delphi berasal dari nenek moyang tunggal ini), dan di tingkat paling bawah dari hierarki terdapat kelas keturunan kuat yang mampu memecahkan masalah apa pun.

    Objek fmExampie secara formal mengacu pada elemen program yang disebut variabel. Inilah sebabnya mengapa deklarasi objek didahului dengan kata khusus var (dari variabel bahasa Inggris).

    Elemen program adalah bagian minimal yang tidak dapat dibagi-bagi yang masih memiliki arti tertentu bagi penyusunnya. Elemennya meliputi:

    kata-kata yang dilindungi undang-undang;

    pengidentifikasi;

    jenis;

    konstanta;

    variabel;

    tag;

    subrutin;

    komentar.

    Kata-kata cadangan adalah kata-kata bahasa Inggris yang memberitahu kompiler untuk melakukan tindakan tertentu. Kata-kata yang dicadangkan tidak dapat digunakan dalam suatu program untuk tujuan apa pun selain dari tujuannya. Misalnya, kata yang dicadangkan mulai menunjukkan kepada kompiler awal dari pernyataan majemuk. Seorang pemrogram tidak dapat membuat dalam sebuah program sebuah variabel bernama Begin, sebuah konstanta Begin, sebuah label Begin, atau elemen program lain bernama Begin.

    Pengidentifikasi adalah kata-kata yang digunakan pemrogram untuk menunjuk elemen apa pun dari program selain kata khusus, pengidentifikasi, atau komentar. Identifier pada Object Pascal dapat terdiri dari huruf latin, angka arab dan garis bawah. Tidak ada karakter lain atau karakter khusus yang boleh muncul di pengidentifikasi. Dari aturan sederhana ini dapat disimpulkan bahwa pengidentifikasi tidak boleh terdiri dari beberapa kata (Anda tidak dapat menggunakan spasi) atau menyertakan karakter Sirilik (abjad Rusia).

    Tipe adalah konstruksi bahasa khusus yang diperlakukan oleh kompiler sebagai templat untuk membuat elemen program lain, seperti variabel, konstanta, dan fungsi. Tipe apa pun mendefinisikan dua hal penting bagi kompiler: jumlah memori yang dialokasikan untuk mengakomodasi elemen (konstanta, variabel, atau hasil yang dikembalikan oleh suatu fungsi), dan serangkaian tindakan valid yang dapat dilakukan pemrogram pada elemen tipe ini. Saya perhatikan bahwa setiap pengidentifikasi yang ditentukan pemrogram harus dijelaskan di bagian deskripsi (sebelum dimulainya pernyataan yang dapat dieksekusi). Artinya kompiler harus mengetahui tipe (pola) dari mana elemen yang ditentukan oleh pengidentifikasi dibuat.

    Konstanta menentukan area memori yang tidak dapat mengubah nilainya selama eksekusi program. Seperti elemen program lainnya, konstanta dapat memiliki namanya sendiri. Deklarasi nama konstanta harus didahului dengan kata yang dicadangkan const (dari bahasa Inggris konstanta – konstanta). Misalnya, kita dapat mendefinisikan konstanta const

    Kbita = 1024;

    Mbita = Kbita*Kbita;

    GBita = 1024*MBita;

    sehingga bukan angka yang panjang

    1048576 (1024*1024) dan 1073741824

    (1024*1024*1024) tulis masing-masing Mbyte dan Gbyte. Jenis konstanta ditentukan oleh cara penulisannya dan mudah dikenali oleh kompiler dalam teks program, sehingga pemrogram tidak boleh menggunakan konstanta bernama (yaitu, tidak mendeklarasikannya secara eksplisit dalam program).

    Variabel diasosiasikan dengan area memori yang bisa berubah, yaitu dengan area memori yang isinya akan berubah selama pengoperasian program. Berbeda dengan konstanta, variabel selalu dideklarasikan dalam program. Untuk melakukan ini, setelah pengidentifikasi variabel, tempatkan titik dua dan nama tipe pada gambar yang variabelnya harus dibuat. Bagian deklarasi variabel harus diawali dengan kata var. Misalnya:

    var

    inValue: Integer;

    berdasarkanNilai: Byte;

    Di sini, pengidentifikasi inValue dideklarasikan sebagai variabel integer, dan pengidentifikasi byValue dideklarasikan sebagai variabel Byte. Tipe integer standar (yaitu, yang telah ditentukan sebelumnya dalam Object Pascal) mendefinisikan wilayah memori empat byte yang isinya diperlakukan sebagai bilangan bulat dalam rentang -2,147,483,648 hingga +2,147,483,647, dan tipe standar Byte mendefinisikan wilayah memori dengan panjang 1 byte , yang menyimpan bilangan bulat tak bertanda dalam rentang 0 hingga 255 4 . Semua informasi yang diberikan mengenai rentang nilai yang mungkin dan kapasitas memori tipe standar berlaku untuk Delphi 32. Untuk 16-bit versi 1, nilai-nilai ini memiliki arti yang berbeda, misalnya tipe Integer di versi 1 membutuhkan 2 busur dan memiliki rentang nilai dari -32.768 hingga +32.767.

    Label adalah nama pernyataan program. Label sangat jarang digunakan dan hanya agar pemrogram dapat menunjukkan kepada kompiler pernyataan program mana yang harus dijalankan selanjutnya. Label, seperti halnya variabel, selalu dideklarasikan dalam suatu program. Bagian deklarasi label diawali dengan label kata yang dicadangkan.

    Subrutin adalah bagian program yang dirancang khusus. Fitur luar biasa dari subrutin adalah independensinya yang signifikan dari teks program lainnya. Sifat-sifat subrutin dikatakan terlokalisasi di tubuhnya. Artinya jika pemrogram mengubah sesuatu di subrutin, biasanya dia tidak perlu mengubah apa pun di luar subrutin karenanya. Dengan demikian, subrutin adalah sarana untuk menyusun program, yaitu membagi program menjadi beberapa bagian yang sebagian besar independen. Penataan tidak dapat dihindari untuk proyek perangkat lunak yang besar, sehingga subrutin sangat sering digunakan dalam program Delphi.

    Ada dua macam rutin di Object Pascal: prosedur dan fungsi. Suatu fungsi berbeda dari prosedur hanya karena pengidentifikasinya dapat digunakan dalam ekspresi bersama dengan konstanta dan variabel, karena fungsi tersebut memiliki hasil keluaran dengan tipe tertentu. Jika, misalnya, suatu fungsi didefinisikan

    Fungsi Fungsi Saya: Integer;

    dan variabel var

    X: Bilangan Bulat;

    maka operator penugasan berikut dimungkinkan:

    X:= 2*Fungsi Saya-l;

    Nama prosedur tidak dapat digunakan dalam ekspresi karena prosedur tersebut tidak memiliki hasil yang terkait dengannya:

    Prosedur Prosedur Saya;

    :

    X:= 2*Prosedur Saya-l; // Kesalahan!

    2.2 C++

    C++, perpanjangan dari bahasa C, dikembangkan oleh Bjarne Stroustrop, seorang karyawan pusat penelitian AT&T Bell Laboratories (New Jersey, AS), pada tahun 1979. C++ berisi semua yang ada di C. Namun, selain itu, mendukung pemrograman berorientasi objek (Object Oriented Programming, OOP). C++ awalnya dibuat untuk memudahkan pengembangan program berukuran besar. Pemrograman berorientasi objek adalah pendekatan baru untuk membuat program.

    Kecuali untuk detail kecil, C++ adalah superset dari bahasa pemrograman C. Selain kemampuan yang disediakan C, C++ menyediakan cara yang fleksibel dan efisien untuk mendefinisikan tipe baru. Dengan menggunakan definisi tipe baru yang sangat sesuai dengan konsep aplikasi, pemrogram dapat membagi program yang sedang dikembangkan menjadi bagian-bagian yang mudah dikelola. Metode pembuatan program ini sering disebut abstraksi data. Informasi tipe terkandung dalam beberapa objek tipe yang ditentukan pengguna. Objek seperti ini sederhana dan dapat diandalkan untuk digunakan dalam situasi dimana tipenya tidak dapat ditentukan pada waktu kompilasi. Pemrograman yang menggunakan objek seperti ini sering disebut berorientasi objek. Jika digunakan dengan benar, metode ini menghasilkan program yang lebih pendek, mudah dipahami, dan mudah dikendalikan.

    Konsep kunci dalam C++ adalah kelas. Kelas adalah tipe yang ditentukan pengguna. Kelas menyediakan penyembunyian data, jaminan inisialisasi data, konversi tipe implisit untuk tipe yang ditentukan pengguna, pengaturan tipe dinamis, manajemen memori yang dikontrol pengguna, dan mekanisme kelebihan beban operator. C++ menyediakan cara yang jauh lebih baik untuk mengekspresikan modularitas program dan pengecekan tipe dibandingkan C. Bahasa ini juga mengalami peningkatan yang tidak terkait langsung dengan kelas, termasuk konstanta simbolik, substitusi fungsi sebaris, parameter fungsi default, nama fungsi yang kelebihan beban, operasi manajemen memori bebas, dan tipe referensi. C++ mempertahankan kemampuan bahasa C untuk bekerja dengan objek perangkat keras dasar (bit, byte, kata, alamat, dll.). Hal ini memungkinkan Anda untuk mengimplementasikan tipe yang ditentukan pengguna dengan sangat efisien.

    C++ dan pustaka standarnya dirancang agar portabel. Implementasi bahasa saat ini akan berjalan di sebagian besar sistem yang mendukung C. Program C++ dapat menggunakan pustaka C, dan sebagian besar alat yang mendukung pemrograman C dapat digunakan dengan C++

    Program C++ biasanya terdiri dari sejumlah besar file sumber, masing-masing berisi deklarasi tipe, fungsi, variabel, dan konstanta. Agar nama yang digunakan dalam file sumber berbeda dapat merujuk ke objek yang sama, nama tersebut harus dideklarasikan sebagai eksternal. Misalnya:

    akar ganda eksternal(ganda);

    cin instream eksternal;

    Cara paling umum untuk memastikan konsistensi antara file sumber adalah dengan menempatkan deklarasi tersebut di file terpisah yang disebut file header (atau header), dan kemudian menyertakan, yaitu, menyalin, file header ini ke semua file yang memerlukan deklarasi ini. Misalnya, jika deskripsi sqrt disimpan dalam file header untuk fungsi matematika standar math.h, dan Anda ingin mengekstrak akar kuadrat dari 4, Anda dapat menulis:

    #termasuk

    //…

    x = kuadrat(4);

    Karena file header biasa disertakan dalam banyak file sumber, file tersebut tidak berisi deskripsi yang tidak boleh diulang. Misalnya, badan fungsi diberikan hanya untuk fungsi inline-inline (lihat paragraf ini) dan penginisialisasi diberikan hanya untuk konstanta (lihat paragraf ini). Kecuali dalam kasus ini, file header adalah tempat penyimpanan informasi tipe. Ini menyediakan antarmuka antara bagian-bagian program yang dikompilasi secara terpisah.

    Dalam perintah include, nama file yang diapit tanda kurung siku, misalnya, mengacu pada file dengan nama tersebut di direktori standar (seringkali /usr/include/CC); file yang terletak di lokasi lain direferensikan menggunakan nama yang diapit tanda kutip ganda.

    Misalnya:

    #sertakan "matematika1.h"

    #termasuk "/usr/bs/math2.h"

    akan menyertakan math1.h dari direktori pengguna saat ini dan math2.h dari direktori /usr/bs.

    Berikut adalah contoh lengkap yang sangat kecil dari sebuah program di mana string didefinisikan dalam satu file dan dicetak di file lain. File header.h mendefinisikan tipe yang diperlukan:

    // header.h

    karakter eksternal* nama_prog;

    kekosongan eksternal f();

    File main.c berisi program utama:

    // utama.c

    #sertakan "header.h"

    char* prog_name = "bagus, tapi lengkap";

    utama()

    {

    F();

    }

    dan file f.c mencetak baris:

    //f.c

    #termasuk

    #sertakan "header.h"

    batal f()

    {

    cout<< prog_name << «\n»;

    }

    Misalnya, Anda dapat mengkompilasi dan menjalankan program seperti ini:

    $ CC main.c f.c -o konyol

    $konyol

    bagus tapi lengkap

    $

    Bahasa yang mendukung lokalisasi data, abstraksi data, dan teknologi pemrograman berorientasi objek, agar menjadi bahasa tujuan umum, juga harus:

    Diimplementasikan pada komputer tradisional;

    Jalankan di lingkungan sistem operasi tradisional;

    Bersaing dengan bahasa pemrograman tradisional dalam hal efisiensi saat menjalankan program;

    Cocok untuk sebagian besar kemungkinan aplikasi.

    Artinya, fasilitas untuk aplikasi numerik yang efisien harus disertakan (aritmatika mengambang tanpa overhead, jika tidak, Fortran akan lebih menarik). Kemampuan akses memori harus diaktifkan (yang diperlukan untuk menulis driver). Harus ada peluang untuk mengakses fungsi (panggilan panggilan) yang konsisten dengan antarmuka sistem operasi tertentu. Dan, selain itu, fungsi yang ditulis dalam bahasa lain harus dapat diakses dan sebaliknya, ke fungsi yang ditulis dalam bahasa berorientasi objek dari bahasa lain.

    Tabel 1 menunjukkan kelebihan dan kekurangan bahasa berorientasi objek.

    Tabel 1 - Kelebihan dan kekurangan bahasa berorientasi objek

    pro

    Minus

    Kelas memungkinkan Anda membuat komponen yang berguna dengan alat sederhana, yang memungkinkan untuk mengabstraksi detail implementasi

    Harus memahami konsep dasar seperti kelas, pewarisan, dan pengikatan dinamis

    Data dan operasi bersama-sama membentuk entitas tertentu dan tidak “tersebar” di seluruh program, seperti yang sering terjadi pada pemrograman prosedural.

    Dapat digunakan kembali mengharuskan pemrogram untuk terbiasa dengan perpustakaan kelas besar

    Lokalisasi kode dan data meningkatkan visibilitas dan pemeliharaan perangkat lunak

    Merancang kelas adalah tugas yang jauh lebih sulit daripada menggunakannya

    Enkapsulasi informasi melindungi data paling penting dari akses tidak sah.

    Sangat sulit untuk mempelajari kelas tanpa bisa “menyentuhnya”.

    Memungkinkan Anda membuat sistem yang dapat diperluas

    Inefisiensi dalam hal alokasi memori

    Teknologi berorientasi objek memberi pengguna peningkatan kinerja sepanjang siklus hidup perangkat lunak, sehingga menghasilkan laba atas investasi yang nyata. Peningkatan kinerja dicapai bila terdapat empat sifat utama sistem berorientasi objek dan manfaat yang dihasilkan:

    penggunaan objek sebagai model dasar memungkinkan pengguna untuk mensimulasikan sistem dunia nyata yang kompleks;

    fleksibilitas teks berorientasi objek menghasilkan respons cepat terhadap perubahan kebutuhan pengguna;

    penggunaan kembali komponen standar mengurangi waktu pengembangan tugas aplikasi baru dan volume kode yang dihasilkan;

    kesederhanaan perangkat lunak membuatnya lebih fleksibel dan mengurangi biaya pengoperasian.

    Seiring dengan keuntungan nyata ini, penggunaan bahasa berorientasi objek dan lingkungan pemrograman memfasilitasi pengembangan perangkat lunak tambahan. Pembuatan prototipe antarmuka yang cepat memungkinkan Anda menguji respons pengguna apa pun bagian utama tugas aplikasi. Nilai dari pendekatan ini paling jelas terlihat pada proyek yang tugas penerapannya tidak jelas atau sulit dipahami.

    Saat ini, hanya ada sedikit ukuran objektif pertumbuhan produktivitas karena sebagian besar proyek yang berkaitan dengan sistem berorientasi objek masih dalam tahap awal. Salah satu perusahaan, STC Technology (UK), yang membuat perkiraan komparatif, menghitung bahwa tahap pengembangan proyek berorientasi objek memakan waktu separuh waktu dibandingkan tugas serupa dalam sistem tradisional dan memerlukan seperempat jam kerja.

    Keuntungan besar pertama dari sistem berorientasi objek berasal dari sifat hubungannya dengan dunia nyata. Seorang pengembang dapat merancang sistem fisik menjadi sistem perangkat lunak dengan terlebih dahulu mendefinisikan semua objek fisik penting dan objek perangkat lunak terkait. Kelompok objek fisik terkait dipetakan ke dalam kelas, yang dapat disusun menjadi hierarki, dimulai dengan kelas umum dan menambahkan subkelas khusus ke dalamnya. Prosedur-prosedur yang umum pada beberapa kelas berada dalam superkelasnya yang sama dan diwarisi oleh kelas-kelas tersebut.

    Misalnya, dalam sistem pengukuran yang dikembangkan di Combuston Engineering (Columbus, Ohio), sekelompok sensor diwakili oleh kelas Sensor yang mendefinisikan properti umum semua sensor. Subkelas ditentukan untuk setiap jenis sensor dalam sistem, seperti optik atau inframerah. Mereka mewarisi prosedur umum yang berlaku untuk semua sensor dan berisi prosedur tambahan yang hanya berlaku untuk sensor optik atau inframerah.

    Pendekatan berorientasi objek mengurangi kesenjangan konseptual antara dunia nyata dan model komputer. Hal ini memungkinkan analis dan desainer untuk memahami dengan jelas struktur sistem. Seperti yang dicatat oleh salah satu pengguna: “Saya dapat mewakili pemikiran saya dengan teks program dalam bentuk yang saya pikirkan.” Oleh karena itu, saat ini sistem berorientasi objek digunakan untuk memodelkan sistem fisik yang kompleks di bidang manufaktur, telekomunikasi, serta aplikasi militer dan pertahanan.

    Keuntungan kedua dari sistem berorientasi objek berasal dari cara objek saling berhubungan melalui pesan. Dalam contoh di atas, pesan umum seperti “mulai pengukuran” dapat dikirim ke semua sensor dalam sistem; masing-masing dari mereka merespons dengan cara tertentu. Jika salah satu sensor fisik sudah usang, maka akan diganti. Pada saat yang sama, kelas sistem yang sesuai berubah: untuk jenis sensor baru, kelas baru diperkenalkan, berisi prosedur khusus untuk sensor baru. Kelas baru mewarisi sisa prosedur yang diperlukan dari superkelas. Saat sensor baru menerima pesan umum, sensor tersebut akan meresponsnya. Inti dari keseluruhan sistem dan pesan umum tetap tidak berubah.

    Fleksibilitas sistem berorientasi objek merupakan keuntungan tersendiri bagi pengguna dalam lingkungan yang berubah dengan cepat seperti teknologi pemrograman. Misalnya, Computer Science Corporation menggunakan bahasa berorientasi objek Smalltalk untuk mengembangkan produk Design Generator-nya. Perusahaan mencatat bahwa berkat penggunaan teknologi berorientasi objek, pengembang program dapat dengan cepat merespons tren pasar baru dalam lingkungan yang semakin kompetitif.

    Keuntungan ketiga dari sistem berorientasi objek adalah kelas dapat mewarisi prosedur dari kelas lain. Sebuah perusahaan dapat mengkompilasi perpustakaan dari kelas-kelas yang paling umum digunakan, berisi prosedur yang dirancang untuk kebutuhan spesifik dan digunakan dalam tugas-tugas aplikasi selanjutnya. Misalnya, perusahaan pengembangan perangkat lunak mungkin membuat perpustakaan kelas untuk grafis primitif seperti silinder, kerucut, atau bola. Ini membentuk dasar untuk subkelas seperti bagian kerucut atau bagian. Penggunaan kembali kode sumber mengurangi waktu pengembangan dan memungkinkan desainer memecahkan masalah dengan percaya diri di berbagai bidang.

    Di masa lalu, perpustakaan rutin digunakan oleh pengembang perangkat lunak untuk memecahkan masalah standar seperti perhitungan matematis. Sistem berorientasi objek memungkinkan penggunaan kembali teks program yang lebih luas. Salah satu pengguna pertama, Cadre Technologies, menghitung bahwa volume kode untuk tugas aplikasi baru berkurang dengan rasio 5:1 saat menggunakan program berorientasi objek.

    Perpustakaan objek juga dapat dibeli dari vendor independen. Saat ini, perpustakaan kelas tersebut paling aktif dibeli untuk membuat antarmuka pengguna dengan ikon. Merancang dan menulis antarmuka seperti itu dari awal bukanlah tugas yang mudah. Perusahaan seperti Apple dan Whitewater Group menyediakan alat untuk membangun antarmuka seperti itu dengan cepat berdasarkan beberapa kelas dasar seperti Window, Menu, ScrollBar, dan Icon. Pengguna dapat menggunakan kelas-kelas ini dan subkelasnya yang menambahkan, misalnya, ikon khusus ke antarmuka.

    Keuntungan keempat terletak pada cara modul perangkat lunak berorientasi objek dikemas. Perangkat lunak tradisional terdiri dari data dan prosedur yang mengakses dan mengubah data. Data dan prosedur dikemas secara terpisah, sehingga mengubah struktur data mempengaruhi modul berbeda yang ditulis oleh pengguna berbeda. Dalam sistem berorientasi objek, data dan prosedur dianggap bersama sebagai bagian dari satu paket—sebuah objek. Ketika data berubah, semua prosedur yang terlibat mudah diidentifikasi dan diubah secara bersamaan. Karena perubahan hanya berdampak pada satu area sistem, maka efek limpahannya pada keseluruhan sistem berkurang.

    Diketahui bahwa biaya pemeliharaan mencapai 80% dari biaya siklus hidup sistem pemrograman. Pengembang sistem besar yang kompleks, yang sering dihadapkan pada kebutuhan untuk memodifikasinya, cenderung menggunakan OOS sebagai salah satu cara untuk mengurangi biaya pemeliharaan dan meningkatkan keandalan produk mereka. Misalnya, Wild Leitz (Toronto, Kanada) menggunakan bahasa berorientasi objek Objective-C untuk mengembangkan sistem informasi geografis. Perusahaan merasa kode sumber dalam bahasa ini lebih mudah dipelihara karena lebih pendek, mandiri, dan mengurangi dampak perubahan satu modul pada sistem lainnya.

    Program yang dirancang dengan baik tidak hanya harus memenuhi persyaratan fungsionalnya, tetapi juga memiliki sifat-sifat seperti:

    dapat digunakan kembali;

    kemungkinan diperpanjang;

    resistensi terhadap data yang salah;

    sistematisitas.

    Gaya pemrograman berorientasi objek yang tepat memastikan bahwa properti ini ada. Mari kita jelaskan hal ini dengan menggunakan contoh sifat sistematika.

    Suatu program mempunyai sifat sistematis jika dapat diterapkan sebagai operator umum dalam “pemrograman blok besar”. Pemrograman blok besar adalah penggunaan sistematis unit perangkat lunak besar yang dikembangkan sebelumnya (seperti kelas, subsistem, atau modul) dalam pengembangan sistem perangkat lunak baru.

    Keterbatasan sistem berorientasi objek (OOS) modern sebagian besar terkait dengan ketidaksempurnaannya. Mengatasi keterbatasan ini merupakan tantangan bagi vendor perangkat lunak dan peluang bagi vendor baru untuk memasuki pasar. Bab ini membahas tantangan pengembangan sistem berorientasi objek dan memberikan garis waktu untuk mengatasi kelemahannya.

    Hambatan utama terhadap sistem berorientasi objek saat ini adalah penolakan dari personel teknis dan manajemen. Perlawanan ini wajar mengingat sifat tidak sempurna dari banyak produk berorientasi objek yang ada di pasaran saat ini. Ketidaksempurnaan ditunjukkan oleh sejumlah masalah yang melekat pada sebagian besar teknologi baru:

    akses terbatas pada sejumlah platform standar;

    perlunya integrasi dengan sistem dan database yang ada;

    kurangnya perangkat lunak untuk memprogram sistem skala besar.

    Keberhasilan teknologi berorientasi objek disebabkan oleh penetrasinya ke dalam arus utama industri komputer. Agar hal ini dapat terwujud, permasalahan-permasalahan di atas harus diatasi. Namun ini merupakan aktivitas yang cukup mahal dan memakan waktu. Beberapa pemasok awal sistem berorientasi objek menambah masalah mereka dengan memilih bahasa kepemilikan non-standar sebagai dasar produk mereka. Setelah menerima investasi modal yang besar, perusahaan-perusahaan tersebut akan menghadapi masalah besar dalam perjuangan untuk menempati ceruk pasar mereka.

    Bahasa berorientasi objek tidak dapat sepenuhnya bergantung pada mekanisme yang tidak diterapkan secara efektif pada arsitektur tradisional, dan bahasa tersebut masih dimaksudkan untuk digunakan sebagai bahasa tujuan umum. Hal yang sama juga berlaku untuk pengumpulan sampah, yang dapat menjadi penghambat kinerja dan portabilitas. Kebanyakan bahasa berorientasi objek menggunakan pengumpulan sampah untuk menyederhanakan masalah pemrogram dan mengurangi kompleksitas bahasa itu sendiri dan kompilernya. Namun, pengumpulan sampah seharusnya dapat digunakan dalam situasi yang tidak kritis, namun tetap mempertahankan kontrol memori jika diperlukan. Alternatifnya adalah bahasa yang tidak mengumpulkan sampah tetapi memungkinkan Anda merancang tipe yang mengelola memori yang mereka gunakan. Contohnya adalah C++.

    Penanganan pengecualian dan penggunaan sumber daya tertentu juga menimbulkan tantangan. Fitur bahasa apa pun yang diimplementasikan menggunakan editor tautan kemungkinan besar juga akan menimbulkan masalah portabilitas.

    Alternatif untuk memasukkan fitur tingkat rendah ke dalam suatu bahasa adalah dengan menggunakan bahasa tingkat rendah khusus dalam kasus-kasus kritis.

    Pemrograman berorientasi objek merupakan pemrograman yang menggunakan mekanisme pewarisan. Abstraksi data adalah pemrograman menggunakan tipe yang ditentukan pengguna. Dengan sedikit pengecualian, pemrograman berorientasi objek dapat dan harus menjadi generalisasi dari abstraksi data.

    Mekanik ini membutuhkan dukungan bahasa yang tepat agar efektif. Untuk abstraksi data, dukungan bahasa saja sudah cukup; pemrograman berorientasi objek memerlukan alat dari lingkungan perangkat lunak seluruh sistem. Untuk memiliki sifat bahasa tujuan umum, bahasa tersebut harus memungkinkan penggunaan perangkat keras tradisional secara efisien.


    Beras. 3. Diagram sederhana organisasi sistem multi-modul untuk bekerja dengan objek geometris

    Struktur multimodular dari sistem memiliki keuntungan sebagai berikut.

    Kemungkinan diperpanjang. Penambahan kelas baru dan interaksinya dilakukan bukan dengan menulis ulang kode yang sudah ada, tetapi dengan mengembangkan modul baru.

    Kemungkinan penggunaan kembali kode. Modul Objek Geometris dapat disertakan dalam aplikasi apa pun, jika aplikasi tersebut juga memiliki Demo Windows, Anda juga dapat menyertakan Visualisasi.

    Kemungkinan implementasi program tahap demi tahap. Jadi, rilis pertama mungkin menyertakan Objek Geometris, Jendela Demo dan Visualisasi, rilis kedua akan menambahkan Perhitungan, dll.

    Kemungkinan menggunakan metode produksi konveyor, “memparalelkan” proses pengembangan perangkat lunak.

    Ada beberapa alasan mengapa C++ tidak dapat dianggap sebagai bahasa pemrograman dinamis.

    Antarmuka statis dan implementasi kelas. Antarmuka suatu kelas dipahami sebagai kumpulan atribut dan metodenya (ditetapkan oleh deskripsi kelas, biasanya ditempatkan di file header), sedangkan implementasinya adalah kode spesifik yang dieksekusi ketika metode ini dipanggil. Baik yang pertama maupun yang kedua harus ditentukan sebelum kompilasi dimulai; Anda tidak dapat menambahkan variabel atau metode ke kelas atau mengganti yang sudah ada saat run-time.

    Namun ketika mengembangkan modul baru, selalu ada kebutuhan untuk mengubah kelas yang sudah ada! Jadi, saat mengembangkan Perhitungan, Anda mungkin memerlukan fungsi yang menghitung panjang suatu garis, kelengkungannya pada titik tertentu, atau luas suatu bangun. Saat mengembangkan Visualisasi, mungkin diperlukan variabel seperti warna, ketebalan garis; untuk gambar datar, triangulasi (partisi menjadi segitiga) harus sering dibuat. Selain itu, fungsi di atas sangat bergantung pada jenis objek: fungsi tersebut harus ditulis secara terpisah untuk persegi panjang, lingkaran, dan objek geometris sembarang.

    Pemeriksaan tipe statis.

    Saat mengurai ekspresi p->f(), kompiler "harus yakin" bahwa objek yang ditunjuk oleh penunjuk p benar-benar berisi metode f(). Bahkan templat tidak selalu membantu membuat kode yang memproses berbagai jenis objek: pada tahap kompilasi dan perakitan, Anda perlu mengetahui objek mana yang perlu diinstal, mana yang digunakan dalam setiap kasus tertentu. Coba tugas di Listing 1 tanpa mengubah kelas atau menggunakan konstruksi if-then-else + Dynamic_cast.

    /*

    Listing 1. Pemeriksaan tipe statis membatasi penggunaan polimorfisme

    */

    kelas kelas dasar();

    kelas A: kelas dasar publik

    {

    publik:

    A();

    // kelas A berisi metode void f()

    kekosongan maya f();

    };

    kelas B:kelas dasar publik

    {

    publik:

    B();

    // kelas B tidak berisi metode void f()

    };

    kelas C:kelas dasar publik (...);

    /*

    Diperlukan untuk menulis

    (tanpa mengubah kelas di atas dan tanpa menggunakan if-then-else + Dynamic_cast):

    */

    bool CallF(kelas dasar *p)

    {

    /*

    jika p->f() didefinisikan, panggil fungsi ini dan kembalikan nilai true,

    jika tidak, kembalikan salah

    */

    }

    C++ menawarkan tiga cara untuk mengimplementasikan fungsi CallF. Yang pertama (paling sering digunakan) adalah menambahkan metode bool f() ke kelas dasar, di subkelas yang masuk akal - lakukan tindakan yang diperlukan dan kembalikan nilai true, sisanya - kembalikan salah. Yang kedua adalah membuat kelas baseclass_f:baseclass publik, mewarisi semua kelas yang berisi f(), dan menggunakan Dynamic_cast< baseclass_f *>. Yang ketiga adalah if-then-else + Dynamic_cast yang terkenal di CallF. Opsi pertama menyebabkan penyumbatan kelas dasar, dan kelas dasar mungkin tidak dapat diakses (misalnya, terdapat dalam modul "tertutup"). Yang kedua membutuhkan perancangan ulang seluruh sistem objek. Bagaimana jika Anda perlu menulis CallG, CallH? Tentu saja, C++ mendukung pewarisan berganda, namun hierarki kelas dengan pendekatan ini akan menjadi jauh lebih rumit, dan tidak ada gunanya mengubahnya “bolak-balik”. Kerugian dari metode ketiga telah dibahas berkali-kali: fungsi CallF harus ditulis ulang setiap kali kelas baru yang mendukung f() diperkenalkan.

    Ketidakmampuan untuk mengubah objek kelas individual saat run-time. Tampaknya jika objek termasuk dalam kelas yang sama, maka perilakunya juga harus sama. Jika Anda tidak puas dengan kelas yang ada, “warisi” kelas tersebut dan ubah apa pun yang Anda inginkan. Namun, kemampuan untuk mengubah objek individual suatu kelas secara dinamis seringkali sangat berguna. Tentu saja, pewarisan adalah cara yang fleksibel dan nyaman untuk mengubah fungsionalitas kelas. Namun setelah suatu objek dibuat, tidak mungkin lagi mengubah metodenya atau menambahkan metode dan variabel baru. Untuk melakukan ini, Anda perlu menghapus objek yang ada dan kemudian membuat yang baru. Dalam hal ini, Anda perlu berhati-hati dalam memperbarui semua petunjuk ke objek ini dan menyimpan propertinya. Selain itu, jika kelas baru dibuat setiap saat, jumlahnya mungkin melebihi batas wajar.

    Kesimpulan

    Bahasa pemrograman berorientasi objek yang paling umum sejauh ini adalah C++. Sistem pemrograman C++ komersial yang tersedia secara gratis ada di hampir semua platform. Sistem pemrograman G++ yang didistribusikan secara bebas dikenal luas, yang memberikan setiap orang kesempatan untuk menguraikan kode sumber yang dikomentari dengan cukup baik dan menyeluruh dari salah satu kompiler bahasa C++ yang patut dicontoh. Gagasan pokok pendekatan berorientasi objek didasarkan pada ketentuan sebagai berikut: program adalah model dari suatu proses nyata, bagian dari dunia nyata; model dunia nyata atau bagiannya dapat digambarkan sebagai sekumpulan objek yang berinteraksi satu sama lain; suatu objek dijelaskan oleh sekumpulan parameter, yang nilainya menentukan keadaan objek, dan serangkaian operasi (tindakan) yang dapat dilakukan objek; Interaksi antar objek dilakukan dengan mengirimkan pesan khusus dari satu objek ke objek lainnya. Pesan yang diterima oleh suatu objek mungkin memerlukan tindakan tertentu, seperti mengubah keadaan objek; Objek yang dideskripsikan dengan sekumpulan parameter yang sama dan mampu melakukan serangkaian tindakan yang sama merupakan kelas objek dengan tipe yang sama.

    Dari perspektif bahasa pemrograman, kelas objek dapat dianggap sebagai tipe datum, dan objek individual dapat dianggap sebagai datum tipe tersebut. Definisi kelas objeknya sendiri oleh pemrogram untuk serangkaian tugas tertentu harus memungkinkan dia untuk mendeskripsikan tugas individu dalam kaitannya dengan kelas tugas itu sendiri (dengan pilihan nama tipe dan nama objek yang sesuai, parameternya, dan tindakan yang dilakukan).

    Dengan demikian, pendekatan berorientasi objek mengasumsikan bahwa ketika mengembangkan suatu program, kelas objek yang digunakan dalam program harus ditentukan dan deskripsinya harus dibuat, kemudian instance objek yang diperlukan harus dibuat dan interaksi di antara objek tersebut harus ditentukan.

    Seringkali lebih mudah untuk menyusun kelas objek sehingga mereka membentuk struktur hierarki.

    Tentunya, agar pendekatan objek dapat digunakan secara produktif dalam pengembangan program, diperlukan bahasa pemrograman yang mendukung pendekatan ini, yaitu. memungkinkan Anda membuat deskripsi kelas objek, menghasilkan data tipe objek, dan melakukan operasi pada objek. Salah satu bahasa pertama adalah bahasa SmallTalk, di mana semua data adalah objek dari kelas tertentu, dan sistem kelas secara keseluruhan dibangun sebagai struktur hierarki berdasarkan kelas dasar yang telah ditentukan sebelumnya.

    Pengalaman pemrograman menunjukkan bahwa pendekatan metodologis apa pun dalam teknologi pemrograman tidak boleh diterapkan secara membabi buta, mengabaikan pendekatan lain. Hal ini juga berlaku pada pendekatan berorientasi objek. Ada sejumlah masalah umum yang kegunaannya paling jelas; masalah tersebut mencakup, khususnya, tugas pemodelan simulasi dan dialog pemrograman dengan pengguna. Ada juga masalah di mana penggunaan pendekatan objek hanya akan menghasilkan biaya tenaga kerja yang tidak perlu. Dalam hal ini, bahasa pemrograman berorientasi objek, yang memungkinkan penggabungan pendekatan objek dengan metodologi lain, menjadi yang paling luas. Dalam beberapa bahasa dan sistem pemrograman, penggunaan pendekatan objek terbatas pada alat antarmuka pengguna (misalnya, versi awal Visual FoxPro).

    Daftar literatur bekas

  1. Arkhangelsky A. Pemrograman dalam Delphi untuk Windows. Versi 2006, 2007, Turbo Delphi + CD. –M.: Binom. Laboratorium Pengetahuan, 2006.

    Arkhangelsky A. Bahasa C++ di C++ Builder. Referensi dan manual metodologi. – M.: Binom. Laboratorium Pengetahuan, 2008.

    Bucknell J. Algoritma dasar dan struktur data di Delphi. Perpustakaan Pemrogram. – St.Petersburg: Peter, DiaSof, 2006.

    Galiseev G.V. Komponen dalam Delphi 7. Pekerjaan profesional – M.: Williams, 2006.

  2. Gamma E. Teknik desain berorientasi objek. Pola desain. Sankt Peterburg: Peter, 2006.
    Memecahkan masalah berdasarkan teks Hukum Hammurabi Meningkatkan akuntansi aset tetap suatu perusahaan pertanian Kapan batas waktu untuk melakukan inventarisasi aset tetap?

    2014-05-28

Program komputer sering digambarkan sebagai “kumpulan instruksi”, dan bahasa komputer dianggap oleh banyak orang hanya sebagai kosa kata dan cara sintaksis untuk memberikan instruksi tersebut.

Dari sudut pandang ini, bahasa pemrograman yang berbeda mungkin memiliki tata bahasa atau kosakata yang berbeda. Setiap bahasa mungkin memperlakukan titik koma secara berbeda atau memerlukan huruf kapital saat dieja, meskipun pada umumnya semua bahasa didasarkan pada prinsip yang sama.

Namun realitas pemrograman jauh lebih kompleks.

Pemrograman hari ini

Anehnya, sebagian besar ide "global" dalam pemrograman komputer dikembangkan pada tahun 1950-an dan 60-an. Sejak itu, banyak bahasa baru bermunculan, namun tidak satupun yang menerapkan pendekatan yang benar-benar baru terhadap logika dan komputasi.

Perkembangan bahasa pemrograman baru selama beberapa dekade terakhir didasarkan pada pengalaman para pengembang. Artinya, terdapat kode yang lebih mudah untuk ditulis (kekuatan pendorong di balik Ruby) dan lebih mudah dibaca (Python), serta membuat jenis struktur logis dan teknik pemecahan masalah tertentu menjadi lebih intuitif.

Beberapa bahasa dirancang untuk memecahkan masalah pemrograman tertentu (seperti PHP dan SASS), untuk mengelola jenis sistem tertentu (), atau untuk bekerja di lingkungan atau platform tertentu (Java dan JavaScript). Beberapa bahasa dirancang khusus untuk membantu pemula belajar pemrograman (BASIC dan Scratch adalah contoh klasik).

Karena teori dan praktik seputar desain bahasa telah berkembang menjadi (kebanyakan) ortodoksi yang diterima secara luas, banyak pekerjaan baru dan menarik dalam pengembangan praktik pemrograman kini berpusat pada arsitektur sistem.

Perkembangan yang relatif baru mencakup konsep SOA (Service Oriented Architecture). arsitektur berorientasi layanan) dan MVC (Model-View-Controller), serta kerangka kerja seperti , yang memungkinkan pemrogram bekerja dengan mudah dalam paradigma ini.

Daftar bahasa pemrograman

Daftar bahasa pemrograman, markup, dan protokol populer yang terus bertambah. Tautan ke deskripsi masing-masingnya:

Pengkodean ASCII

  • Pengkodean karakter adalah salah satu aspek mendasar dari komputer dan Internet. ASCII adalah sistem pengkodean karakter pertama yang banyak digunakan. Ini telah digantikan oleh UTF-8, namun ASCII masih menjadi dasar bagi sebagian besar karakter di Internet saat ini. Memahami hal ini sangat penting bagi programmer. Baca lebih lanjut di sini (Bahasa Inggris):

ASP/ASP.NET

  • ASP adalah singkatan dari Active Server Page. Ini adalah bahasa skrip sisi server pertama untuk server web Microsoft IIS. ASP telah digantikan oleh kerangka sisi server open source - ASP.NET. Lebih detail (Bahasa Inggris):

LISP Otomatis

  • AutoLISP adalah bahasa pemrograman sederhana, ringan, dan ditafsirkan yang dirancang khusus untuk desain perangkat lunak berbantuan komputer. Baca tentang itu (Bahasa Inggris):

Awk

  • Awk adalah bahasa pemrograman pengolah kata yang sangat kuat yang memungkinkan Anda mengekstrak data dari file atau sumber lain dan mengeluarkannya dalam format apa pun yang Anda perlukan. Ini adalah alat lama, tetapi masih berguna seperti sebelumnya. Cari tahu lebih lanjut (Bahasa Inggris): .

PESTA

  • Bash adalah antarmuka baris perintah yang paling umum digunakan di dunia Unix. Ini adalah antarmuka berbasis teks default untuk Linux dan Mac OS X. Baca selengkapnya:

Cadel Umum

  • Lisp adalah bahasa pemrograman yang cukup unik, mungkin bahasa tertua dan masih digunakan sampai sekarang. Hal ini sangat penting dalam bidang kecerdasan buatan. Lebih detail (Bahasa Inggris):

C

  • Jika kita memasukkan dua turunan dari bahasa ini di sini, maka kita dapat dengan aman mengatakan bahwa tidak ada bahasa yang lebih berguna dan lebih berpengaruh daripada C. Hal ini sangat penting untuk pengembangan sistem operasi dan perangkat lunak lainnya. Banyak compiler dan interpreter untuk bahasa lain ditulis dalam C. Baca selengkapnya:

C++

  • Awalnya disebut “C dengan kelas”, C++ dalam banyak hal hanyalah penerus C yang lebih maju (walaupun situasinya secara keseluruhan lebih kompleks). C++ dirancang untuk menambahkan paradigma pemrograman C tingkat tinggi sambil mempertahankan kemampuan manipulasi perangkat keras tingkat rendah. Banyak dari tambahan ini telah ditambahkan ke C selama bertahun-tahun, dan bahasa-bahasa tersebut lebih seperti dua dialek dari bahasa yang sama. Lebih detail (Bahasa Inggris):

C#

  • Digunakan sebagai bahasa utama untuk pemrograman .NET, mirip dengan C++, ini merupakan perpanjangan dari bahasa pemrograman C, tetapi dengan tambahan penting kemampuan berorientasi objek. Lebih detail (Bahasa Inggris):

CSS/CSS3

  • CSS, atau Cascading Style Sheets, juga bukan bahasa pemrograman, melainkan bahasa gaya halaman - bahasa yang menyediakan aturan gaya dan tata letak untuk dokumen dan aplikasi. Ini adalah gaya bahasa utama yang digunakan di Internet. Keterangan lebih lanjut:

Emacs Cadel

  • Emacs telah lama dikenal sebagai editor teks yang populer dan kuat. Namun menambahkan Emacs Lisp ke dalamnya akan mengubahnya menjadi lingkungan pengembangan terintegrasi untuk hampir semua bahasa pemrograman. Lebih detail (Bahasa Inggris): .

F#

  • F# adalah bahasa pemrograman tujuan umum. Dirancang untuk menjadi sangat efektif. Awalnya hanya bahasa Microsoft, sekarang menjadi bahasa sumber terbuka dan digunakan di semua platform. Lebih detail (Bahasa Inggris): .

FORTAN

  • Fortran pertama kali muncul pada tahun 1957 dan masih digunakan untuk memecahkan beberapa masalah paling kompleks dalam sains dan teknologi modern. Lebih detail (Bahasa Inggris):

KE DEPAN

  • Pengerjaan Forth dimulai pada tahun 1968, dan bahasa ini biasanya digunakan pada perangkat keras yang tidak memiliki sistem operasi tradisional. Ini juga banyak digunakan untuk mengontrol peralatan mesin. Lebih detail (Bahasa Inggris):

Haskell

  • Haskell adalah salah satu bahasa pemrograman fungsional yang paling populer, selain menjadi prototipe untuk selusin bahasa lainnya. Ini banyak digunakan di kalangan bisnis dan akademis dan merupakan bahasa yang bagus untuk memulai ketika belajar tentang pemrograman fungsional. Lebih detail (Bahasa Inggris):

HTML

  • HTML bukanlah bahasa pemrograman. Ini adalah bahasa markup - bahasa untuk menambahkan anotasi semantik dan gaya ke konten. Ini adalah bahasa utama untuk konten web. Pengetahuan tentang hal ini diperlukan dan wajib bagi semua perancang web dan pengembang web, serta setiap orang (penulis, editor) yang memproduksi konten Internet. Lebih detail (Bahasa Inggris): dan

IDL

  • IDL, atau Bahasa Data Interaktif, adalah bahasa pemrograman yang terutama digunakan untuk analisis dan visualisasi data. Ini masih banyak digunakan di bidang kedirgantaraan dan astronomi. Lebih detail (Bahasa Inggris):

INTERKAL

  • INTERCAL adalah bahasa komputer parodi yang dikembangkan pada awal tahun 1970-an. Itu dibuat sebagai lelucon untuk menunjukkan betapa bahasa secara teknis rumit dan sulit dibaca. Ini adalah bahasa nyata yang dapat Anda unduh, dan dengan itu Anda bahkan dapat melakukan sesuatu. Diasumsikan bahwa Anda harus sangat familiar dengannya untuk melakukan ini - tetapi, sekali lagi, tidak terlalu baik, karena INTERCAL sendiri juga tidak akan menyukainya. Lebih detail (Bahasa Inggris):

Jawa

  • Java adalah bahasa tingkat tinggi yang dirancang untuk digunakan pada Mesin Virtual Java. Ia memiliki sangat sedikit ketergantungan eksternal, dan dirancang untuk dijalankan pada mesin fisik apa pun. Ini banyak digunakan dalam arsitektur jaringan, serta pada perangkat tertanam dan aplikasi komputasi lainnya. Lebih detail (Bahasa Inggris): .

skrip java

  • JavaScript (sebenarnya tidak terkait dengan Java) adalah bahasa skrip yang awalnya dirancang untuk digunakan di browser web. Oleh karena itu, ia memiliki kemampuan bawaan untuk bekerja dengan Document Object Model (DOM), representasi konten halaman web dalam memori. Ini adalah bahasa pemrograman utama untuk pengembangan web front-end. Bahasa ini terutama digerakkan oleh peristiwa dan, berkat Node.JS, baru-baru ini mendapat pengakuan sebagai bahasa sisi server. Lebih detail (Bahasa Inggris): dan. Dan di sini:

Ksh

  • Korn Shell (ksh) adalah antarmuka baris perintah yang digunakan di Unix. Itu adalah shell awal, kompatibel dengan shell Bourne standar, tetapi dengan semua fitur interaktif keren dari shell C.

Pemrograman Linux

  • Pemrograman Linux mencakup segalanya mulai dari skrip shell hingga pengembangan aplikasi hingga pengembangan kernel. Lebih detail (Bahasa Inggris):

Logo

  • Logo adalah salah satu bahasa paling awal untuk pengajaran pemrograman, dan mungkin masih yang paling terkenal. Ia terkenal dengan kura-kuranya, yang digerakkan oleh anak-anak dengan perintah komputer. Cara yang menyenangkan untuk mengajarkan pemrograman. Lebih detail (Bahasa Inggris):

M.L.

  • ML awalnya dirancang sebagai bahasa pemrograman meta: bahasa untuk membuat bahasa lain. Namun seiring berjalannya waktu, bahasa ini menjadi bahasa tujuan umum, banyak digunakan dalam pendidikan, matematika, sains, dan bahkan keuangan. Lebih detail (Bahasa Inggris): .

MPI

  • Message Passing Interface adalah protokol standar untuk mengirim pesan antar proses atau program. Ini telah diimplementasikan dalam sejumlah bahasa pemrograman, termasuk C, C++, Java dan Python. Berkat MPI, komputasi paralel menjadi mungkin. Lebih detail (Bahasa Inggris):

Pemrograman jaringan dengan soket internet

Tujuan-C

  • Versi lain dari C, dibuat pada tahun 1980an untuk menyediakan implementasi C yang sepenuhnya berorientasi objek. Penggunaan utama bahasa ini saat ini adalah pada sistem operasi Mac OSX dan iOS. Sampai saat ini, aplikasi iOS harus ditulis dalam Objective-C, namun kini Anda juga dapat menulis dalam Swift. Lebih detail (Bahasa Inggris):

Ocaml

  • OCaml adalah bahasa komputer fungsional berorientasi objek. Dalam tradisi ML, ini banyak digunakan untuk menulis bahasa pemrograman dan framework lain. Lebih detail (Bahasa Inggris): .

Pengembangan sistem operasi

  • Pekerjaan pemrograman Everest dianggap sebagai pengembangan sistem operasi. Jika Anda ingin membuktikan pada diri sendiri bahwa Anda bisa menulis apa pun, maka tidak ada yang lebih baik daripada menulis kernel sistem operasi Anda sendiri dan alat terkaitnya. Namun hati-hati: ini adalah perjalanan hanya untuk pemrogram yang berani dan sejati! Lebih detail (Bahasa Inggris): .

Perl

  • Alat yang sangat berguna untuk hampir semua programmer. Sebagai bahasa yang ditafsirkan, tidak perlu dikompilasi, kadang-kadang disebut sebagai “Pisau Swiss Army” dari bahasa skrip. Lebih detail (Bahasa Inggris):

PROLOG

  • Prolog adalah bahasa pemrograman logika yang dirancang untuk pemrosesan bahasa alami. Lebih detail (Bahasa Inggris):

Data Murni

  • Data Murni adalah bahasa pemrograman visual yang unik. Itu dibuat khusus untuk memungkinkan pengguna membuat karya video, audio dan grafis. Lebih detail (Bahasa Inggris): .

ular piton

  • Python adalah bahasa pemrograman tingkat tinggi. Bahasa yang ditafsirkan (tidak dikompilasi), juga dikenal sebagai “bahasa skrip”. Terutama digunakan sebagai alat untuk melakukan tugas pemrograman khusus seperti tugas otomatisasi dan analisis data. Ia memiliki seperangkat alat yang kuat untuk perhitungan matematis dan ilmiah dan sering digunakan oleh para peneliti. Lebih detail (Bahasa Inggris):

Ruby di Rel

  • Ruby on Rails adalah kerangka pengembangan web untuk bahasa pemrograman Ruby. Ini menyediakan arsitektur MVC (Model View Controller), lapisan abstraksi database, dan banyak alat untuk mempercepat proses pemrograman aplikasi web. Sangat populer untuk pengembangan aplikasi web yang cepat. Lebih detail (Bahasa Inggris):

SAS

  • SAS adalah bahasa khusus yang dirancang untuk menganalisis data statistik. Banyak digunakan di pemerintahan, akademisi dan bisnis. Bagi orang-orang yang memiliki banyak data, SAS adalah pilihan yang tepat. Lebih detail (Bahasa Inggris): .

Skala

  • Scala adalah bahasa yang relatif baru - kurang lebih merupakan Java yang lebih baru dan lebih baik. Ini adalah bahasa yang bagus untuk pemrogram Java yang ingin menjadi lebih efisien, atau untuk orang yang baru mulai belajar pemrograman dan ingin mempelajari bahasa yang kuat yang tidak akan membatasi mereka di masa depan. Lebih detail (Bahasa Inggris): .

Skema

  • Skema adalah bahasa lama, namun masih digunakan untuk mengajarkan pemrograman dan mata pelajaran ilmu komputer yang lebih maju. Sebagian besar didasarkan pada Lisp, dan sebagian lagi pada ALGOL. Lebih detail (Bahasa Inggris): .

Menggores

  • Bahasa pemrograman Scratch diciptakan khusus untuk mengajarkan pemrograman kepada anak-anak berusia 8 hingga 16 tahun. Menggaruk itu mudah, dan memungkinkan anak-anak mempelajari dasar-dasar logika pemrograman dengan cara yang menyenangkan. Lebih detail (Bahasa Inggris):

simulasi

  • Simula adalah bahasa yang penting secara historis karena merupakan bahasa pertama yang memperkenalkan konsep-konsep yang menjadi dasar pemrograman berorientasi objek. Lebih detail (Bahasa Inggris): .

TERSENYUM

  • SMIL (Synchronized Multimedia Integration Language) adalah alat untuk orang-orang yang ingin membuat dan mendistribusikan presentasi. Sangat berguna jika Anda ingin membuat presentasi yang perlu diperbarui dari waktu ke waktu. Lebih detail (Bahasa Inggris):

SQL

  • SQL (Structured Query Language) adalah bahasa yang digunakan untuk berkomunikasi dengan Sistem Manajemen Basis Data Relasional (RDBMSes). SQL memungkinkan programmer untuk membuat struktur data, menyisipkan dan mengedit data, dan menanyakannya. Lebih detail (Bahasa Inggris):

Status

  • Stata adalah lingkungan pengembangan dan bahasa pemrograman untuk memecahkan masalah statistik yang serius. Meskipun sudah lama dibuat, namun masih banyak digunakan. Jika Anda terlibat dalam pekerjaan statistik, Stata adalah alat yang hebat. Lebih detail (Bahasa Inggris):

Cepat

  • Swift adalah bahasa pemrograman baru yang dikembangkan oleh Apple untuk iOS, OS X, watchOS, tvOS dan Linux. Ini adalah bahasa masa depan bagi pengembang program dan aplikasi untuk perangkat Apple. Lebih detail (Bahasa Inggris):

S-PLUS

  • S-PLUS adalah versi komersial dari bahasa pemrograman S yang dirancang untuk melakukan analisis statistik. Proyek GNU memiliki versi S-nya sendiri, yang disebut R. Semua sumber daya yang diperlukan tentang S dengan penekanan pada S-PLUS:

Pemrograman UNIX

  • Luasnya pemrograman di Unix sangat bagus. Ini mencakup rentang dari skrip administratif hingga kode berbasis teks hingga pengembangan X Window. Lebih detail (Bahasa Inggris):

XML

  • XML adalah bahasa markup terstruktur dengan baik yang dirancang agar dapat dibaca manusia dan mesin. Lebih detail (Bahasa Inggris):

Pelajaran disiapkan oleh: Akulov Ivan

Jika Anda menemukan kesalahan ketik, sorot dan tekan Ctrl + Enter! Untuk menghubungi kami, Anda dapat menggunakan .

Selain menggunakan komentar untuk mendapatkan program paralel, mereka sering kali memperluas bahasa pemrograman yang ada. Operator tambahan dan elemen baru untuk mendeskripsikan variabel diperkenalkan, memungkinkan pengguna untuk secara eksplisit mendefinisikan struktur paralel program dan, dalam beberapa kasus, mengontrol eksekusi program paralel. Jadi, bahasa High Performance Fortran (HPF), selain operator Fortran tradisional dan sistem komentar khusus, berisi operator FORALL baru, yang diperkenalkan untuk menggambarkan loop program paralel. Fitur paling menarik dari HPF adalah susunan pemetaan multi-level - susunan templat - susunan prosesor virtual - prosesor fisik, yang memungkinkan pemetaan data pengguna paling fleksibel ke komputer nyata.

Contoh lainnya adalah bahasa mpC, yang dikembangkan di Institut Pemrograman Sistem Akademi Ilmu Pengetahuan Rusia sebagai perpanjangan dari ANSI C. Tujuan utama mpC adalah pembuatan program paralel yang efisien untuk sistem komputasi heterogen. Pengguna dapat menentukan topologi jaringan, distribusi data dan komputasi, serta transfer data yang diperlukan. Pengiriman pesan diatur menggunakan antarmuka MPI.

Sistem DVM dirancang untuk membuat aplikasi komputasi portabel dan efisien dalam bahasa C-DVM dan Fortran-DVM untuk komputer paralel dengan arsitektur berbeda. Singkatan DVM berhubungan dengan dua konsep: Memori Virtual Terdistribusi dan Mesin Virtual Terdistribusi. Yang pertama mencerminkan keberadaan ruang alamat tunggal. Yang kedua mencerminkan penggunaan mesin virtual untuk skema dua tahap untuk memetakan data dan perhitungan ke mesin paralel nyata. Model pemrograman melibatkan spesifikasi instruksi DVM menggunakan komentar khusus, yang berarti satu versi program untuk eksekusi berurutan dan paralel. Tiga kelompok arahan yang didukung: arahan distribusi data, arahan distribusi komputasi, dan spesifikasi data jarak jauh. Kompiler menerjemahkan program ke dalam bahasa Fortran atau C, menggunakan salah satu teknologi pemrograman paralel yang ada (MPI, PVM, Router) untuk mengatur interaksi antarprosesor. Sistem DVM juga mencakup perpustakaan dukungan LIB-DVM, debugger DVM, prediktor eksekusi program DVM, dan penganalisis kinerja program DVM. Sistem ini dikembangkan di Institut Matematika Terapan. M.V.Keldysh RAS.



Bahasa pemrograman khusus

Jika perlu untuk lebih akurat mencerminkan spesifikasi arsitektur sistem paralel, atau properti kelas masalah tertentu dalam bidang subjek tertentu, maka bahasa pemrograman paralel khusus digunakan. Bahasa Occam dibuat untuk pemrograman sistem transputer, dan bahasa tugas tunggal Sisal dirancang untuk pemrograman mesin aliran. Perkembangan yang sangat menarik dan orisinal adalah bahasa deklaratif NORM, yang dibuat di bawah kepemimpinan I.B. Zadykhailo di Institut Matematika Terapan. M.V.Keldysh RAS untuk mendeskripsikan solusi masalah komputasi menggunakan metode grid. Abstraksi bahasa tingkat tinggi memungkinkan Anda untuk mendeskripsikan masalah dalam notasi yang mendekati rumusan asli masalah oleh seorang ahli matematika, yang oleh penulis bahasa secara konvensional disebut pemrograman tanpa pemrogram. Bahasa tugas tunggal tidak mengandung konstruksi bahasa pemrograman tradisional yang memperbaiki urutan perhitungan dan dengan demikian menyembunyikan paralelisme alami dari algoritma.

Perpustakaan dan antarmuka yang mendukung interaksi antara proses paralel

Dengan munculnya komputer paralel secara besar-besaran, perpustakaan dan antarmuka yang mendukung interaksi proses paralel telah tersebar luas. Perwakilan khas dari arah ini adalah Message Passing Interface (MPI), yang implementasinya tersedia di hampir semua platform paralel, mulai dari superkomputer pipa vektor hingga cluster dan jaringan komputer pribadi. Pemrogram sendiri secara eksplisit menentukan proses aplikasi paralel mana, di tempat program mana, dan dengan proses mana harus bertukar data atau menyinkronkan pekerjaannya. Biasanya ruang alamat proses paralel berbeda. Secara khusus, MPI dan PVM mengikuti ideologi ini. Teknologi lain, seperti Shmem, memungkinkan penggunaan variabel lokal (pribadi) dan variabel bersama (bersama) yang dapat diakses oleh semua proses aplikasi, dan menerapkan skema untuk bekerja dengan memori bersama menggunakan operasi Put/Get.

Sistem Linda agak terpisah, hanya menambahkan empat fungsi tambahan masuk, keluar, baca, dan eval ke bahasa sekuensial apa pun, yang memungkinkan Anda membuat program paralel. Sayangnya, kesederhanaan ide yang mendasarinya berubah menjadi masalah besar dalam implementasinya, yang menjadikan teknologi cantik ini lebih menjadi objek kepentingan akademis daripada alat praktis.

Perpustakaan mata pelajaran paralel

Seringkali dalam praktiknya, pemrogram aplikasi tidak menggunakan konstruksi paralel eksplisit sama sekali, beralih ke subrutin dan fungsi perpustakaan subjek paralel dalam fragmen waktu-kritis. Semua paralelisme dan semua optimasi disembunyikan dalam panggilan, dan pengguna hanya dapat menulis bagian eksternal dari programnya dan menggunakan blok standar dengan kompeten. Contoh perpustakaan tersebut adalah Lapack, ScaLapack, Cray Scientific Library, HP Mathematical Library, PETSc dan masih banyak lagi lainnya.

Beberapa perpustakaan mata pelajaran paralel

BLAS dan LAPACK adalah perpustakaan yang mengimplementasikan operasi dasar aljabar linier, seperti perkalian matriks, perkalian matriks-vektor, dll.

ScaLAPACK mencakup subset prosedur LAPACK yang didesain ulang untuk digunakan pada komputer MPP, termasuk: penyelesaian sistem persamaan linier, inversi matriks, transformasi ortogonal, pencarian nilai eigen, dll.

FFTW, DFFTPack - transformasi Fourier cepat.

PETSc adalah sekumpulan prosedur dan struktur data untuk penyelesaian masalah ilmiah secara paralel dengan model yang dijelaskan dalam bentuk persamaan diferensial parsial.

Paket khusus dan sistem perangkat lunak

Dan terakhir, area terakhir yang perlu disebutkan adalah penggunaan paket khusus dan sistem perangkat lunak. Biasanya, dalam hal ini, pengguna tidak perlu memprogram sama sekali. Tugas utamanya adalah menentukan dengan benar semua data input yang diperlukan dan menggunakan fungsionalitas paket dengan benar. Oleh karena itu, banyak ahli kimia menggunakan paket GAMESS untuk melakukan perhitungan kimia kuantum pada komputer paralel, tanpa memikirkan bagaimana pemrosesan data paralel diimplementasikan dalam paket itu sendiri.

GPU kini semakin banyak digunakan untuk memecahkan masalah komputasi, namun pertanyaannya masih terbuka: bagaimana cara menulis program yang efektif untuk konfigurasi yang sesuai?

15/06/2011 Andrey Adinet

GPU kini semakin banyak digunakan untuk memecahkan masalah komputasi, namun pertanyaannya masih terbuka: bagaimana cara menulis program yang efektif untuk konfigurasi yang sesuai? Solusi standar - kombinasi CUDA atau OpenCL - memungkinkan Anda mengimplementasikan algoritme dengan relatif cepat, tetapi sulit menggunakannya untuk membuat versi yang dioptimalkan untuk konfigurasi tertentu. Diperlukan alat untuk memprogram GPU pada tingkat yang lebih tinggi, yang dapat dibuat, misalnya, menggunakan bahasa yang dapat diperluas.

Hanya tiga tahun yang lalu, unit pemrosesan grafis (Graphical Processing Unit, GPU) dianggap hanya sebagai kartu video untuk PC, tetapi sekarang sikap terhadapnya telah berubah - model GPU server khusus telah muncul, berfokus pada pemecahan masalah komputasi, kinerja ganda. -perhitungan presisi telah meningkat, sistem telah mencapai rekor kinerja, berada di peringkat teratas Top500. Bagaimana cara menulis program yang efektif untuk mesin seperti itu? Jawaban standarnya adalah kombinasi CUDA atau OpenCL untuk pemrograman GPU dan MPI di tingkat cluster. Alat-alat ini tersedia, didukung secara aktif oleh produsen peralatan, dan banyak program telah ditulis untuk alat-alat tersebut, namun ada juga kelemahannya.

CUDA dan OpenCL adalah perpanjangan dari bahasa C; keduanya tidak sulit dipelajari, meskipun merupakan alat tingkat rendah. Dengan bantuan mereka, Anda dapat mengimplementasikan algoritme untuk GPU dengan relatif cepat, tetapi membuat versi yang dioptimalkan untuk aplikasi dan konfigurasi tertentu ternyata jauh lebih sulit. Semua optimasi perlu dilakukan secara manual, yang akan meningkatkan ukuran kode dan menurunkan keterbacaannya. Meskipun program yang dibuat dengan OpenCL akan bersifat portabel di berbagai arsitektur, kinerja tidak akan dipertahankan pada portabilitas tersebut. Membutuhkan alat pemrograman GPU tingkat tinggi.

Alat-alat tersebut dapat dibuat dengan berbagai cara: memperkenalkan bahasa pemrograman baru; menambahkan arahan ke bahasa yang sudah ada, seperti yang dilakukan dalam model PGI Accelerator atau CAPS HMPP; manfaatkan bahasa yang dapat diperluas. Bahasa yang dapat diperluas- bahasa pemrograman yang sintaksis dan semantiknya tidak tetap, tetapi dapat diubah tergantung kebutuhan pemrogram. Dibandingkan dengan bahasa tradisional, bahasa yang dapat diperluas memiliki sejumlah keunggulan: lebih mudah untuk menambahkan fitur baru ke dalamnya; mereka terbuka; mempelajari model pemrograman baru berdasarkan bahasa tersebut lebih mudah, karena hanya sedikit ekstensi yang perlu dipelajari; Dengan bantuan bahasa seperti itu, lebih mudah untuk menyempurnakan dan mengoptimalkan program.

Bahasa yang dapat diperluas

Agar suatu bahasa dapat diperluas, ia harus memuat:

  • mekanisme ekstensi tanpa mengubah kompiler, didukung secara merata oleh semua kompiler, yang berarti, khususnya, adanya antarmuka standar untuk interaksi dengan kompiler;
  • konstruksi untuk memperluas dan memanipulasi pohon kode, seperti makro atau kuasi-kutipan, untuk memperluas bahasa;
  • alat yang ampuh untuk menulis ekstensi, seperti bahasa yang diperluas itu sendiri, atau bahasa lain yang kekuatannya berarti bahwa kode ekstensi dapat melakukan hal yang sama seperti program apa pun dalam bahasa tersebut.

Ternyata hanya ada sedikit bahasa yang memenuhi persyaratan ini: Lisp, Nemerle, Seed7, xoc, dan Stratego. Pada saat yang sama, xoc, yang dimaksudkan untuk memperluas bahasa C, menggunakan bahasa Zeta terpisah untuk menulis ekstensi, dan Stratego adalah bahasa domain untuk membuat konverter kode sumber. Nemerle adalah bahasa yang dapat diperluas yang menggunakan kerangka kerja. Bersih.

Semua bahasa yang dapat diperluas mendukung mekanisme untuk bekerja dengan pohon program, dan yang paling menonjol adalah konstruksi kuasi-kutipan - spesifikasi objek yang mewakili pohon program menggunakan kode sumber itu sendiri.

Bahasa Nemerle menggunakan konstruk untuk ini, misalnya membuat pohon yang terdiri dari deklarasi variabel i dengan nilai awal 0. Quasi-quoting mirip dengan membuat objek string dengan konstanta string. Pada Gambar. 1 menunjukkan contoh kuasi-kutipan. Konstruksi interpolasi memungkinkan nilai variabel disubstitusikan ke dalam pola tetap dalam kuasi-kutipan. Di Nemerle, konstruksi $(...) digunakan untuk ini jika Anda perlu mengganti daftar, misalnya. Bahasa yang dapat diperluas juga berisi konstruksi penguraian pohon program. Dalam bahasa Nemerle, operator match(...) ( ... ) digunakan untuk ini, analog dari switch dari bahasa C, yang cabang-cabangnya merupakan konstruksi kuasi-kutipan. Dalam hal ini, interpolasi diartikan sebagai deklarasi variabel baru, yang jika perbandingan berhasil, menerima nilai dari subpohon yang sesuai. Misalnya, untuk operator pencocokan match(e) (| => ... ), jika e berisi pohon, ia akan masuk ke variabel a dan ke variabel b .

Alat untuk bekerja dengan pohon program digunakan dalam konstruksi ekstensi bahasa. Dalam bahasa Nemerle, ini adalah makro - fungsi khusus yang dijalankan pada tahap kompilasi dan mengembalikan bagian dari pohon program, yang menggantikan pemanggilannya. Dalam hal ini, makro menerima fragmen program sebagai parameter dan dapat mengubahnya. Pada prinsipnya, Anda bisa memanggil makro dengan cara yang sama seperti fungsi biasa; tetapi fitur yang lebih menarik adalah mengikat panggilan makro ke sintaksis khusus. Hal ini memungkinkan Anda untuk memperkenalkan struktur sintaksis baru ke dalam bahasa Nemerle dan dengan demikian memperluas bahasa tersebut.

Pada Gambar. Gambar 2 menunjukkan contoh makro dengan ekstensi sintaksis yang memungkinkan Anda mendeklarasikan loop multidimensi dengan variabel dan jumlah iterasi untuk setiap dimensi, dan pada Gambar. Gambar 3 memberikan contoh transformasi program yang dilakukan makro ini. Perhatikan bahwa makro yang mengimplementasikan ekstensi ini memerlukan kurang dari 30 baris kode sumber dan mencakup beberapa pemeriksaan kesalahan. Dengan pendekatan tradisional, penerapan ekstensi semacam itu akan memerlukan lebih banyak kode secara signifikan dan, sebagai tambahan, memerlukan mempelajari cara kerja internal kompiler.

Secara historis, mekanisme makro adalah yang pertama kali muncul di Lisp, di mana program direpresentasikan sebagai daftar biasa dan tidak memerlukan konstruksi khusus untuk bekerja dengan pohon program, oleh karena itu dalam bahasa inilah pemrograman yang dapat diperluas mendapatkan distribusi terbesar. Makro di Nemerle mirip dengan yang ada di Lisp. Dalam sistem xoc, mekanisme ekstensi diimplementasikan melalui ekstensi tata bahasa dan atribut parse tree. Ekstensi apa pun harus menentukan dua atribut: jenis struktur sintaksis dan ekspresi dalam bahasa dasar yang digunakan untuk mengonversinya.

Bahasa yang dapat diperluas dicirikan oleh penerapan banyak konstruksi standar melalui makro. Dalam bahasa Nemerle, semua loop dan operator kondisional, kecuali kecocokan, diimplementasikan melalui makro, dan di Lisp, makro adalah konstruksi loop standar dan deklarasi fungsi.

Bagaimana cara menggunakan bahasa?

Untuk bahasa pemrograman yang dapat diperluas, Anda dapat menulis konstruksi yang memungkinkan Anda memprogram GPU dengan cara yang paling nyaman, yang dilakukan sebagai bagian dari proyek NUDA (Nemerle Unified Device Architecture), yang tujuannya adalah untuk membuat ekstensi bahasa Nemerle untuk pemrograman GPU. OpenCL digunakan sebagai antarmuka untuk berinteraksi dengan GPU dan bahasa target untuk menyajikan program.

Pertama, kita perlu mengimplementasikan eksekusi subset kode dalam bahasa Nemerle pada GPU. Pada saat yang sama, operator bahasa yang familiar seperti loop dan percabangan, serta bekerja dengan tipe data, struktur, dan array sederhana, harus didukung. Kode untuk GPU ditempatkan di fungsi terpisah, atau di kernel NUDA. Setiap kernel ditandai dengan makro nukernel, yang berdasarkan kode kernel, menghasilkan kode OpenCL dan metode stub untuk memanggil kernel di sisi host. Sebelum pembuatan kode, semua makro diperluas, kecuali makro perulangan dan percabangan. Jika suatu fungsi perlu dipanggil di dalam kernel, fungsi tersebut harus ditandai dengan makro nucode, yang akan menghasilkan kode OpenCL untuk fungsi tersebut. Kernel dipanggil menggunakan makro nucall; Selain parameter kernel, juga diberikan konfigurasi grid thread yang memulainya.

Paling sering, badan loop digunakan sebagai kernel untuk GPU, jadi saya ingin segera mentransfer loop ke GPU. Ini dapat diimplementasikan di Nemerle - makro terkait di NUDA disebut nuwork. Dibutuhkan ukuran blok thread sebagai parameter yang diperlukan dan, berdasarkan konteks saat ini dan analisis kode badan loop, menentukan sekumpulan variabel yang harus diteruskan ke kernel sebagai parameter. Badan kernel dibentuk dari badan perulangan, perhitungan indeks perulangan melalui nomor thread global, serta kondisi yang memungkinkan perulangan dieksekusi dengan benar bahkan ketika ukuran kisi global tidak habis dibagi ukurannya. dari kelompok benang. Perulangan digantikan dengan panggilan ke makro nucall, yang memanggil kernel yang dihasilkan.

Pada prinsipnya, dimungkinkan untuk mengizinkan penggunaan array bahasa Nemerle biasa dalam program GPU, tetapi hal ini menyebabkan overhead yang tinggi - array harus disalin ke memori GPU setiap kali kernel dipanggil, dan kemudian disalin kembali. Oleh karena itu, program GPU menggunakan tipe array khusus dengan sinkronisasi lambat antara GPU dan CPU. Hal ini memungkinkan, di satu sisi, untuk tidak mengacaukan teks program dengan perintah untuk menyalin data, dan di sisi lain, untuk menghindari biaya overhead untuk menyalin data. Untuk array seperti itu, seperti untuk array biasa di Nemerle, manajemen memori digunakan menggunakan pengumpulan sampah. Untuk mengalokasikan memori untuk array seperti itu, ada makro nunew, yang harus diterapkan ke operator alokasi memori biasa.

Pada Gambar. 4 di sebelah kiri adalah program penambahan array biasa, dan di sebelah kanan adalah program serupa, tetapi melakukan perhitungan pada GPU. Mendapatkan program GPU dari program biasa cukup sederhana - Anda hanya perlu menerapkan makro ke loop dan operasi alokasi memori, sementara jumlah kode praktis tidak berubah. Sebuah program yang ditulis menggunakan NUDA membutuhkan kurang dari 20 baris kode. Program serupa, tetapi dalam C murni dan OpenCL membutuhkan lebih dari 100 baris.

Selain makro yang membuat bekerja dengan GPU lebih mudah, sistem ekstensi NUDA juga menyertakan anotasi untuk konversi loop. Anotasi pada dasarnya adalah makro khusus. Misalnya, anotasi sebaris diterapkan ke perulangan dengan jumlah iterasi tetap dan membuka gulungannya sepenuhnya. Anotasi dmine melakukan pembukaan gulungan loop dalam. “Pembukaan gulungan dalam” berarti pembuatan banyak salinan badan perulangan dan pengocokan dilakukan tidak hanya untuk perulangan itu sendiri, tetapi juga untuk perulangan bersarang jika perulangan tersebut independen.

Memengaruhi

Mengapa seorang programmer perlu mempelajari bahasa baru dan menguasai perpustakaan baru bahasa yang dapat diperluas? Jawaban utamanya adalah produktivitas. Memiliki algoritma loop paralel yang bekerja dengan array dan ditulis dalam bahasa Nemerle, cukup menambahkan beberapa anotasi untuk mendapatkan program untuk GPU. Dalam hal ini, program akan berjalan di perangkat apa pun yang mendukung OpenCL, termasuk GPU nVidia dan AMD, serta prosesor x86. Untuk mencapai hal yang sama hanya dengan menggunakan teknologi OpenCL atau CUDA, Anda perlu mengeluarkan lebih banyak sumber daya, yang tidak hanya akan digunakan untuk menulis kode sumber, tetapi juga untuk men-debug interaksi antara host dan GPU.

Alasan lainnya adalah kinerja kode yang dihasilkan. Pada CUDA atau OpenCL, konversi loop perlu dilakukan secara manual, dan secara terpisah untuk setiap arsitektur. Ini adalah proses yang panjang dan rawan kesalahan, serta kode yang dihasilkan sulit dibaca dan tidak dapat dipelihara. Dengan NUDA, pekerjaan ini dapat dilakukan dengan menggunakan anotasi. Misalnya, untuk beberapa kernel, Anda dapat mengoptimalkan pengoperasian konvolusi gambar atau perkalian matriks menggunakan anotasi inline dan dmine. Tanpa menambah ukuran kode sumber, Anda dapat mencapai peningkatan kinerja dua hingga lima kali lipat. Selain itu, jika transformasi yang sama dilakukan secara manual, hal ini akan menyebabkan peningkatan kode beberapa kali lipat, dan terkadang dalam urutan besarnya, belum lagi waktu yang dihabiskan untuk debugging dan memilih parameter pemindaian yang optimal. Misalnya, program beranotasi tujuh baris universal di NUDA untuk perkalian matriks-matriks transposisi presisi ganda berjalan pada nVidia Tesla C2050 hanya 40% lebih lambat dibandingkan implementasi tercepat saat ini (CUBLAS 3.2). Program serupa yang ditulis dengan tangan akan membutuhkan 70 baris kode. Biasanya, untuk tugas standar, Anda dapat menulis kode secara manual satu kali untuk meningkatkan produktivitas, namun untuk tugas tertentu, mengurangi biaya tenaga kerja dan meningkatkan produktivitas akan sangat berguna. Terakhir, peningkatan produktivitas juga berlaku untuk pembuatan ekstensi itu sendiri: lebih mudah membuatnya menggunakan bahasa yang dapat diperluas dibandingkan menggunakan alat tradisional. Seluruh sistem NUDA, terlepas dari fungsinya, hanya membutuhkan 12 ribu baris kode, belum termasuk pengujian. Ini relatif sedikit; misalnya, kompiler bahasa Nemerle (build 9025) membutuhkan sekitar 130 ribu baris.

Bahasa yang dapat diperluas adalah alat yang ampuh, dan penggunaannya dalam komputasi paralel masih dalam tahap awal. Ada banyak masalah menarik dalam pengembangan bahasa pemrograman paralel, dan salah satunya dapat diselesaikan dengan menggunakan kombinasi ekstensi dan perpustakaan. Anda dapat menambahkan blok kode asinkron dan loop paralel ke bahasa tersebut, dan Anda dapat membuat konstruksi yang mudah digunakan untuk memprogram sistem cluster, seperti array terdistribusi. Terakhir, Anda dapat menggunakan ekstensi untuk membangun bahasa pemrograman paralel yang lengkap, seperti Chapel atau X10.

Andrey Adinet([dilindungi email]) - peneliti junior Pusat Komputer Penelitian Universitas Negeri Moskow (Moskow).



Artikel ini membahas tentang ekstensi dan pentingnya bagi sistem komputer. Jadi, tampaknya, apa yang istimewa dari ekstensi file program? Meski demikian, kami berharap para pembaca dapat memperoleh sendiri informasi penting dan menarik. Kemampuan untuk memahami ekstensi akan memberikan tujuan yang baik, seperti yang akan dibahas di bawah.

Ekstensi apa yang dimiliki C plus plus?

Bahasa pemrograman ini memiliki notasi file tersendiri. Notasi cpp adalah ekstensi khusus yang digunakan untuk file yang berisi kode C++. Mereka berisi kode yang belum siap digunakan (belum dikompilasi), yang dapat diedit dan diubah tanpa biaya dan gangguan signifikan dalam pengoperasian program. Dengan menggunakan ekstensi ini, Anda dapat mengetahui file mana yang berisi teks dalam bahasa C (bahasa pemrograman yang sangat populer saat ini).

Ekstensi dan pentingnya dalam pemrograman

Mengapa Anda memerlukan ekstensi nama file yang digunakan oleh komputer Anda? Faktanya adalah komputer dapat memproses berbagai jenis file, baik dalam sistem operasi yang diinstal maupun dengan bantuan perangkat lunak tambahan. Contoh perangkat lunak tersebut dapat berupa plugin yang dipasang di browser, atau penerjemah berbagai bahasa pemrograman yang dapat memproses program yang sedang berjalan. Hal ini untuk mengenali penerjemah mana yang harus digunakan komputer, kode mesin mana yang digunakan untuk memutar file, dan ekstensi yang diperlukan. mengenali jenis file, informasi ini akan diberikan melalui rincian yang tersedia. Jadi, ekstensi cpp adalah file yang berisi dokumen C++. Setelah dikenali, juru bahasa akan dapat membukanya, dan pengguna akan dapat bekerja dengan dokumen tersebut.

Apa sebenarnya ekstensi nama file itu?

Tapi mari kita bicara tentang ekstensi nama file dari perspektif ilmu komputer. Tujuannya telah ditentukan - diperlukan untuk mengidentifikasi format atau jenis file. Ekstensinya dipisahkan dari nama file menggunakan titik. Sebelum tahun 1995, Windows memiliki batasan jumlah karakter dalam sebuah ekstensi: tidak boleh lebih dari tiga. Dalam sistem modern tidak ada batasan seperti itu. Terlebih lagi, dalam sistem file modern mungkin terdapat file yang memiliki beberapa jenis ekstensi. Mereka semua mengikuti maksudnya. Namun hal ini tidak berlaku untuk hal-hal seperti cpp.

Penipu sering memanfaatkan hadiah dari pengembang ini. Penjahat sering menyamarkan file berbahaya yang mereka masukkan ke komputer pengguna sebagai program lain dan menyembunyikan ekstensi file utama (untuk virus dan berbagai Trojan, ini berbeda dari program biasa). Bahkan mungkin saja semua file asli disembunyikan atau dihapus, dan file yang sama sekali berbeda ditempatkan di tempatnya. Dan ternyata cpp itu sama sekali bukan cpp, melainkan virus komputer. Pertahanan yang baik terhadap penipu jenis ini adalah perintah untuk menampilkan semua jenis ekstensi. Anda dapat mengaktifkan fungsi ini di “Panel Kontrol”; cukup temukan item yang diperlukan. Dan kemudian Anda bisa tenang dengan file C plus plus Anda, dan yakin bahwa Anda tidak akan menjalankan program berbahaya sebagai gantinya. Meskipun di sini Anda harus selalu melihat ekstensi file yang dapat dieksekusi.

Akurasi informasi yang diberikan dalam ekstensi

Terkadang ekstensi tidak secara akurat menunjukkan jenis file dan tidak menyelesaikan semua kemungkinan masalah yang mungkin timbul saat menggunakan berbagai program. Jadi, ekstensi .txt, yang familiar bagi banyak orang, tidak memberikan informasi ke komputer tentang pengkodean file tersebut. Oleh karena itu, seringkali saat membuka file teks Anda dapat melihat lembaran karakter yang tidak dapat dipahami. Sangat menyedihkan melihat keadaan dokumen seperti itu jika digunakan untuk menulis kode program. Dalam kasus seperti itu, pengkodean file harus diubah hingga komputer dapat menyediakan teks yang memadai. Anda dapat mencoba menghitung pengkodean yang diperlukan berdasarkan karakter yang salah, tetapi Anda perlu mengetahui pengkodean mana yang mengarah ke apa dan hubungannya dengan yang mana. Untuk file Word, ekstensi yang sama juga digunakan, yang tidak memperjelas file mana yang sedang ditangani seseorang: tipe biasa atau yang diformat. Ekstensi juga tidak menunjukkan versi mana yang digunakan, yang berguna saat mencoba membuka versi dokumen sebelumnya di lingkungan pemrosesan selanjutnya, seperti halnya dengan Microsoft Office.

Cara dan opsi lain untuk menentukan format

Ada opsi lain untuk menentukan sistem file. Namun hal tersebut tidak umum, dan kemungkinan besar Anda belum pernah mendengarnya:

  • Menyimpan informasi tentang format file di sistem operasi itu sendiri. Ketidaknyamanan muncul ketika Anda ingin beralih ke komputer lain dan bekerja dengan file yang sama.
  • Penerapan apa yang disebut metode “angka ajaib”. Ini adalah ketika urutan byte tertentu dienkripsi dalam file itu sendiri, yang menunjukkan semua informasi yang diperlukan agar file tersebut berfungsi. Ini memiliki potensi tertentu, namun memerlukan kerjasama antar produsen perangkat lunak.
  • Untuk beberapa sistem Unix, sebuah fungsi telah dikembangkan yang meninggalkan tanda khusus di awal file, ditujukan untuk penerjemah.