جاوا و تکنولوژی های آن

java programming language

در این وبلاگ به بررسی نکات موجود در جاوا و تکنولوژی های آن می پردازیم

طبقه بندی موضوعی

۱ مطلب با موضوع «java :: Core Fundamental :: OOP» ثبت شده است

هر زبان برنامه نویسی که قابلیت سه اصل :


1-encapsulation

2-inheritance

3-polymorphism

4- و گاهی abstraction


را داشته باشد میتوانیم بگوییم آن زبان شی گرا است


encapsulation : این اصل میگوید که لازم نیست بقیه کامپوننت ها تمامی اجزا کلاس را ببینند و با استفاده از access modifier ها این دسترسی را محدود میکنیم که در پست جداگانه به این modifier ها پرداخته ایم


inheritance : با ارث بری هر شی میتواند خصوصیات شی دیگری را کسب کند و از مفهوم طبقه بندی سلسله مراتبی پشتیبانی میکند این امر بسیار مهم است . بیشتر یافته ها و اطلاعات از طریق طبقه بندی سلسله مراتبی یعنی از بالا به پایین قابل مدیریت میشوند


polymorphism : توانایی ظاهر شدن یک شی در چندین قالب را polymorphism میگویند و قدرت شی گرایی به حداکثر خود میرسد و بر سه نوع میباشد :


1- Ad-Hoc : ما میتوانیم یک درخواست مشترک را برای انواع زیر کلاس ها ارسال کنیم که این زیر کلاس ها واسط مشترکی دارند و این درخواست یکسان ما نسبت به پیاده سازی های مختلف رفتار متفاوتی را دارند همچنین یک متد میتواند چندین Overload داشته باشد و در زمان runtime جاوا تصمیم میگیرد که از کدام یک طبق نیاز باید استفاده شود که به آن  dynamic polymorphism هم میگویند همچنین یک متد میتواند چندین Override داشته باشد که در زمان Compile time نوع متد را مشخص میکند که به آن static polymorphism میگویند

2- Parametric : همان استفاده از Generic ها است Object هایی از جنس نامعلوم که در Runtime نوع آن مشخص میشود 

3- Subtype : ما میتوانیم به ازای یک پدر چندین فرزند داشته باشیم با پیاده سازی های متفاوت ، با قابلیت polymorphism میتوان یک Object Variable از نوع پدر داشته باشیم و هر کدام از پیاده سازی هایش را به آن نسبت دهیم 



فرایند تولید کد OOP : 


OOA : تجزیه و تحلیل از نگاه شی گرایی

OOD : استخراج و طراحی کلاس و سایر اجزای مود نیاز

OOP : مرحله کد زنی و پیاده سازی پلن شی گرایی

OOT : مرحله تست کد که بسته به نوع متدولوژی توسعه گاهی اول تست کد ها را مینویسند گاهی همراه با کد اصلی و گاهی آخر 


در OOA سه خانواده از کلاس ها را شناسایی میکنیم : 


1-Entity

2-Boundray

3-Control


Entity : کلاس هایی هستند که قرار است دیتا های اصلی برنامه را بصورت طولانی مدت نگه دارند و اصلاعات آن در ریسورسی مثل DB , File System و... ذخیره میشوند

Boundray : با دنیای بیرون ارتباط برقرار میکند که ممکن است یک کابر باشد یا یک کامپوننت و یا ماشین دیگر باشد مثل UI

Control : فرایند هایی که در یک سیستم داریم نقش ایم کلاس ها است و کار کنترل روی دیتا را انجام میدهند 

به کلاس های بالا در مرحله OOD میتواند نقش های دیگری را اضافه کرد


OOD : در این مرحله مشخص میکنیم که دیتا چگونه قرار است دریافت و ذخیره شود و بعد مشخص میکنیم که کاربر چگونه میتواند با سیستم تعامل داشته باشد که به آن لایه ارائه یا View میگویند 

در این مرحله به شناسایی کلاس های زیر می پردازیم :

Business Object :  گاهی به آن EntityModel یا DomainModel هم گفته میشود که هم دیتای Business را دارد و هم شامل متد هایی برای عملیات روی دیتا  و هم شامل متد هایی برای save  و load کردن از Data Resource

Trasfer/Value Object : که به آن DTO یا VO یا TO هم گفته میشود این کلاس ها برای نقل و انتقال و نگه داری دیتا مورد استفاده قرار میگیرند


Data Access Object : کلاس هایی هستند که دیتای Entity را به Data Resource ارتباط میدهند و بعضی مواقع Transaction ها را مدیریت میکنند 


OOP : مراحل قبل را بصورت کد در می آوریم و پیاده سازی میکنیم


یک برنامه نویس حرفه ای شی گرا هیچ وقت کارش را از لایه ارائه یا طراحی DB شروع نمیکند گام اول شناسایی و در آوردن کلاس ها از روی usecase ها و مشخص کردن کارهایی که قرار است در سیستم انجام شود و ارتباط آن با قسمت های دیگر است 


همه زبان ها شی گرا نیستند و شبیه به آنچه که در اصول شی گرایی آورده شد را شبیه سازی میکنند تا به شی گرایی برسند ولی در اصل آن زبان برای شی گرایی ساخته نشده است و باید به این نکته دقت کرد


جاوا به طور کامل شی گرا است و قدرت توسعه پذیری در زبان جاوا بر اساس همین شی گرایی می باشد



اصولا در طراحی OOP دسترسی مستقیم field ها به بیرون از کلاس نمیدهیم و از setter و getter متد ها استفاده میکنیم که جز قواعد Java Bean است 

به setter متدها mutetor  و به getter متد ها accessor متد هم گفته میشود

متد getter تنها مقدار را برمی گرداند و نه متغییر را از اینرو نمیتوان مقدار جدیدی به متغییر مربوطه ارسال کرد و با استفاده از getter میتوان اطمینان حاصل کرد که عامل دیگری نمیتواند روی دیتای ما تاثیری نمیگذارد و تنها این عمل توسط setter قابل انجام است


طی پیشرفت OOP به مفاهیم موئلفه گرایی (COP (component oriented programming و (CBD (component base development که در آن مجموعه چندین Object را تبدیل میکنیم به یک Reusable Component که این کامپوننت ها به صورت مجموع در کنار هم قرار میدهند و برنامه ساخته میشود 

(RAD (rapid application developing بر همین اساس موئلفه گرایی ساخته میشود 


(AOP (aspect/agent oriented programming : همان OOP است اما یکسری قطعه کد به کد اصلی برنامه اضافه میکند که مثلا قبل از اجرای متد یک کاری را انجام دهد ، بعد از اتمام کار متد یک کاری دیگری انجام دهد و یا در حین رخ دادن خطا کاری دیگری انجام گیرد اضافه کردن Logger به برنامه یکی از ساده ترین کارهای قابل انجام است

اگر به کامپوننت های AOP یکسری امکانات و ویژگی های رفتار هوشمند اضافه شود یعنی بتوانند محیط خود را sens کنند و قابلیت تطبیق با محیط را داشته باشند ، گاهی بتوانند حرکت کنند و مابقی اعمال هوشمند را انجام دهند به دسته های دیگری تقسیم میشوند :

Mobile Agent : به agent هایی که میتوانند روی net حرکت کنند

Intelligent Agent : به agent هایی که قابلیت تطبیق با محیط را دارند



SOA : از مجموع component ها یک service بوجود می آید که بخشی از business  و مستقل باشند و به بخش های دیگر وابسته نباشند و به تنهایی قابل استفاده باشند service oriented architecture بوجود می آید که از فرمت SOAP برای تبادل داده استفاده میکند که بیشتر به صورت remote استفاده میشود به این سرویس ها web service هم گفته میشود