شی گرایی در زبان جاوا اسکریپت
صفحه اصلی / دوره‌های آموزشی / آموزش جاوا اسکریپت، شروعی ساده، پایانی قدرتمند / آموزش شی گرایی در جاوا اسکریپت به همراه معرفی کلاس ها

آموزش شی گرایی در جاوا اسکریپت به همراه معرفی کلاس ها

شی گرایی در زبان جاوا اسکریپت
35,000 تومان
براي خريد اين درس نياز است وارد سايت شويد. در صورت نداشتن حساب کاربري عضو شويد.

شی‌‍ گرایی در زبان برنامه نویسی جاوا اسکریپت

در این درس با مفاهیم شی گرایی در زبان جاوا اسکریپت آشنا می شویم:

  • مبانی برنامه نویسی شی‌گرا (OOP)
  • تعریف کلاس و اعضای آن در جاوا اسکریپت
  • کپسوله سازی Encapsulation
  • تجمع Aggregation
  • ارث بری Inheritance
هدف ما از ایجاد یک برنامه این خواهد بود که تمام داده یا اطلاعات یک سیستم از بیرون وارد یک برنامه شود.
در برنامه نویسی به هر موجودیتی که دارای یک سری از ویژگی‌ها باشد(اشیاء، شی ) میگوییم که در یک برنامه ما نیاز داریم که اطلاعات اشیاء خارج از سیستم را وارد سیستم کنیم.
برای مثال در سیستم دانشگاهی نیاز داریم که اطلاعات دانشجو، مدرس، کارمندان، درس و.... را در سیستم ذخیره کنیم.
به همین منظور در زبان‌های برنامه نویسی مفهومی به نام شی‌گرایی ایجاد شد که باعث میشود با دید بهتری به اشیاء بیرون نگاه کنیم.
در واقع هر شی دارای یک‌سری از صفت‌ها، ویژگی ها است، برای مثال کتاب دارای صفت‌های نام کتاب، نام نویسنده، قیمت کتاب، دسته بندی کتاب، و ... دارد.
از دید دیگر هر شی میتواند یک‌سری از رفتار ها را انجام دهد که ما علاوه بر صفت‌ها باید بتوانیم رفتارهایشان در نظر بگیریم.
در واقع برای درج اطلاعات یک شی در سیستم، باید دو عملیات، تشخیص صفت‌ها و تشخیص رفتارهای یک شی را به درستی انجام دهیم، که در آخر هر دو را در قالب کلاس(class) به برنامه معرفی میشود.
 

تعریف کلاس و اعضای آن در جاوا اسکریپت

class چیست؟
Class در واقع یک قالب کلی است که نمونه‌ها واشیاء آن class از نوع آن تعریف میشوند.
در واقع اگر خواستیم یک شی را وارد سیستم کنیم باید یک نمونه class را برای آن شی طراحی کنیم.
برای بهتر فهمیدن این موضوع لازم است که با مثال برای شما توضیح دهیم،
برنامه را باز میکنیم، درون یک پوشه یک پیچ از نوع html ایجاد کرده و ساختار کلی پروژه را ایجاد میکنیم، داخل تگ script برای ساخت کلاس از کلمه کلیدی class استفاده کرده و با یک فاصله نام کلاس را نوشته و با یک علامت براکت({})  ابتدا و اتنهای کلاس را مشخص میکنیم.
        class نام کلاس{
           
        }
در کلاس‌ها هر چیزی که به عنوان متغییر تعریف کنیم به عنوان صفت میشناسیم و هر چیزی که به عنوان تابع تعریف کنیم به عنوان متد میشناسیم.
برای تعریف اعضای کلاس از یک متد آماده با نام constructor استفاده میکنیم، این متد آماده اولین تابع هایی هستد که داخل کلاس اجرا میشوند. در واقع در کلاس ها برای تعریف متد(تابع) نیازی به function نداریم.
            constructor(){
               
            }
تابع constructor اینگونه عمل میکند، که وقتی فراخوانی شود برای ما صفت‌های آن کلاس را تعریف کند.

برای مثال ما یک کلاس با نام person برای توضیحات بیشتر برای شما ایجاد میکنیم.

         class Person{
                    constructor(){
                    }
        }

 

حال کلاس person دارای  صفت‌های name، family، age است.
با استفاده از کلمه کلیدی This، صفت‌ها را به تعریف کرده که دارای مقدار ثابت هستند.
        class Person{
            constructor(){
                this.name="darsman"
                this.family=".com"
                this.age=5
            }
            fun1()
            {
                alert("Hello")
            }

           
        }


در گام بعدی ما میتوانیم در کلاس از تابع ها استفاده کنیم، به این صورت که نیازی به کلمه کلیدی function نیست.

            نام تابع(){
               
            }

 

در برنامه تابعی درست کردیم که برای ما کلمه Hello به صورت پیغام نمایش داده شود.
            fun1 () {
                alert ("Hello");
            }


حال در خارج از محدوده کلاس یک شی با هر نامی از کلاس person ایجاد میکنیم.

var نام متغییر=new نام کلاس();
مثال:
ver p1=new Person();

 

 
در واقع فقط به یک صورت میتوان به تمام اطلاعات یک کلاس دسترسی پیدا کرد که از آن کلاس یک شی ایجاد کنیم.
و میتوان به روش زیر به تمام اعضای کلاس دسترسی پیدا کرد.
console.log ( نام شی ساخته شده.نام اعضای کلاس );

 

مثال:
console.log (p1.name);

 

میتوان از کلاس چند شی با نام های متفاوت ایجاد کرد، ولی در این person که ما ایجاد کردیم صفت‌ها دارای مقدار ثابت هستند که شی p1  فقط مقدارهای ثابت کلاس را چاپ میکند.
در کلاس مدنظر، اگر که ما  constructor را  این گونه تعریف کنیم که در زمان ساخت شی مقدارهایی را دریافت کند، میتوان آن مقادیر را جایگزین مقدارهای ثابت صفت‌ها کرد.برای اینکه مقدارهای person ثابت نباشند میتوانیم در لحظه ساخت شی برای constructor ورودی دریافت کنیم و آنها را جایگزین name،family،age کنیم  که مقدار ثابت نداشته باشند.
        class Person {
            constructor (نام متغییر,f , a){
                this.name=n
                this.family=f
                this.age=a
            }
            fun1()
            {
                alert("Hello")
            }
        }


در زمان ایجاد شی از این کلاس ، متغییرهای n,f,a را دریافت میکند. و بجای اعضای این کلاس قرار میدهد.

         var p1=new Person("darsman",".com",10);
         console.log(p1.name);

 

نکته‌ای به وجود آمده این است که هر شی به اعضای خودش دسترسی دارد.
        class Person{
            fun1()
            {
                alert("Hello"+ this.name)
            }
        }
         var p1=new Person("darsman",".com",10);
         p1.fun1();

         var p2=new Person("ali","mohammadi",12)
         p2.fun1();
در واقع در بالا اول برای ما Hellodarsman نمایش داده میشود و دوم Helloali نمایش داده میشود و به این صورت که هر شی به نامی که برای او در ورودی ارسال میشود دسترسی دارد.
 

ارث بری Inheritance:

یک از موضوعاتی که در کلاس‌‌ها برای ما مهم است بحث Encapsulation یا کپسوله سازی است یا مخفی سازی اطلاعات یک کلاس از کلاس دیگراست.
اگر ما یک موجودیت مثل انسانها  را در سیستم دانشگاهی درنظر بگیریم، یک کلاس برای اساتید، یک کلاس برای کارمندان و یک کلاس برای دانشجویان خواهیم داشت که در هر کدام از کلاسها صفت‌های کامل آنها نوشته شده.
به این روش کار کردن قطعا افزونه کاری است.
این سه دسته از انسان ها در سیستم دانشگاهی دارای یک سری از صفت‌ها هستند برای مثال اگر دقت کرده باشیم هر کدام صفت‌های آدرس، شماره تلفن و... بین آنها مشترک است.
بهترین کار این است که یک کلاس جداگانه برای صفت‌های مشترک مانند شماره تلفن، آدرس، و... ایجاد کنیم و برای اساتید، کارمندها و دانشجو  کلاسهای خاص خوشان با صفت‌های خاص خودشان را جداگانه ایجاد میکنیم.
ولی در این بین خطایی وجود دارد که در سیستم دانشگاهی به همه اطلاعات دانشجو، اساتید، و... نیاز داریم ولی ما اطلاعات مشترک را در یک کلاس جداگانه قرار داده‌ایم.
تنها راهی که وجود دارد این خواهد بود که کلاس ها را با هم ارتباط دهیم که در این بین بحث ارث‌بری به وجود می‌آید.
منظور از ارث‌بری یعنی اینکه در سیستم یک کلاس به عنوان فرزند و کلاس دیگر به عنوان والد شناخته میشود، که کلاس فرزند میتواند به اطلاعات کلاس والد دسترسی پیدا کند.
حال برای اینکه یک کلاس‌ بتواند به اطلاعات کلاس دیگر دسترسی پیدا کند با استفاد از کلمه کلیدی extends این عملیات را اجرایی میکنیم به این صورت که بعد از این کلمه نام کلاسی که میخواهید به آن دسترسی داشته باشد را مینویسیم.
class نام کلاس extends نام کلاس‌والد{
            constructor(){
           
            }
        }

 

برای مثال دو کلاس دیگر با نام student و teacher ایجاد میکنیم. و آنها را با کلاس person که در بالا ایجاد کردیم ارتباط میدهیم که به اطلاعات کلاس person دسترسی پیدا کند.

        class student extends person{
            constructor(){
                this.studentid=120
            }
        }

        class teacher extends person{
            constructor(){
                this.teachercode=150
            }
        }

 

در این میان تنها مشکلی که وجود دارد این است که خود کلاس والد person دارای یک سری ورودی name,family,age است که باید تامین شوند، به همین منظور در کلاس فرزند یا در کلاسهایی میخواهید از کلاس person ارث ببرند با استفاده از کلمه کلیدی super ورودی‌های کلاس والد را تامین میکنیم.
        class student extends person{
            constructor(){
               super(“darsman”,”.com”,12)
                this.studentid=120
            }
        }

        class teacher extends person{
            constructor(){
                super(“java”,”script”,10)
                this.teachercode=150
            }
        }

جلسات دوره


                                  
مهدی عباسی
مدرس :

مهدی عباسی

مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و .... مطالعه بیشتر رزومه

نظر شما در تصمیم دیگران اثرگذار است.

لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.

برای ارسال نظر نیاز است وارد سایت شوید. در صورت نداشتن حساب کاربری عضو شوید.

نظرات دانشجویان

آموزش جاوا اسکریپت، مقدماتی تا متوسط

757