WWETR - WWE Türkiye - WWE Turkey - TRWWE
Hoşgeldiniz . Kaliteli Hizmet İçin Üye Olunuz .
WWETR - WWE Türkiye - WWE Turkey - TRWWE
Hoşgeldiniz . Kaliteli Hizmet İçin Üye Olunuz .
WWETR - WWE Türkiye - WWE Turkey - TRWWE
Would you like to react to this message? Create an account in a few clicks or log in to continue.

WWETR - WWE Türkiye - WWE Turkey - TRWWE

WWETR - WWE Türkiye - WWE Turkey - TRWWEHoş geldin, .
Son Ziyaretiniz: Perş. Ocak 01, 1970
Mesaj Sayınız: 0

 
AnasayfaLatest imagesAramaKayıt OlGiriş yap

 

 Basit Bir Abstraction Örnegi

Aşağa gitmek 
YazarMesaj
Legend
Admin
Admin
Legend


Mesaj Sayısı : 134
Reputation : 10000
Kayıt tarihi : 14/11/10
Nerden : Bilebilirdim ?

Basit Bir Abstraction Örnegi Empty
MesajKonu: Basit Bir Abstraction Örnegi   Basit Bir Abstraction Örnegi EmptyPaz Kas. 14, 2010 11:38 am

Basit Bir Abstraction Örneği


Object Oriented tasarım ve programlamada soyutlamanın her zaman önemini vurgulamışımdır. Yazılım geliştirirken soyutlamalar sayesinde yazılımı daha yönetilebilir parçalara, modüllere ayırıp daha esnek yazılımlar geliştirebiliyoruz. Buna geliştirdiğim yazılımdan küçük bir örnek vermek istedim.
Geçenlerde Hibernate Log dosyalarını parse eden bir program yazdığımı belirtmiştim. Program belirli bir dizideki .log uzantılı dosyaları parse edip içlerinden SQL cümlelerini çıkarıyordu. Ekranda bulunan bir butonun altında yazılan kodda seçilen log dizininin altındaki log dosyalarını alıp Parser sınıfına işlemesi için gönderiyordu. Kodun ilk yazılan şekli aşağıdaki gibiydi.


Kod:

[table]

[tr]
[td class=number]01[/td]
[td class=content][b][color=#006699]private[/color][/b] [b][color=#006699]void[/color][/b] openFileActionPerformed(java.awt.event.ActionEvent evt) { [/td][/tr][/table]

[table]

[tr]
[td class=number]02[/td]
[td class=content][b][color=#006699]try[/color][/b] { [/td][/tr][/table]

[table]

[tr]
[td class=number]03[/td]
[td class=content][color=#008200]//log dosyalarını seçili dizinden alıyoruz [/color][/td][/tr][/table]

[table]

[tr]
[td class=number]04[/td]
[td class=content][/td][/tr][/table]

[table]

[tr]
[td class=number]05[/td]
[td class=content]File directory =fc.getSelectedFile(); [/td][/tr][/table]

[table]

[tr]
[td class=number]06[/td]
[td class=content]FilenameFilter filter = [b][color=#006699]new[/color][/b] FilenameFilter() { [/td][/tr][/table]

[table]

[tr]
[td class=number]07[/td]
[td class=content][b][color=#006699]public[/color][/b] [b][color=#006699]boolean[/color][/b] accept(File dir, String name) { [/td][/tr][/table]

[table]

[tr]
[td class=number]08[/td]
[td class=content][b][color=#006699]return[/color][/b] name.endsWith([color=#0000ff]".log"[/color]); [/td][/tr][/table]

[table]

[tr]
[td class=number]09[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]10[/td]
[td class=content]}; [/td][/tr][/table]

[table]

[tr]
[td class=number]11[/td]
[td class=content]File[] files =directory.listFiles(filter); [/td][/tr][/table]

[table]

[tr]
[td class=number]12[/td]
[td class=content][/td][/tr][/table]

[table]

[tr]
[td class=number]13[/td]
[td class=content][color=#008200]//***************** [/color][/td][/tr][/table]

[table]

[tr]
[td class=number]14[/td]
[td class=content][/td][/tr][/table]

[table]

[tr]
[td class=number]15[/td]
[td class=content][b][color=#006699]for[/color][/b] (File file : files) { [/td][/tr][/table]

[table]

[tr]
[td class=number]16[/td]
[td class=content]Parser parser = [b][color=#006699]new[/color][/b] Parser(file); [/td][/tr][/table]

[table]

[tr]
[td class=number]17[/td]
[td class=content]sqlLogs = parser.parse(); [/td][/tr][/table]

[table]

[tr]
[td class=number]18[/td]
[td class=content][b][color=#006699]for[/color][/b] (SqlLog sqlLog : sqlLogs) { [/td][/tr][/table]

[table]

[tr]
[td class=number]19[/td]
[td class=content]listModel.addElement(sqlLog); [/td][/tr][/table]

[table]

[tr]
[td class=number]20[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]21[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]22[/td]
[td class=content][/td][/tr][/table]

[table]

[tr]
[td class=number]23[/td]
[td class=content]} [b][color=#006699]catch[/color][/b] (Exception ex) { [/td][/tr][/table]

[table]

[tr]
[td class=number]24[/td]
[td class=content]showMessage(ex.getMessage()); [/td][/tr][/table]

[table]

[tr]
[td class=number]25[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]26[/td]
[td class=content]}[/td][/tr][/table]



Yukarıdaki basit bir işlem fakat metodun iki işi bir arada yaptığını fark ettiniz umarım. Log dosyalarını listeleme ve bu dosyaları parse etme. Ayrıca uygulamamı düşündüğümde şöyle bir ihtiyacım olduğunu anlıyorum.Uygulamam “Log dizinindeki dosyaları parse etme” işlemini yapıyor. Bu yüzden basit ama kodu ve yönetimi arttıran yeni bir sınıf ekliyorum. Aslında kısacası soyutlama yapıyorum. Uygulamam da daha önceden geçen “Log Dizini” dediğim kavram için bir sınıf oluşturuyorum. Kodu aşağıdaki gibi değiştirdim.

[table]

[tr]
[td class=number]
Kod:

01[/td]
[td class=content][b][color=#006699]public[/color][/b] [b][color=#006699]class[/color][/b] LogDirectory { [/td][/tr][/table]

[table]

[tr]
[td class=number]02[/td]
[td class=content][b][color=#006699]private[/color][/b] File directory; [/td][/tr][/table]

[table]

[tr]
[td class=number]03[/td]
[td class=content][/td][/tr][/table]

[table]

[tr]
[td class=number]04[/td]
[td class=content][b][color=#006699]public[/color][/b] LogDirectory(File directory) { [/td][/tr][/table]

[table]

[tr]
[td class=number]05[/td]
[td class=content][b][color=#006699]this[/color][/b].directory = directory; [/td][/tr][/table]

[table]

[tr]
[td class=number]06[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]07[/td]
[td class=content][/td][/tr][/table]

[table]

[tr]
[td class=number]08[/td]
[td class=content][b][color=#006699]public[/color][/b] File[] getLogFiles() { [/td][/tr][/table]

[table]

[tr]
[td class=number]09[/td]
[td class=content]FilenameFilter filter = [b][color=#006699]new[/color][/b] FilenameFilter() { [/td][/tr][/table]

[table]

[tr]
[td class=number]10[/td]
[td class=content][b][color=#006699]public[/color][/b] [b][color=#006699]boolean[/color][/b] accept(File dir, String name) { [/td][/tr][/table]

[table]

[tr]
[td class=number]11[/td]
[td class=content][b][color=#006699]return[/color][/b] name.endsWith([color=#0000ff]".log"[/color]); [/td][/tr][/table]

[table]

[tr]
[td class=number]12[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]13[/td]
[td class=content]}; [/td][/tr][/table]

[table]

[tr]
[td class=number]14[/td]
[td class=content][b][color=#006699]return[/color][/b] directory.listFiles(filter); [/td][/tr][/table]

[table]

[tr]
[td class=number]15[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]16[/td]
[td class=content]}[/td][/tr][/table]


Yukarıdaki kodda basit bir soyutlama yaptım. Log dizinindeki dosyaları getiren işi ayrı bir sınıf olarak uygulamaya ekledim.Metod aşağıdaki hale geldi.

[table]

[tr]
[td class=number]
Kod:

01[/td]
[td class=content][b][color=#006699]private[/color][/b] [b][color=#006699]void[/color][/b] openFileActionPerformed(java.awt.event.ActionEvent evt) { [/td][/tr][/table]

[table]

[tr]
[td class=number]02[/td]
[td class=content][b][color=#006699]try[/color][/b] { [/td][/tr][/table]

[table]

[tr]
[td class=number]03[/td]
[td class=content]LogDirectory logDirectory =[b][color=#006699]new[/color][/b] LogDirectory(fc.getSelectedFile()); [/td][/tr][/table]

[table]

[tr]
[td class=number]04[/td]
[td class=content]File[] files = logDirectory.getLogFiles(); [/td][/tr][/table]

[table]

[tr]
[td class=number]05[/td]
[td class=content][/td][/tr][/table]

[table]

[tr]
[td class=number]06[/td]
[td class=content][b][color=#006699]for[/color][/b] (File file : files) { [/td][/tr][/table]

[table]

[tr]
[td class=number]07[/td]
[td class=content]Parser parser = [b][color=#006699]new[/color][/b] Parser(file); [/td][/tr][/table]

[table]

[tr]
[td class=number]08[/td]
[td class=content]sqlLogs = parser.parse(); [/td][/tr][/table]

[table]

[tr]
[td class=number]09[/td]
[td class=content][b][color=#006699]for[/color][/b] (SqlLog sqlLog : sqlLogs) { [/td][/tr][/table]

[table]

[tr]
[td class=number]10[/td]
[td class=content]listModel.addElement(sqlLog); [/td][/tr][/table]

[table]

[tr]
[td class=number]11[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]12[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]13[/td]
[td class=content][/td][/tr][/table]

[table]

[tr]
[td class=number]14[/td]
[td class=content]} [b][color=#006699]catch[/color][/b] (Exception ex) { [/td][/tr][/table]

[table]

[tr]
[td class=number]15[/td]
[td class=content]showMessage(ex.getMessage()); [/td][/tr][/table]

[table]

[tr]
[td class=number]16[/td]
[td class=content]} [/td][/tr][/table]

[table]

[tr]
[td class=number]17[/td]
[td class=content]}[/td][/tr][/table]




Küçükde olsa bu tarz soyutlamanın uygulama için oldukça önemli olduğunu düşünüyorum.
Sayfa başına dön Aşağa gitmek
https://trwwe.forum.st
 
Basit Bir Abstraction Örnegi
Sayfa başına dön 
1 sayfadaki 1 sayfası
 Similar topics
-
» Fluent Interface Örnegi

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
WWETR - WWE Türkiye - WWE Turkey - TRWWE :: Konu Dışı :: Yazilim ve Programlama-
Buraya geçin: