Java ကိုလေ့လာရာတွင် ဦးစွာတွေ့ကြုံရမည့် အခက်အခဲများကတော့ Classဆိုတာဘာလဲ၊ ပြီးတော့ Instanceဆိုတာဘာလဲ ဟုခေါ်သော မေးခွန်းများဖြစ်ကြပါသည်။ ဤ Javaကိုအမြန်ဆုံးလေ့လာခြင်း အခန်းဆက် ဘလော့ထဲမှာတော့ Object Oriented Programming ရဲ့အမြင်က မဟုတ်ပဲ၊ Memoryပေါ်က Program တစ်ခုပေါ်တွင် တည်ရှိသော အမြင်ပိုင်းဆိုင်ရာ ရှု့ထောင့်မှ Classနဲ့ Instance တို့ရဲ့ ကွဲခြားချက်တွေကို လေ့လာသွားပါမည်။
Class ဆိုသည်မှာ အဲ့ဒီအစုအစည်းရဲ့ တန်ဖိုးတွေကိုသတ်မှတ်ရန်အတွက် အချက်အလက်များ (Field)နဲ့၊ လုပ်ဆောင်ချက် (Method)များကို စုစည်းထားတဲ့ အစုအစည်းတစ်ခုလို့သတ်မှတ်ထား၏။ ဤရှင်းလင်းချက်ကို ကြည့်ရုံဖြင့် Class နဲ့ Instance ကိုကွဲပြားပြီး သိရှိနိုင်မည်မဟုတ်ပေ။ ဤသို့ဆိုလျှင် Class နဲ့ Instance ကွာခြားချက်သည် အဘယ်နည်း ဟုမေးစရာရှိပါမည်။ Java နှင့် ပတ်သက်သော စာအုပ်ပေါင်းများစွာတွင် နားလည်လွယ်စေရန် နည်းအမျိုးမျိုးဖြင့် ရှင်းပြထားလေ့ရှိ၏။ ကျွှန်တော်အနှစ်အသက်ဆုံး အဖြေမှာ ကွန်ပျူတာ Memory အပေါ်တွင် ဖြစ်ပေါ်လာပုံ၏ ဒါမှမဟုတ် ဇာစ်မြစ် ဟာကွဲပြားခြားနားသည် ဟူသော ရှင်းလင်းချက်ပဲ ဖြစ်ပါသည်။
Class ရဲ့ ဇာစ်မြစ်သည် .java ဖိုင်ကို Compileလုပ်ပြီး၊ ရရှိလာတဲ့ .class ဖိုင် ဖြစ်ပါသည်။ Program တစ်ခုမှ Class ကိုဆက်သွယ် အသုံးပြုမည် ဆိုလျှင် .class ကိုဖတ်ယူပြီး Memoryပေါ်တွင် Class အဖြစ် နေရာချထားပါမည်။ တဖန် Instance သည် Memoryပေါ်တွင် တည်ရှိပြီးဖြစ်သော Class ကိုအသက်သွင်း၍ Memory ပေါ်မှအခြားသောနေရာတွင် ဖြစ်ပေါ်လာစေပါသည်။ မှတ်ရန်အချက်မှာ Classသည် .class ဖိုင်တစ်ခုမှ တစ်ကြိမ်တည်းသာ ဖတ်ယူမွေးဖွားပြီး၊ Instanceသည် Memory ပေါ်တွင်တည်ရှိပြီးဖြစ်သော Class မှ Memory ရှိသလောက် အကြိမ်ကြိမ် ကူးယူမွေးဖွားနိုင်ခြင်း ဖြစ်ပေသည်။
သည်လိုဆိုရင်Classနဲ့Instanceကို ဘယ်လိုခွဲခြားပြီး အသုံးချသင့်တယ်ဆိုတာကို လက်တွေ့Codeကိုရေးပြီး လေ့လာကြည့်ရအောင်။ အောက်ပါ နမှုနာတွေကိုကြည့်ကြည့်ကြပါ။ အသီးသီး class A နဲ့ Bကိုရေးသားထားပြီး TestClassမှနေ ခေါ်ယူအသုံးပြုထားပါသည်။ class A နဲ့ Bတို့ရဲ့ ကွဲပြားချက်ကိုလေ့လာကြည့်ကြပါဆို့။
class A
Class AရောBပါ၊ ကိုယ်စီ Member Fieldအနေနဲ့ int i ကိုပိုင်ဆိုင်ပြီး၊ လုပ်ဆောင်ချက် int တန်ဖိုးကိုပြန်ပေးတဲ့ getTwice methodကို ပိုင်ဆိုင်ကြပါတယ်။ class A ရဲ့ i နဲ့ getTwice() ဟာ Classကိုတိုက်ရိုက်ဆက်သွယ်ပြီး အသုံးပြုနိုင်ဖို့အတွက် အရှေ့မှာ staticဆိုပြီ သတ်မှတ်ချက်ကို ရေးသားရပါတယ်။ အဲ့ဒီလိုရေးသားထားတဲ့ Fields တွေနဲ့ method တွေကို static field, static methodဆိုပြီး ခေါ်ဝေါ်လေ့ရှိပါတယ်။
တဖန် class B မှာရှိတဲ့ field နဲ့ method တွေရဲ့ရှေ့မှာ static ဆိုတာမရေးသားထားပါဘူး။ အဲ့ဒါဟာ class B မှတဆင့် ပွားယူနိုင်တဲ့ instanceတွေမှတဆင့် အသုံးပြုစေနိုင်ဖို့အတွက် ဖြစ်ပါတယ်။ အဲ့ဒီအတွက် instance field, instance method ဆိုပြီးခေါ်ဝေါ်လေ့ ရှိပါတယ်။
class Test
တဖန် class B ရဲ့ instance b ကို B b = new B(); ဆိုပြီး သတ်မှတ်ပေးနေပါတယ်။ နောက်တစ်ကြောင်းတွင် b.i = 10ဆိုပြီး instance b ရဲ့ i ရဲ့တန်ဖိုးဟာ 10 ဖြစ်ပါတယ် လို့သတ်မှတ်နေပြန်တယ်။ ဆက်ပြီး instance methodဖြစ်တဲ့ b.getTwiceကိုခေါ် ပြီး System Consoleမှာ ရေးသားနေပါတယ်။ b instance မှနေအသုံးပြုနိုင်ရန် အတွက် သူ့ရဲ့ Field နဲ့ methodရဲ့ရှေ့မှာ staticဆိုတာ မရေးသားထားပါဘူး။ အဲ့ဒီလို instance field နဲ့ instance method တွေရှိတဲ့အတွက် B classရဲ့ instance b မှတဆင့် အသုံးပြုနိုင်ခြင်းဖြစ်ပါတယ်။
တနည်းတွေးကြည့်ကြရအောင်။ class A ကိုရော instance မလုပ်နိုင်ဘူးလား။ လုပ်နိုင်ပါတယ်။ ဒါပေမယ့် class A မှာ static field နဲ့ static method သာပိုင်ဆိုင်ပြီး insatance fieldတွေ methodတွေ မပါတဲ့အတွက် သူ့ရဲ့ instance ကိုပွားယူလုပ်အောင် အဓိပ္ပါယ်မရှိနိုင်ပါဘူး။
ဒါဖြင့် Classလည်းအဲလုပ်လို့ရတယ်၊ instanceလည်းအလုပ်လုပ်လို့ရတယ်။ ဘာလို့ instanceကလိုအပ်ရတာလဲဆိုတာကို စဉ်းစားကြည့်ကြရအောင်။ အောက်ပါ Personဆိုတဲ့ Classကိုကြည့်ပါ။ name နဲ့ ageဆိုတဲ့ instance fieldကိုပိုင်ဆိုင်ပြီး introdude() ဆိုတဲ့ instance methodရယ် Person(String name, int age)ဆိုတဲ့ constructor ကိုပိုင်ဆိုင်ပါတယ်။ Constructorဟာ instance တွေကို ပွားယူတဲ့အခါမှာ အမြဲတမ်းခေါ်ယူခံရမည့် လုပ်ဆောင်ချက်တစ်ခုဖြစ်ပါတယ်။ Classမှတဆင့် instanceကို လုပ်ယူတဲ့အခါမှာ လုပ်ဆောင်ရမည့် လုပ်ဆောင်ချက်ဆိုရင်လည်း မမှားနိုင်ပါဘူး။
သည်Person Constructor ကတော့ String name နဲ့ int age ကို Argumentအနေနဲ့ လက်ခံရယူပြီး၊ instance member ဖြစ်ကြတဲ့ name နဲ့ ageမှာ အသီးသီး အစားထိုးသတ်မှတ်နေပါတယ်။ ပြီးတော့ လုပ်ဆောင်ချက် introduceထဲမှာတော့ သူ့ရဲ့ name နဲ့ ageကို System Consoleမှာ ရေးသားပြနေပါတယ်။
class Person
classTest
My name is Aung Aung and I am 30years old.
My name is Thida and I am 24years old.
အထက်ပါ နမှုနာကိုကြည့်ခြင်းအားဖြင့် Classတစ်ခုမှ မတူညီသောတန်ဖိုးများနှင့် မတူညီသော Instanceများကို အကြိမ်ကြိမ် လုပ်ယူနိုင်တယ် ဆိုတာကို သိရှိနိုင်ပါတယ်။
အလွယ်ဆုံးပြောရမည်ဆိုလျှင် Classနဲ့ Instance ဟာ ဒယ်အိုးနဲ့ ဘိန်းမုန့်လိုပါပဲ။ ဒယ်အိုးတစ်လုံးလိုပဲ Classဟာတစ်ခုတည်းရှိပြီး၊ ဒယ်အိုးထဲမှာပါဝင်တဲ့ အစာတွေကို အမျိုးမျိုးပြောင်းထည့်ပြီး၊ ထောပါတ်ဘိန်းမုန့်တွေ ရိုးရိုးဘိန်းမုန့်တွေကို ဖုတ်ယူနိုင်သလို၊ Classတစ်ခုမှ တန်ဖိုးအမျိုးမျိုးပြောင်းလည်းပြီး Instanceတွေကို အမျိုးမျိုးလုပ်ယူနိုင်ပါတယ်။
Class နဲ့ Instanceတို့ရဲ့ ကွဲခြားချက်ကိုသိရှိပြီး Javaဆန်တဲ့ Codeများကိုရေးသားသွားကြပါဆို့။
Class ဆိုသည်မှာ အဲ့ဒီအစုအစည်းရဲ့ တန်ဖိုးတွေကိုသတ်မှတ်ရန်အတွက် အချက်အလက်များ (Field)နဲ့၊ လုပ်ဆောင်ချက် (Method)များကို စုစည်းထားတဲ့ အစုအစည်းတစ်ခုလို့သတ်မှတ်ထား၏။ ဤရှင်းလင်းချက်ကို ကြည့်ရုံဖြင့် Class နဲ့ Instance ကိုကွဲပြားပြီး သိရှိနိုင်မည်မဟုတ်ပေ။ ဤသို့ဆိုလျှင် Class နဲ့ Instance ကွာခြားချက်သည် အဘယ်နည်း ဟုမေးစရာရှိပါမည်။ Java နှင့် ပတ်သက်သော စာအုပ်ပေါင်းများစွာတွင် နားလည်လွယ်စေရန် နည်းအမျိုးမျိုးဖြင့် ရှင်းပြထားလေ့ရှိ၏။ ကျွှန်တော်အနှစ်အသက်ဆုံး အဖြေမှာ ကွန်ပျူတာ Memory အပေါ်တွင် ဖြစ်ပေါ်လာပုံ၏ ဒါမှမဟုတ် ဇာစ်မြစ် ဟာကွဲပြားခြားနားသည် ဟူသော ရှင်းလင်းချက်ပဲ ဖြစ်ပါသည်။
Class ရဲ့ ဇာစ်မြစ်သည် .java ဖိုင်ကို Compileလုပ်ပြီး၊ ရရှိလာတဲ့ .class ဖိုင် ဖြစ်ပါသည်။ Program တစ်ခုမှ Class ကိုဆက်သွယ် အသုံးပြုမည် ဆိုလျှင် .class ကိုဖတ်ယူပြီး Memoryပေါ်တွင် Class အဖြစ် နေရာချထားပါမည်။ တဖန် Instance သည် Memoryပေါ်တွင် တည်ရှိပြီးဖြစ်သော Class ကိုအသက်သွင်း၍ Memory ပေါ်မှအခြားသောနေရာတွင် ဖြစ်ပေါ်လာစေပါသည်။ မှတ်ရန်အချက်မှာ Classသည် .class ဖိုင်တစ်ခုမှ တစ်ကြိမ်တည်းသာ ဖတ်ယူမွေးဖွားပြီး၊ Instanceသည် Memory ပေါ်တွင်တည်ရှိပြီးဖြစ်သော Class မှ Memory ရှိသလောက် အကြိမ်ကြိမ် ကူးယူမွေးဖွားနိုင်ခြင်း ဖြစ်ပေသည်။
အမြန်မှတ်ချက်
Class နှင့် Instanceတို့သည်၊ တန်ဖိုးနှင့် လုပ်ဆောင်ချက်များကို စုစည်းထားသည့်အချက်မှာ တူညီကြပေသည်။ သို့ရာတွင် Class သည် .class ဖိုင်မှ တစ်ကြိမ်တည်းသာ ဖတ်ယူမွေးဖွားပြီး၊ Instanceသည် Memoryပေါ်တွင်တည်ရှိသော Classမှတစ်ဆင့် အကြိမ်ကြိမ် ကူးယူမွေးဖွားနိုင်ခြင်း တို့ကကွဲပြားချက်တို့ ဖြစ်ကြပါသည်။
Class နှင့် Instanceတို့သည်၊ တန်ဖိုးနှင့် လုပ်ဆောင်ချက်များကို စုစည်းထားသည့်အချက်မှာ တူညီကြပေသည်။ သို့ရာတွင် Class သည် .class ဖိုင်မှ တစ်ကြိမ်တည်းသာ ဖတ်ယူမွေးဖွားပြီး၊ Instanceသည် Memoryပေါ်တွင်တည်ရှိသော Classမှတစ်ဆင့် အကြိမ်ကြိမ် ကူးယူမွေးဖွားနိုင်ခြင်း တို့ကကွဲပြားချက်တို့ ဖြစ်ကြပါသည်။
သည်လိုဆိုရင်Classနဲ့Instanceကို ဘယ်လိုခွဲခြားပြီး အသုံးချသင့်တယ်ဆိုတာကို လက်တွေ့Codeကိုရေးပြီး လေ့လာကြည့်ရအောင်။ အောက်ပါ နမှုနာတွေကိုကြည့်ကြည့်ကြပါ။ အသီးသီး class A နဲ့ Bကိုရေးသားထားပြီး TestClassမှနေ ခေါ်ယူအသုံးပြုထားပါသည်။ class A နဲ့ Bတို့ရဲ့ ကွဲပြားချက်ကိုလေ့လာကြည့်ကြပါဆို့။
class A
public class A { static int i; static int getTwice() { return i*2; } }class B
public class B { int i; public int gatTwice() { return i * 2; } }
Class AရောBပါ၊ ကိုယ်စီ Member Fieldအနေနဲ့ int i ကိုပိုင်ဆိုင်ပြီး၊ လုပ်ဆောင်ချက် int တန်ဖိုးကိုပြန်ပေးတဲ့ getTwice methodကို ပိုင်ဆိုင်ကြပါတယ်။ class A ရဲ့ i နဲ့ getTwice() ဟာ Classကိုတိုက်ရိုက်ဆက်သွယ်ပြီး အသုံးပြုနိုင်ဖို့အတွက် အရှေ့မှာ staticဆိုပြီ သတ်မှတ်ချက်ကို ရေးသားရပါတယ်။ အဲ့ဒီလိုရေးသားထားတဲ့ Fields တွေနဲ့ method တွေကို static field, static methodဆိုပြီး ခေါ်ဝေါ်လေ့ရှိပါတယ်။
တဖန် class B မှာရှိတဲ့ field နဲ့ method တွေရဲ့ရှေ့မှာ static ဆိုတာမရေးသားထားပါဘူး။ အဲ့ဒါဟာ class B မှတဆင့် ပွားယူနိုင်တဲ့ instanceတွေမှတဆင့် အသုံးပြုစေနိုင်ဖို့အတွက် ဖြစ်ပါတယ်။ အဲ့ဒီအတွက် instance field, instance method ဆိုပြီးခေါ်ဝေါ်လေ့ ရှိပါတယ်။
class Test
public class Test { public static void main(String [] args) { A.i = 10; System.out.println("Twice Of Class A : " + A.getTwice()); B b = new B(); b.i = 10; System.out.println("Twice of Instance b : " + b.gatTwice()); } }Test Classထဲမှာတော့ class A နဲ့ B တို့ရဲ့ အသုံးပြုပုံတွေကို ဖော်ပြပေးနေပါတယ်။ A.i ဆိုတဲ့ class field i ရဲ့တန်ဖိုးကို 10ဆိုပြီးသတ်မှတ်နေပါတယ်။ ပြီးသောအခါ A.getTwice()ဆိုပြီး A class ရဲ့ getTwiceလုပ်ဆောင်ချက်ကို ခေါ်ယူပြီး system consoleမှာရေးသားစေပါတယ်။ A class ရဲ့ i နဲ့ getTwice ကို static အနေနဲ့ သတ်မှတ်ထားတဲ့အတွက် class A မှ တိုက်ရိုက်အသုံးချနိုင်ခြင်း ဖြစ်ပါတယ်။
တဖန် class B ရဲ့ instance b ကို B b = new B(); ဆိုပြီး သတ်မှတ်ပေးနေပါတယ်။ နောက်တစ်ကြောင်းတွင် b.i = 10ဆိုပြီး instance b ရဲ့ i ရဲ့တန်ဖိုးဟာ 10 ဖြစ်ပါတယ် လို့သတ်မှတ်နေပြန်တယ်။ ဆက်ပြီး instance methodဖြစ်တဲ့ b.getTwiceကိုခေါ် ပြီး System Consoleမှာ ရေးသားနေပါတယ်။ b instance မှနေအသုံးပြုနိုင်ရန် အတွက် သူ့ရဲ့ Field နဲ့ methodရဲ့ရှေ့မှာ staticဆိုတာ မရေးသားထားပါဘူး။ အဲ့ဒီလို instance field နဲ့ instance method တွေရှိတဲ့အတွက် B classရဲ့ instance b မှတဆင့် အသုံးပြုနိုင်ခြင်းဖြစ်ပါတယ်။
အမြန်မှတ်ချက်
Class ရဲ့ static field နဲ့ static methodတွေဟာ memory ပေါ်မှာ တစ်ကြိမ်တည်းသာ ဖြစ်တည်တယ်ဆိုတဲ့ ထူးခြားချက်ကို အသုံးချပြီး Class field နဲ့ လုပ်ဆောင်ချက် တွေကိုရေးသားသင့်ပါသည်။
Class ရဲ့ static field နဲ့ static methodတွေဟာ memory ပေါ်မှာ တစ်ကြိမ်တည်းသာ ဖြစ်တည်တယ်ဆိုတဲ့ ထူးခြားချက်ကို အသုံးချပြီး Class field နဲ့ လုပ်ဆောင်ချက် တွေကိုရေးသားသင့်ပါသည်။
တနည်းတွေးကြည့်ကြရအောင်။ class A ကိုရော instance မလုပ်နိုင်ဘူးလား။ လုပ်နိုင်ပါတယ်။ ဒါပေမယ့် class A မှာ static field နဲ့ static method သာပိုင်ဆိုင်ပြီး insatance fieldတွေ methodတွေ မပါတဲ့အတွက် သူ့ရဲ့ instance ကိုပွားယူလုပ်အောင် အဓိပ္ပါယ်မရှိနိုင်ပါဘူး။
ဒါဖြင့် Classလည်းအဲလုပ်လို့ရတယ်၊ instanceလည်းအလုပ်လုပ်လို့ရတယ်။ ဘာလို့ instanceကလိုအပ်ရတာလဲဆိုတာကို စဉ်းစားကြည့်ကြရအောင်။ အောက်ပါ Personဆိုတဲ့ Classကိုကြည့်ပါ။ name နဲ့ ageဆိုတဲ့ instance fieldကိုပိုင်ဆိုင်ပြီး introdude() ဆိုတဲ့ instance methodရယ် Person(String name, int age)ဆိုတဲ့ constructor ကိုပိုင်ဆိုင်ပါတယ်။ Constructorဟာ instance တွေကို ပွားယူတဲ့အခါမှာ အမြဲတမ်းခေါ်ယူခံရမည့် လုပ်ဆောင်ချက်တစ်ခုဖြစ်ပါတယ်။ Classမှတဆင့် instanceကို လုပ်ယူတဲ့အခါမှာ လုပ်ဆောင်ရမည့် လုပ်ဆောင်ချက်ဆိုရင်လည်း မမှားနိုင်ပါဘူး။
သည်Person Constructor ကတော့ String name နဲ့ int age ကို Argumentအနေနဲ့ လက်ခံရယူပြီး၊ instance member ဖြစ်ကြတဲ့ name နဲ့ ageမှာ အသီးသီး အစားထိုးသတ်မှတ်နေပါတယ်။ ပြီးတော့ လုပ်ဆောင်ချက် introduceထဲမှာတော့ သူ့ရဲ့ name နဲ့ ageကို System Consoleမှာ ရေးသားပြနေပါတယ်။
class Person
public class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } public void introduce() { System.out.print("My name is " + name); System.out.println(" and I am " + age + "years old."); } }အောက်ပါ Test class ထဲမှာတော့ Person ရဲ့ a instance နဲ့ b instance ကိုလုပ်ယူပြီး အသီးသီးရဲ့ introduceလုပ်ဆောင်ချက်ကို လုပ်ဆောင်စေပါတယ်။
classTest
public class Test { public static void main(String [] args) { Person a = new Person("Aung Aung", 30); Person b = new Person("Thida", 24); a.introduce(); b.introduce(); } }အထက်ပါ Test Classကို Run ကြည့်မည်ဆိုပါက System Console မှာ အောက်ပါအတိုင်း စာကြောင်းများက ထွက်ပေါ်လာပါလိမ့်မည်။
My name is Aung Aung and I am 30years old.
My name is Thida and I am 24years old.
အထက်ပါ နမှုနာကိုကြည့်ခြင်းအားဖြင့် Classတစ်ခုမှ မတူညီသောတန်ဖိုးများနှင့် မတူညီသော Instanceများကို အကြိမ်ကြိမ် လုပ်ယူနိုင်တယ် ဆိုတာကို သိရှိနိုင်ပါတယ်။
အမြန်မှတ်ချက်
Constructorမှတဆင့် ပုံစံချယူခြင်းအားဖြင့် Class တစ်ခုမှနေ Instanceကို အကြိမ်ကြိမ်ပွားယူနိုင်ပါသည်။
Constructorမှတဆင့် ပုံစံချယူခြင်းအားဖြင့် Class တစ်ခုမှနေ Instanceကို အကြိမ်ကြိမ်ပွားယူနိုင်ပါသည်။
အလွယ်ဆုံးပြောရမည်ဆိုလျှင် Classနဲ့ Instance ဟာ ဒယ်အိုးနဲ့ ဘိန်းမုန့်လိုပါပဲ။ ဒယ်အိုးတစ်လုံးလိုပဲ Classဟာတစ်ခုတည်းရှိပြီး၊ ဒယ်အိုးထဲမှာပါဝင်တဲ့ အစာတွေကို အမျိုးမျိုးပြောင်းထည့်ပြီး၊ ထောပါတ်ဘိန်းမုန့်တွေ ရိုးရိုးဘိန်းမုန့်တွေကို ဖုတ်ယူနိုင်သလို၊ Classတစ်ခုမှ တန်ဖိုးအမျိုးမျိုးပြောင်းလည်းပြီး Instanceတွေကို အမျိုးမျိုးလုပ်ယူနိုင်ပါတယ်။
Class နဲ့ Instanceတို့ရဲ့ ကွဲခြားချက်ကိုသိရှိပြီး Javaဆန်တဲ့ Codeများကိုရေးသားသွားကြပါဆို့။
static の使い方よくわかりました。
ReplyDeleteありがとうございます。
Thanks for your lessons. It is very useful for Java learners and I want to encourage you to write many lessons.
ReplyDeleteIf you are going for most excellent contents like myself, simply go to see this web site every day because
ReplyDeleteit gives quality contents, thanks
There is definately a lot to learn about this topic.
ReplyDeleteI love all the points you've made.
My spouse and I stumbled over here from a different website
ReplyDeleteand thought I should check things out. I like what I see so now i'm following you.
Look forward to going over your web page for a second time.
Hi, I do think this is a great blog. I stumbledupon it ;) I will revisit yet again since I book-marked it.
ReplyDeleteMoney and freedom is the greatest way to change, may you be rich and continue to
guide other people.
It's actually a nice and helpful piece of information.
ReplyDeleteI'm glad that you shared this useful information with us.
Please keep us up to date like this. Thank you for sharing.
I was able to find good info from your articles.
ReplyDeleteIt's a pity you don't have a donate button! I'd
ReplyDeletecertainly donate to this fantastic blog! I suppose for now i'll settle for book-marking and adding your RSS feed to my Google account.
I look forward to brand new updates and will talk about this site with my Facebook group.
Talk soon!
What's up everyone, it's my first pay a visit at this web page, and piece of writing is really fruitful
ReplyDeletein support of me, keep up posting such content.
Hmm is anyone else having problems with the pictures on this blog
ReplyDeleteloading? I'm trying to figure out if its a problem on my end or if it's the blog.
Any suggestions would be greatly appreciated.