Pemrograman C++ Modern
C++03 / C++11 / C++14 / C++17 / C++20 / C++23 / C++26
Kursus akses terbuka ini ditujukan bagi mereka yang sudah familiar dengan C dan pemrograman berorientasi objek menuju tingkat kemahiran pemrograman C++. Kursus ini mencakup dasar-dasar pemrograman C++ dan beralih ke semantik dan konsep C++ tingkat lanjut.
Fitur utama :
- Gratis dan sering diperbarui
- 26 ceramah, 1800+ slide
- Sertakan konsep dan fitur standar bahasa terakhir
- Pengajaran praktis : deskripsi terstruktur singkat dan non-verbose yang terkait dengan kode
- Contoh kode minimal untuk menampilkan fitur atau masalah tertentu saja tanpa menyimpang
- Aspek bahasa pelengkap : alat, konvensi pengkodean, organisasi proyek, dan optimalisasi kode
- Berbasis pengalaman : banyak aspek, contoh, dan masalah berasal dari kasus dunia nyata yang saya hadapi selama saya bekerja sebagai insinyur perangkat lunak
Jika Anda menikmati kursus ini atau merasa bermanfaat , silakan tambahkan Bintang
BAB
# | JUDUL | FOKUS UTAMA |
---|
1 | Pendahuluan (html) | Sejarah C/C++, Area aplikasi, Pengenalan kursus |
2 | Persiapan (html) | Buku, Cara menyusunnya, Halo dunia |
3 | Konsep Dasar I (html) | Tipe Sistem, Tipe Fundamental, dan Operator |
4 | Konsep Dasar II (html) | Tipe Integral dan Floating-point serta aritmatikanya |
5 | Konsep Dasar III (html) | Entitas, Enumerator, Struktur, Pernyataan alur kontrol |
6 | Konsep Dasar IV (html) | Heap, Stack, Pointer, Referensi, Properti Const, Operator konversi |
7 | Konsep Dasar V (html) | Fungsi, ekspresi Lambda, arahan Prapemrosesan |
8 | Pemrograman Berorientasi Objek I (html) | Hierarki kelas, Konstruktor, Destruktor, Kata kunci kelas |
9 | Pemrograman Berorientasi Objek II (html) | Polimorfisme, Operator kelebihan beban |
10 | Template dan Pemrograman Meta I (html) | Templat fungsi, Tipe ciri, Utilitas waktu kompilasi |
11 | Template dan Pemrograman Meta II (html) | Templat kelas, SFINAE |
12 | Unit Penerjemahan I (html) | Kaitan dan Aturan Satu Definisi |
13 | Unit Terjemahan II (html) | Berurusan dengan beberapa unit dan file terjemahan, #include , Modules |
14 | Konvensi Kode I (html) | Organisasi proyek, pengenalan konvensi kode, konvensi entitas |
15 | Konvensi Kode II (html) | Templat, namespace, c++ modern, kemudahan perawatan, penamaan, dan konvensi pemformatan |
16 | Debugging dan Pengujian (html) | Eksekusi/debug memori, Sanitizer, teknik Harding, Tes unit, Pengembangan Berbasis Tes |
17 | Ekosistem (html) | Cmake, Dokumentasi, dan Alat Lainnya |
18 | Utilitas (html) | Perpustakaan std utama |
19 | Kontainer, Iterator, dan Algoritma (html) | Kontainer, Iterator, Algoritma, Rentang |
20 | Topik Lanjutan I (html) | Pindahkan semantik, Referensi universal, Pengurangan tipe |
21 | Topik Lanjutan II (html) | Penanganan kesalahan, idiom C++, Smart pointer |
22 | Optimasi Kinerja I (html) | Hukum Ahmdal, Batasan kinerja, Konsep arsitektur (ILP, SIMD, dll.), Hierarki memori |
23 | Optimasi Kinerja II (html) | Pengoptimalan aritmatika, pengoptimalan memori, dll. |
24 | Optimasi Kinerja III (html) | Pengoptimalan kompiler, Pembuatan Profil, Alat Pembandingan |
25 | Desain Perangkat Lunak I (html) | Konsep Dasar, Prinsip, Kasus Penggunaan |
26 | Desain Perangkat Lunak II (html) | Pola Desain dan Idiom |
BUKU ALL-IN-ONE : modern-cpp.pdf (mungkin ada beberapa komitmen di belakang), html
TOPIK SECARA RINCIAN
1. Pendahuluan
- Sedikit Sejarah Bahasa Pemrograman C/C++
- Area Aplikasi dan Popularitas
- Filsafat C++
- Kelemahan C++ : Alternatif C++, Mengapa sulit beralih ke bahasa baru?
- Kursus
2. Persiapan
- Buku dan Referensi
- Legenda Geser
- Editor/IDE/Kompiler Apa yang Harus Saya Gunakan?
- Bagaimana cara mengkompilasinya?
- Halo Dunia : Aliran I/O
3. Konsep Dasar Sistem Tipe I, Tipe Fundamental, dan Operator
- Sistem Tipe C++ : Tipe kategori, Tipe properti
- Ikhtisar Tipe Dasar C++ : Tipe aritmatika, Akhiran dan awalan, Tipe aritmatika non-standar, tipe
void
, nullptr
- Aturan Konversi
- Kata Kunci
auto
- Operator C++ : Operator yang diutamakan, semantik kenaikan/pengurangan Prefix/Postfix, Operator Penugasan, gabungan, dan koma, Operator Pesawat Luar Angkasa
<=>
, Operator perbandingan yang aman
4. Konsep Dasar II - Tipe Integral dan Floating-point
- Tipe Data Integral : Bilangan bulat dengan lebar tetap,
size_t
, ptrdiff_t
, uintptr_t
, Semantik Operasi Aritmatika, Promosi, Pemotongan, Perilaku tidak terdefinisi, Aritmatika Saturasi - Jenis dan Aritmatika Titik Mengambang : Standar titik mengambang IEEE dan representasi lainnya, Nilai Normal/Denormal, Tak Terhingga, Bukan Angka (
NaN
), Epsilon Mesin, Satuan di Tempat Terakhir (ULP), Lembar Curang, Batas dan fungsi yang berguna, Aritmatika properti, Perilaku nilai khusus, Perilaku tidak terdefinisi, Deteksi kesalahan floating-point - Masalah Floating-point : Pembatalan bencana, Perbandingan floating-point
5. Konsep Dasar III - Entitas dan Aliran Pengendalian
- Entitas
- Deklarasi dan Definisi
- Enumerator
-
struct
, Bitfield, union
- Aliran Kontrol : pernyataan
if
, perulangan for
dan while
, perulangan rentang-basis for
, switch
, goto
, Hindari peringatan variabel yang tidak digunakan - Namespace : Namespace global eksplisit, alias namespace,
using
-deklarasi, using namespace
-directive, namespace inline
- Atribut :
[[nodiscard]]
, [[maybe_unused]]
, [[deprecated]]
, [[noreturn]]
6. Konsep Dasar IV - Konsep Memori
- Pointer : Operasi penunjuk, Alamat operator
&
, akses anggota struct
, penunjuk void
, Konversi penunjuk, Aritmatika penunjuk, Penunjuk liar dan menjuntai - Heap dan Stack : Memori tumpukan,
new
, delete
, Alokasi penempatan non-alokasi, Alokasi non-lempar, Kebocoran memori - Inisialisasi : Inisialisasi variabel, Inisialisasi seragam, Inisialisasi array, Inisialisasi struktur, Pengikatan Struktur, Inisialisasi memori dinamis
- Referensi
- Ekspresi
Const
dan Konstan : Konstanta dan literal, const
, constexpr
, consteval
, constinit
, if constexpr
, std::is constant evaluated()
, if consteval
- kata kunci
volatile
- Konversi Tipe Eksplisit :
static_cast
, const_cast
, reinterpret_cast
, Tipe punning, std::bit_cast
, Konversi inisialisasi seragam, gls::narrow_cast
-
sizeof
Operator : ikhtisar, [[no_unique_address]]
7. Konsep Dasar V - Fungsi dan Preprocessing
- Fungsi : Nilai lewat, Penunjuk lewat, Referensi lewat, Tanda tangan fungsi dan kelebihan beban, Kelebihan beban dan
=delete
, Parameter default - Penunjuk Fungsi dan Objek Fungsi
- Ekspresi Lambda : Daftar pengambilan, Ekspresi Lambda dan relasi fungsi, Catatan parameter, Komposabilitas, Rekursi,
constexpr/consteval
, template
, mutable
, [[nodiscard]]
, Daftar pengambilan dan kelas - Pemrosesan awal : Praprosesor, Kesalahan umum, Makro lokasi sumber, Makro kompilasi bersyarat, Operator stringisasi (
#
), #error
dan #warning
, #pragma
, Operator penempelan token ##
, Makro variadik
8. Pemrograman Berorientasi Objek I - Konsep Kelas
- Kelas C++ : idiom RAII
- Hirarki Kelas
- Penentu akses : Penentu akses warisan, Kapan menggunakan
public/protected/private
untuk anggota data? - Konstruktor Kelas : Konstruktor default, Inisialisasi kelas, Inisialisasi seragam untuk objek, Konstruktor delegasi, kata kunci
explicit
, [[nodiscard]]
dan kelas - Salin Konstruktor
- Penghancur Kelas
- Konstruktor, Destruktor, dan Operator Default (
= default
) - Kata Kunci Kelas :
this
, static
, const
, mutable
, using
, friend
, delete
9. Pemrograman Berorientasi Objek II - Polimorfisme dan Kelebihan Operator
- Polimorfisme : Mekanisme C++ untuk polimorfisme, metode
virtual
, Tabel virtual, kata kunci override
, kata kunci final
, Kesalahan umum, Metode virtual murni, Kelas abstrak dan antarmuka - Pengecoran Warisan dan Identifikasi Jenis Run-time
- Kelebihan Operator : Ikhtisar, Operator perbandingan
<
, Operator pesawat ruang angkasa <=>
, Operator subskrip []
, Operator subskrip multidimensi []
, Operator panggilan fungsi ()
, operator statis []
dan operator ()
, Operator konversi T()
, Kelebihan beban tipe kembalian resolusi, Operator penambahan dan pengurangan ++
/ --
, Operator penugasan =
, Operator aliran <<
, Catatan operator - Tata Letak Objek C++ : Agregat, Kelas sepele, Kelas tata letak standar, Data lama biasa (POD), Hierarki
10. Templat dan Pemrograman Meta I - Templat Fungsi dan Utilitas Waktu Kompilasi
- Templat Fungsi : Ikhtisar, Instansiasi templat, Parameter templat, Parameter templat - nilai default, Kelebihan muatan, Spesialisasi
- Variabel Templat
- Tipe Parameter Templat : Catatan Tipe Generik, Placeholder
auto
, Tipe parameter templat kelas, Tipe array dan penunjuk, Tipe fungsi - Utilitas Waktu Kompilasi :
static_assert
, using
kata kunci, kata kunci decltype
- Tipe Sifat : Ikhtisar, Pustaka tipe sifat, Manipulasi tipe
11. Template dan Pemrograman Meta II - Template Kelas dan SFINAE
- Templat Kelas : Spesialisasi kelas, Konstruktor templat kelas
- Pengurangan otomatis template konstruktor (CTAD)
- Templat Kelas - Konsep Tingkat Lanjut : Kelas + Fungsi - spesialisasi, Nama dependen -
typename
dan kata kunci template
, Hirarki dan using
templat kelas, kata kunci friend
, Argumen templat templat - Pemrograman Meta Templat
- SFINAE: Kegagalan Pergantian Bukan Kesalahan : Fungsi SFINAE, Kelas SFINAE
- Templat Variadik : Ekspresi lipat, templat kelas Variadik
- Konsep C++20 : Ikhtisar, kata kunci
concept
, requires
klausa, requires
ekspresi, requires
ekspresi + klausa, requires
klausa + ekspresi, requires
dan constexpr
, requires
bersarang - Proses Debug Templat
12. Unit Penerjemahan I - Kaitan dan Aturan Satu Definisi
- Konsep Dasar : Satuan Penerjemahan, Lingkup Lokal dan Global, Keterkaitan
- Kelas dan Durasi Penyimpanan : Durasi penyimpanan, Kelas penyimpanan, kata kunci
static
, Namespace anonim, kata kunci extern
- Keterkaitan
const
dan constexpr
: Kegagalan urutan inisialisasi statis - Ringkasan Keterkaitan
- Berurusan dengan Beberapa Unit Terjemahan : Kelas dalam beberapa unit terjemahan
- Aturan Satu Definisi (ODR) : Masalah variabel global, ODR - Poin 3, fungsi/variabel
inline
, constexpr
dan inline
- ODR - Templat Fungsi : Kasus, kata kunci
extern
- ODR - Templat Kelas : Kasus, kata kunci
extern
- Perilaku dan Ringkasan ODR Tidak Terdefinisi
13. Unit Terjemahan II - Sertakan, Modul, dan Namespace
-
#include
Masalah : Sertakan penjaga, Deklarasi penerusan, Ketergantungan melingkar, Kesalahan tautan yang umum - Modul C++20 : Ikhtisar, Terminologi, Visibilitas dan jangkauan, Jenis unit modul, Kata kunci, Fragmen modul global, Fragmen modul pribadi, Unit modul header, Partisi modul
- Mengompilasi Beberapa Unit Terjemahan : Flag kompiler dasar, Metode Kompilasi
- Perpustakaan di C++ : Perpustakaan statis, Membangun perpustakaan statis, Menggunakan perpustakaan statis, Perpustakaan dinamis, Membangun perpustakaan dinamis, Menggunakan perpustakaan dinamis, Antarmuka biner aplikasi (ABI), Demangling, Menemukan dependensi perpustakaan dinamis, Menganalisis objek/simbol yang dapat dieksekusi
14. Kode Konvensi I
- Organisasi Proyek C++ : Direktori proyek, File proyek, catatan organisasi proyek "Umum", Alternatif - Organisasi proyek "Canonical"
- Gaya dan Konvensi Pengkodean : Ikhtisar, Gaya pengkodean populer
- File Header dan
#include
: #include
guard, #include
sintaksis, urutan #include
, Konvensi umum header/nama file sumber - Prapemrosesan : Makro, pernyataan prapemrosesan
- Variabel : variabel global
static
, konversi - Enumerator
- Tipe Aritmatika : Tipe integral bertanda tangan vs. tak bertanda, konversi tipe integral, Tipe integral: ukuran dan permasalahan lainnya, Tipe floating-point
- Fungsi : Parameter fungsi, Argumen fungsi, nilai kembalian fungsi, Penentu fungsi, ekspresi lambda
- Struktur dan Kelas :
struct
vs class
, Inisialisasi, Daftar penginisialisasi yang dikurung, Fungsi anggota khusus, =default
, =delete
, Masalah lain, Warisan, Gaya
15. Kode Konvensi II
-
auto
- Templat dan Pengurangan Jenis
- Aliran Kontrol : Aliran kontrol redundan,
if/else
, Perbandingan, switch
, for/while
- Namespace :
using namespace
, Namespace anonim/tanpa nama, Namespace dan desain kelas, Style - Fitur C++ Modern : Kata Kunci, Fitur, Kelas, Perpustakaan
- Pemeliharaan : Pemahaman kode, Fungsi, Templat dan Debuction, Perpustakaan
- Portabilitas
- Penamaan : Entitas, Variabel, Fungsi, Konvensi gaya, Menerapkan gaya penamaan
- Keterbacaan dan Pemformatan : Spasi horizontal, Penunjuk/Referensi, Spasi vertikal, Tanda kurung kurawal, Dekorator tipe, Kurangi verbositas kode, Masalah lainnya
- Dokumentasi Kode : Dokumentasi fungsi, Sintaks komentar, Dokumentasi file
16. Debugging dan Pengujian
- Ikhtisar Proses Debug
- Pernyataan
- Debugging eksekusi : Breakpoints, Watchpoints / Catchpoints, Aliran kontrol, Stack dan info, Cetak, Bongkar,
std::breakpoint
- Debug Memori :
valgrind
- Teknik Pengerasan : Penggunaan tumpukan, Pemeriksaan perpustakaan standar, Perlindungan perilaku tidak terdefinisi, Perlindungan aliran kontrol
- Pembersih : Pembersih alamat, Pembersih kebocoran, Pembersih memori, Pembersih perilaku tidak terdefinisi, Pembersih berbasis sampel
- Ringkasan Proses Debug
- Peringatan Kompiler
- Analisis Statis
- Pengujian Kode : Pengujian unit, Test-Driven Development (TDD), Cakupan kode, pengujian Fuzz
- Kualitas Kode :
clang-tidy
17. Ekosistem - Cmake dan Alat Lainnya
- CMake :
cmake
dan ctest
- Dokumentasi Kode :
doxygen
- Statistik Kode : Menghitung baris kode, Penganalisis kompleksitas cyclomatic
- Alat Lainnya : Pemformatan kode -
clang-format
, Compiler Explorer
, Transformasi kode - CppInsights
, penyelesaian kode bertenaga AI - Pencarian kode lokal - ugrep
, ripgrep
, hypergrep
, Mesin pencari kode - searchcode/grep.app
, Pembandingan kode - Quick-Bench
, Font untuk pengkodean
18. Utilitas
- Aliran I/O : Manipulator,
ofstream/ifstream
- String :
std::string
, Konversi dari/ke nilai numerik, std::string_view
, std::format
, std::print
- Tampilan :
std::span
- Perpustakaan Matematika
- Nomor Acak : Konsep dasar, C++
<random>
, Seed, periode dan kualitas PRNG, Distribusi, Algoritma dan Kinerja terkini, Kuasi-acak - Pengukur Waktu : Waktu Jam Dinding, Waktu Pengguna, Waktu Sistem
- Templat Kelas Std :
std::pair
, std::tuple
, std::variant
, std::optional
, std::any
, std::stacktrace
- Perpustakaan Sistem File : Metode kueri, Modifikasi metode
19. Kontainer, Iterator, dan Algoritma
- Kontainer dan Iterator
- Wadah Urutan :
std::array
, std::vector
, std::deque
, std::list
, std::forward_list
- Wadah Asosiatif :
std::set
, std::map
, std::multiset
- Adaptor Kontainer :
std::stack
, std::queue
, std::priority_queue
- Menerapkan Iterator Kustom : Menerapkan Iterator sederhana
- Catatan Iterator :
- Metode Utilitas Iterator :
std::advance
, std::next
, std::prev
, std::distance
, Metode akses kontainer, ciri-ciri Iterator - Perpustakaan Algoritma :
std::find_if
, std::sort
, std::accumulate
, std::generate
, std::remove_if
- Rentang C++20 : Konsep utama, Tampilan rentang, Adaptor rentang, Pabrik rentang, Algoritme rentang, Tindakan rentang
20. Topik Lanjutan I
- Pindahkan Semantik : referensi
lvalues
dan rvalues
, Pindahkan semantik, std::move
, semantik deklarasi kelas - Referensi Universal dan Penerusan Sempurna : Referensi universal, Aturan penciutan referensi, Penerusan sempurna
- Kategori Nilai
-
&
, &&
Ref-kualifikasi dan Overloading volatile
- Salin Elision dan RVO
- Jenis Pengurangan : Referensi lewat, Penunjuk lewat, Nilai lewat, pengurangan
auto
, auto(x)
: Salinan peluruhan -
const
Kebenaran
21. Topik Lanjutan II
- Perilaku Tidak Terdefinisi: Perilaku ilegal, Perilaku spesifik platform, perilaku tidak ditentukan, Mendeteksi perilaku tidak terdefinisi
- Penanganan Kesalahan : Penyerahan kesalahan yang dapat dipulihkan, Kode pengembalian, Pengecualian C++, Mendefinisikan pengecualian khusus, kata kunci
noexcept
, Masalah alokasi memori, Kode pengembalian dan ringkasan pengecualian, std::expected
, Pendekatan penanganan kesalahan alternatif - Petunjuk cerdas :
std::unique_ptr
, std::shared_ptr
, std::weak_ptr
- Konkurensi : Metode thread, Mutex, Atom, Paralelisme berbasis tugas
22. Optimasi I - Konsep Dasar
- Pendahuluan : Hukum Moore, Batasan Hukum Moore, Alasan dilakukannya optimasi
- Konsep Dasar : Kompleksitas asimtotik, Pertukaran Waktu-Memori, Siklus Perkembangan, Hukum Ahmdal, Throughput, Bandwidth, Latensi, Batasan kinerja, Intensitas aritmatika
- Konsep Arsitektur Dasar : Throughput Instruksi (IPC), Eksekusi In-Order, dan Out-of-Order, Pipelining instruksi, Paralelisme tingkat instruksi (ILP), Hukum Little, Paralelisme tingkat data (DLP) dan instruksi vektor (SIMD), Paralelisme tingkat thread (TLP), Single Instruksi Multiple Threads (SIMT), RISC, set instruksi CISC
- Hirarki Memori : Konsep hierarki memori, Lokalitas memori, Latensi inti-ke-inti dan afinitas thread, Model pengurutan memori
23. Optimasi II - Optimasi Kode
- Operasi I/O :
printf
, I/O yang dipetakan memori, Mempercepat pemuatan data mentah - Optimasi Memori : Memori heap, Memori tumpukan, Pemanfaatan cache, Penyelarasan data, Prefetch Memori
- Tipe Aritmatika : Tipe data, Operasi aritmatika, Konversi, Titik mengambang, Fungsi intrinsik penyusun, Nilai dalam rentang, Tabel pencarian
- Aliran Kontrol : Cabang, Petunjuk Cabang -
[[likely]]
/ [[unlikely]]
, Bilangan bulat yang ditandatangani/tidak ditandatangani, Loop, Pengangkatan loop, Pembukaan loop, Pernyataan, Petunjuk kompiler [[assume]]/std::unreacheable()
, Rekursi - Fungsi : Biaya pemanggilan fungsi, Pengoperan argumen, Inlining fungsi, Atribut fungsi, Aliasing pointer
- Pemrograman Berorientasi Objek
- Perpustakaan Std dan Aspek Bahasa Lainnya
24. Optimasi III - Optimasi dan Benchmarking Non-Coding
- Optimasi Kompiler : Tentang kompiler, Bendera optimasi kompiler, Bendera optimasi floating-point, Bendera optimasi linker, Bendera arsitektur, Membantu kompiler untuk menghasilkan kode yang lebih baik, Optimasi terpandu profil (PGO), Pengoptimal biner pasca-pemrosesan, Optimasi polihedral
- Teknik Transformasi Penyusun : Transformasi dasar, Pengalihan loop, Penggabungan loop, Pembelahan loop, Pertukaran loop, Pengelompokan loop
- Perpustakaan dan Struktur Data
- Tolok Ukur Kinerja : Apa yang harus diuji?, Kualitas beban kerja/Dataset, Perilaku cache, Performa CPU yang stabil, Pertimbangan multi-thread, Tata letak memori program, Overhead pengukuran, Optimasi kompiler, Evaluasi metrik
- Pembuatan profil :
gprof
, uftrace
, callgrind
, cachegrind
, perf
profiler Linux - Komputasi Paralel : Konkurensi vs. paralelisme, Penskalaan kinerja, Hukum Gustafson, Bahasa pemrograman paralel
25. Perancangan Perangkat Lunak I - Konsep Dasar (DRAFT)
- Buku dan Referensi
- Konsep Dasar : Abstraksi, antarmuka, dan modul, Class Invariant
- Prinsip Desain Perangkat Lunak : Pemisahan perhatian, Kopling rendah, kohesi tinggi, Enkapsulasi dan penyembunyian informasi, Desain berdasarkan kontrak, Dekomposisi masalah, Penggunaan kembali kode
- Kompleksitas Perangkat Lunak : Entropi perangkat lunak, Hutang teknis
- Prinsip Desain SOLID
- Desain Kelas : Prinsip antarmuka kelas, fungsi Anggota vs. fungsi bebas, fungsi namespace vs. metode statis kelas
- Studi Kasus BLAS GEMM
- Memiliki Objek dan Tampilan
- Nilai vs. Referensi Semantik
- Variabel Global
26. Desain Perangkat Lunak II - Pola dan Idiom Desain (DRAFT)
- Idiom C++ : Aturan Nol, Aturan Tiga, Aturan Lima
- Pola Desain : Singleton, Pointer to Implementation (PIMPL), Curious Recurring Template Pattern (CRTP), Fungsi Virtual Template
Peta jalan
- Tingkatkan Bab Desain Perangkat Lunak
- Bab Aspek Pembangunan (misalnya mengurangi waktu pembangunan)
Melaporkan bug? dan berkontribusi
Jika Anda menemukan kesalahan ketik, kesalahan konseptual, atau bagian yang perlu diperbaiki, harap laporkan melalui panel issue
.
Pengarang
Federico Busato
, https://federico-busato.github.io/
- LinkedIn: www.linkedin.com/in/federico-busato/
- Twitter: twitter.com/fedebusato