Proje tasarımı
- Java kursu
- Uzman
- Ders 37/46
- 6 dk
Bytecode analiz projesinin iskeletini tasarlarsın.
Proje: bytecode denetleyici
Bu beş derslik projede bir bytecode denetleyici uygulayacaksın. Her derste bir parça ekleyecek, son derste çalışan bir mini denetleyici tamamlayacaksın. ASM kitaplığındaki visitor desenini düz Java ile modelleyeceksin.
İlk olarak ClassVisitor arabirimini tanımlayacaksın: void visitClass(String name); metodu sınıf adını ziyaret eder. Sonraki derslerde ClassReader ile sınıfı gezecek, ClassWriter ile çıktı üretecek, dönüşüm ve birleştirme yapacaksın.
sınıf dosyası biçimi
Bir .class dosyası sabit bir yapıdadır: sihirli sayı 0xCAFEBABE, sürüm, sabit havuz (constant pool), erişim bayrakları, this/super, alanlar, metotlar ve öznitelikler. ASM bu yapıyı ayrıştırır.
Bu projede ASM yerine düz Java ile bir visitor deseni modelleyeceğiz. ClassReader sınıfı, sanki bir sınıf dosyasını okuyormuş gibi metot adlarını gezerek visitor'ı çağırır. Bu, ASM'nin çalışma mantığını anlamak için yeterli.
Uygulama ClassVisitor arabirimini tanımla
ClassVisitor arabirimini tanımla; void visitClass(String name); metodu olsun. Main sınıfının main metodunda System.out.println("inspector ready"); yazdır.
Başlangıç kodu
// ClassVisitor arabirimini tanımla (visitClass metodu)
// Main sınıfını tanımla ve main içinde inspector ready yazdırÖrnek çözüm
interface ClassVisitor {
void visitClass(String name);
}
public class Main {
public static void main(String[] args) {
System.out.println("inspector ready");
}
}Beklenen çıktı
inspector ready
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bu proje ne yapar?
- Veri tabanı yönetir
- Sınıf yapısını inceler Doğru cevap
- Web sunucusu kurar
- Grafik penceresi çizer
Açıklama: Proje sınıf yapısını visitor deseniyle gezer.
2 visitor metodunu tamamla
void ____(String name);
void visitClass(String name);
Açıklama: visitClass sınıf adını ziyaret eden metottur.
3 sınıf dosyası bölümlerini eşleştir
| Kavram | Anlamı |
|---|---|
0xCAFEBABE |
Sihirli sayı |
constant pool |
Sabit havuz |
access flags |
Erişim bayrakları |
methods |
Metot tablosu |