1. Obyektlar va sinflar
Bugun siz Java dasturini qanday tashkil qilish haqida bir oz bilib olasiz. Va asosiy yangilik: Har bir Java dasturi sinflar va obyektlardan iborat.
Sinflar nima ekanligi sizga ma'lum, lekin obyektlar nima?
Misol bilan boshlayman. Tasavvur qiling, siz kichik bir kema yasashni xohlaysiz. Avval chizma qilish kerak, keyin uni zavodda yasash kerak. Yoki o'nlab. Ha umuman, qancha istasangiz kemalar yasash mumkin. Bir chizma asosida o'nlab bir xil kemalar yaratiladi, bu muhim.
Java dasturlashda hammasi xuddi shunday.
Chizmalar
Dasturchi — u loyiha chizuvchiga o'xshaydi. Faqat loyiha chizuvchi chizma chizadi, Java dasturchi esa sinflarni yozadi. Keyin chizmalar asosida qismlar yaratiladi, sinflar asosida esa obyektlar yaratiladi.
Avval sinflarni yozamiz (chizmani yasaymiz) va keyin, dastur ishlaganda, bu sinflar asosida Java-mashina obyektlar yaratadi. Xuddi kemalar chizmalar asosida yaratilgani kabi.
Bir chizma, lekin kemalar ko'p bo'lishi mumkin. Kemalar turli, ularda turli nomlar, ular turli yuklarni tashishadi. Lekin ular juda o'xshash: ularning hammasi identik konstruksiyaga ega kemalar va o'xshash vazifalarni bajara olishadi.
Yoki yana bir misol...
Chumolilar
Chumolilar uyasi obyektlarning o'zaro aloqasi uchun yaxshi misol. Eng oddiy chumolilar uyasida uchta chumolilar sinfi mavjud: qirolichalar, jangchilar va ishchi chumolilar.
Har bir sinfning chumolilari soni har xil. Qirolicha — butun chumolilar uyasi uchun yagona, jangchilar — o'nlab, ishchi chumolilar — yuzlab. Uch sinf va yuzlab obyektlar. Chumolilar bir-birlari bilan, xuddi o'z sinfidagi chumolilar va boshqa sinflar bilan keskin ma'lum qoidalarga muvofiq o'zaro aloqada bo'lishadi.
Bu ajoyib misol. Odatda dasturda hammasi xuddi shunday. Asosiy obyekt mavjud, u boshqa sinflarning barcha obyektlarini yaratadi. Obyektlar bir-birlari bilan va dastur "tashqi dunyo"si bilan o'zaro aloqa qila boshlaydi. Bu obyektlar ichida ularning xulqini qat'iy belgilangan.
Bu ikki tushuntirish — bir medalning ikki tomoni. Haqiqat o'rtada. Birinchi misol (chizma va kemalar haqida) sinf va bu sinfning obyektlari o'rtasidagi aloqani namoyish qiladi. Analogiya juda kuchli. Ikkinchi misol (chumolilar uyi haqida) dastur ishlayotganda mavjud bo'lgan obyektlar va yozilgan sinflar o'rtasidagi aloqani namoyish qiladi.
Avval siz dasturning barcha mavjud obyektlari uchun sinflar yozishingiz kerak, keyin esa ularning o'zaro aloqasini tasvirlashingiz kerak. Ha, bu qiyin, lekin u qiyin ko'rinmaydi.
Java-da dasturning barcha entitlari obyektlar hisoblanadi va dastur yozish turli obyektlar o'rtasidagi o'zaro aloqalarning turli usullarini tasvirlashdan iborat. Obyektlar bir-birining metodlarini chaqiradi va ularga kerakli ma'lumotlarni uzatadi.
Hujjatlar
Qanday qilib metodlarga qaysi ma'lumotlarni uzatish kerakligini bilish mumkin? Bu bilish allaqachon siz uchun o'ylangan.
Odatda har bir sinfning tavsifi bo'ladi, u nima uchun yaratilgani aytiladi. Odatda, har bir ochiq metodning ham tavsifi bo'ladi: u nima qiladi va unga qaysi ma'lumotlarni uzatish kerakligini ko'rsatadi.
Sinfdan foydalanish uchun, u nima qilayotganini umumiy qilib bilishingiz kerak. Shuningdek, har bir metodning nima qilayotganini aniq bilishingiz kerak. Va uni qanday amalga oshirayotganini bilish shart emas. Bu o'ziga xos sehrli tayoqcha.
Kodni ko'rib chiqaylik — faylni nusxalash:
| c:\data.txt faylini c:\result.txt fayliga nusxalash |
|---|
|
Agar bu kodni qatorma-qator o'qisangiz, u nima qilayotganini umumiy qilib tushunishingiz mumkin. Lekin bu yerda tajriba va amaliyot kerak. Shunday qilib, ozgina vaqt o'tgach, bu kod sizga tanish va tushunarli bo'lib ko'rinadi.
2. Dastur loyihalash
Dastur loyihalash — bu bir san'at. Bu oddiy va qiyin bir vaqtda. Oddiy, chunki hech qanday qattiq qonunlar yo'q: taqiqlangan narsa emas — ruxsat etilgan. Va qiyin ham shu sabab bilan: biror narsani qilishning juda ko'p usullari bor va eng yaxshi variantni topish qiyin.
Dastur loyihalash — bu kitob yozishga o'xshaydi. Bir tomondan siz faqat harflar, so'zlar, jumlalar yozasiz. Ammo boshqa tomondan — hikoya, bosh qahramonlar xususiyatlari, ichki ziddiyatlar, konfliktlar, uslub va h.k. muhimdir.
Asosiy narsa — kodni kim uchun yozayotganingizni tushunishdir. Va siz kodni boshqa dasturchilar uchun yozasiz.
Har qanday mahsulotni yaratish — bu o'zgartirishlar kiritishdir: bu yerda qo'shiladi, u yerda o'chiriladi, bu yerda qayta ishlanadi. Shu tarzda, kichik iteratsiyalar orqali katta, ulkan va gigant loyihalar tug'iladi.
Kodga asosiy talab — u boshqa dasturchilar uchun tushunarli bo'lishi kerak. Xato, lekin tushunarli kodni tuzatish mumkin. Tushunarsiz to'g'ri kodni yaxshilab bo'lmaydi. Uni faqat tashlab yuborish qoladi.
Qanday qilib yaxshi va tushunarli kod yozish mumkin?
Buning uchun uchta narsani qilish kerak:
- Metodlar ichida yaxshi va tushunarli kod yozish — eng osoni.
- Dasturning qaysi entitlari bo'lishi kerakligini hal qilish
- Dastur uchun to'g'ri mantiqiy qismlarga ajratish
Bu tushunchalar ortida nimalar bor?
Metodlar ichida yaxshi kod yozish
Agar sizning hech bo'lmaganda boshlang'ich darajada ingliz tilingiz bo'lsa, ba'zi hollarda kodni qanchalik oson o'qilishi mumkinligini sezgan bo'lishingiz mumkin: xuddi ingliz tilidagi jumlalarga o'xshab:
class Cat extends Pet– sinfi Mushuk sinfini kengaytiradiwhile(stream.ready())– oqim tayyor bo'lganda ...if (a<b) return a; else return b– agarаkichikroqbga bo'lsa,аni qaytarish, aks holdabni qaytarish.
Bu ataylab shunday qilingan. Java — bir necha tillardan biridirki, unda o'zingizni o'zi hujjatlashtirgan kodni yozish oson: izohlarisiz tushunarli kod. Java-dagi yaxshi kodda ko'plab metodlar ingliz tilidagi jumlalar kabi oddiygina o'qiladi.
Kodni yozishda, uni imkon qadar oddiy va maqbul qilish sizning vazifangizdir. Faqat o'qilishi qanchalik oson bo'lishi mumkinligini o'ylang va siz to'g'ri yo'nalishda harakat qilishni boshlaysiz.
Java-da o'qilishi oson kod yozish qabul qilingan. Har bir metod butunlay ekranga sig'ishi ma'qul (metodning uzunligi 20-30 qatordan iborat). Bu butun Java hamjamiyati uchun me'yor. Agar kodni yaxshilash mumkin bo'lsa, uni yaxshilash kerak.
Yaxshi kod yozishni o'rganishning eng yaxshi usuli — doimiy amaliyot. Ko'p kod yozing, boshqalarning kodini o'rganing, tajribaliroq hamkasblarinizdan kodingizni ko'rib chiqishni so'rang.
Va eslangki, qachonki o'zingizga "shu ham o'tadi" desangiz, rivojlanishingiz to'xtaydi.
Qaysi entitlar dasturning ichida bo'lishi kerakligini hal qilish
Kodingizni boshqa dasturchilar uchun tushunarli qilish kerak. Agar 10 dasturchidan 9 tasi dasturni loyihalashda A, B va C sinflarini yaratsa, siz ham A, B va C sinflarini yaratishingiz kerak. Siz kodingizni boshqalarga tushunarli yozishingiz kerak.
Ajoyib, ishlaydigan, tez, g'ayritabiiy kod — bu yomon kod.
Siz boshqa loyihalarni o'rganishingiz kerak: bu allaqachon IT-industriyada yig'ilgan butun donolikni o'zlashtirishning eng yaxshi, eng tez va eng oson usulidir.
Va, aytmoqchi, sizda allaqachon qo'lingizda ajoyib, mashhur, yaxshi hujjatlashtirilgan loyiha mavjud — Java SDK. Undan boshlang.
Sinflar va sinf tuzilmalarini tahlil qiling. Ba'zi metodlar nima uchun statik, boshqalari esa emasligini o'ylang. Nima uchun metodlarda ushbu parametrlar mavjud, boshqalar emas. Nima uchun aynan shu metodlar, sinflar nima uchun aynan shunday nomlanadi va aynan shunday paketlarda joylashgan.
Ushbu savollarga barcha javoblarni tushunishni boshlaganingizda, boshqalarga tushunarli kod yozishingiz mumkin bo'ladi.
Biroq, sizni Java SDK-dagi metodlar ichidagi kodni tahlil qilishdan oldin ogohlantirmoqchiman. Ko'plab metodlar kodi ish tezligini maksimal darajada oshirish maqsadida qayta yozilgan — uning o'qilishi katta masala ostida.
Dastur uchun to'g'ri mantiqiy qismlarga ajratish
Odatda, har qanday dasturni qismlarga yoki modullarga ajratish kerak. Har bir qism dastur ma'lum aspektlari uchun javobgardir.
Mana, kompyuterda sistemali blok, monitor, klaviatura bor, va bularning barchasi alohida, bog'lanmagan qismlar. Bundan tashqari, ularning o'zaro aloqasi standartlashtirilgan: USB, HDMI va h.k. Agar siz klaviaturaga qahva quyib qo'ysangiz, uni oddiygina kran ostida yuvib, quritib, yana foydalanishingiz mumkin.
A notebook esa monolit arxitekturaning misolidir: mantiqiy qismlar mavjud bo'lsa-da, ular ko'proq birlashtirilgan. MacBookPro-ni tozalash uchun klaviaturani olib tashlash kerak bo'ladi. Va notebookga qahva to'kilganida — yangi buyurtma qilish uchun sabab bo'lishi mumkin. Faqat qahva emas.
3. O'z sinflaringizni yaratish
Lekin siz dasturlashni o'rganayotganingiz uchun, kichik narsalardan boshlashingiz kerak — o'z sinflaringizni yaratishni o'rganishingiz kerak.
Siz, albatta, ularni yaratgan bo'lishingiz mumkin, lekin siz dasturda qaysi sinflar bo'lishi kerakligini tushunib, ularni nomlay olishingiz kerak. Metodlari qanday bo'lishi kerakligini va qanday o'zaro aloqada bo'lishlarini tushunishingiz kerak.
Entitlar ro'yxati
Agar siz qaerdan boshlashni bilmasangiz, boshlang'ichdan boshlang.
Dastur loyihalashning boshlanishida siz oddiygina qog'ozga dasturning ichida bo'lishi kerak bo'lgan entitlar (obyektlar) ro'yxatini yozishingiz mumkin. Keyin ularni dasturlash: har bir entit — alohida sinf.
Misol
Misol uchun, siz shaxmat o'yinini yozmoqchisiz. Sizga bunday entitlar kerak bo'ladi: shaxmat taxtasi va 6 turdagi figuralar. Figuralar turlicha harakat qiladi, turlicha qiymatga ega — bu alohida sinflar bo'lishi mantiqan. Dastlab, qancha ko'p sinflar — shunchalik yaxshi.
Ikki sinf o'rniga oʻn sinf yozadigan dasturchi-yangi boshlovchini uchratish — katta kamchilik. Mana, oʻn oʻrniga ikkita, hatto bitta sinf yozishni yangi boshlovchilar juda yaxshi koʻradi. Shunday qilib, koʻproq sinflar, dasturchilar. Va sizning kodingiz boshqalarga ham tushunarli bo'ladi, ehtimol sizdan tashqari 😛
Shaxmat
Faraz qilaylik, biz shaxmat uchun sinflarni yozishga qaror qildik: bu sinflar qanday ko'rinadi?
Shaxmat taxtasi — bu oddiy 8 ga 8 massivmi? Yaxshisi, uning uchun alohida sinf yarating, ichida massivga havolani saqlaydigan sinf. Keyin "shaxmat taxtasi" sinfida ko'p foydali metodlarni qo'shishingiz mumkin, masalan, hujayra bo'sh yoki band ekanligini tekshiruvchi.
Umuman, avval har doim quyidagi tamoyilga amal qilish mumkin: Dasturda turli Entitlar mavjud, Entitlarda esa tur mavjud. Bu tur – bu sinf.
4. Statik o'zgaruvchilar va metodlar
Statik o'zgaruvchilar va metodlardan foydalanishni unutmang. Agar sizda bir shaxmat figurosi boshqa figuro bilan interaksiya qilsa, unda kodingizda birinchi figuraga, ikkinchi figuraga va shaxmat taxtasiga havolalar uzatiladigan metod bo'lishi kerak.
Doimiy ravishda mavjud bo'lgan "mavjud bo'lgan obyektlar"ga havolalarni uzatmang, odatda ularni statik o'zgaruvchilar sifatida ishlab chiqadi va ularga dastur har qanday joyida murojaat qilish mumkin.
Masalan, quyidagicha:
| Kod | Izoh |
|---|---|
|
Yagona ChessBoard turidagi obyektga havola.8×8 o'lchamli ikki o'lchamli massiv, statik o'zgaruvchi emas. Taxtaga figuralarni qo'shamiz. |
Yoki statik o'zgaruvchi o'rniga yagona obyektni qaytaradigan metod qilishingiz mumkin. Masalan, shunday:
public class ChessBoard
{
private static ChessBoard board = new ChessBoard();
public static ChessBoard getBoard()
{
return board;
}
public ChessItem[][] cells = new ChessItem[8][8];
...
}
public class Game
{
public static void main(String[] args)
{
var board = ChessBoard.getBoard();
board.cells[0][3] = new King(Color.WHITE);
board.cells[0][4] = new Queen(Color.WHITE);
...
}
}
GO TO FULL VERSION