105 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			105 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Classes and Objects | ||
|  | localeTitle: الطبقات والكائنات | ||
|  | --- | ||
|  | ## الطبقات والكائنات
 | ||
|  | 
 | ||
|  | ### أشياء في روبي
 | ||
|  | 
 | ||
|  | دعونا نذهب بسرعة على الأشياء روبي. في العالم الحقيقي ، قد تكون الأشياء أي شيء بما في ذلك سيارة أو كمبيوتر أو حتى إنسان. كل واحد من هذه الكائنات لديه حالة وسلوكيات. | ||
|  | 
 | ||
|  | بالنظر إلى السيارة ، يمكن وصف حالتها بأنها نموذجها ، وصنعها ، ولونها. يمكن لسلوك السيارة أن يتحول أو يفرخ أو يفرمل. | ||
|  | 
 | ||
|  | كائن في روبي لديه خصائص مشابهة جدا. لدى كائنات روبي أيضًا حالة وسلوك. في Ruby Objects ، يتم تخزين الحالة في المتغيرات المثالية ويتم تخزين السلوك في الدالات. | ||
|  | 
 | ||
|  | ### دروس في روبي
 | ||
|  | 
 | ||
|  | الفئة هي في الأساس قالب برنامج. يعرّف هذا القالب `properties` الأولية باستخدام `instance variables` . مرة أخرى ، هناك أيضا `behaviors` أخرى محددة في شكل وظائف. | ||
|  | 
 | ||
|  | يتم إنشاء مثيل جديد للفئة باستخدام طريقة `initialize` للفئة. | ||
|  | 
 | ||
|  | خذ على سبيل المثال نموذج التعليمات البرمجية التالي للفئة: | ||
|  | 
 | ||
|  |  `class Car  | ||
|  |     def initialize(make, model, color)  | ||
|  |         @make = make  | ||
|  |         @model = model  | ||
|  |         @color = color  | ||
|  |     end  | ||
|  |   | ||
|  |     def turn(direction)  | ||
|  |     end  | ||
|  |   | ||
|  |     def honk  | ||
|  |         puts "beep beep"  | ||
|  |     end  | ||
|  |   | ||
|  |     def brake  | ||
|  |     end  | ||
|  |  end  | ||
|  | `  | ||
|  | 
 | ||
|  | كما رأيتم، يتم تعريف الطبقات باستخدام `class` الكلمة وكتلة رمز الفئة ينتهي مع `end` keywork. الدالة. `.initialize` هو المُنشئ. عند إنشاء هذا الكائن ، نحدد السمات `@make` و `@model` و `@color` بالقيم التي `@color` إلى المُنشئ. | ||
|  | 
 | ||
|  | ### خلق مثيل للفئة
 | ||
|  | 
 | ||
|  | الآن ، لإنشاء مثيل لهذا الفصل ، تحتاج فقط إلى استدعاء الدالة `.new` . | ||
|  | 
 | ||
|  |  `mazda3 = Car.new('Mazda', 'Mazda3', 'White')  | ||
|  | `  | ||
|  | 
 | ||
|  | هذا شيء عظيم ، لكن في بعض الأحيان قد تحتاج إلى تغيير بعض هذه السمات! معظم هذه الصفات في هذا المثال ستكون ثابتة. ومع ذلك ، تخيل أنك قررت الحصول على طلاء جديد. كيف ستذهب حول تحديث حالة هذا الشيء من `Car` ؟ | ||
|  | 
 | ||
|  | ### تعديل حالة المثيل
 | ||
|  | 
 | ||
|  | لحسن الحظ ، فإنه من السهل تحديث حالة كائن. أولا، نحن بحاجة إلى `setter` طريقة! تعرف روبي **جالبة** **واضعة** الإعدادات كما في `attr_reader` و `attr_accessor` على التوالي. بالنسبة إلى إعدادات getter و setter على سمة معينة ، يمكنك أيضًا استخدام `attr_accessor` فقط. | ||
|  | 
 | ||
|  | لشرح ذلك ، قمت بتعديل كائن السيارة السابق بهذه الإعدادات المعرفة حديثًا. | ||
|  | 
 | ||
|  |  `class Car  | ||
|  |     attr_accessor :color  | ||
|  |     attr_reader :make, :model  | ||
|  |   | ||
|  |     def initialize(make, model, color)  | ||
|  |         @make = make  | ||
|  |         @model = model  | ||
|  |         @color = color  | ||
|  |     end  | ||
|  |   | ||
|  |     def turn(direction)  | ||
|  |     end  | ||
|  |   | ||
|  |     def honk  | ||
|  |         puts "beep beep"  | ||
|  |     end  | ||
|  |   | ||
|  |     def brake  | ||
|  |     end  | ||
|  |  end  | ||
|  | `  | ||
|  | 
 | ||
|  | حتى الآن يمكننا تغيير الحالة وقراءة حالة الكائن. | ||
|  | 
 | ||
|  |  ``irb(main):023:0> c = Car.new('Mazda', 'Mazda3', 'White')  | ||
|  |  => #<Car:0x00007fd3ca13fdd0 @make="Mazda", @model="Mazda3", @color="White", @speed=nil>  | ||
|  |  irb(main):024:0> c.color  | ||
|  |  => "White"  | ||
|  |  irb(main):025:0> c.make  | ||
|  |  => "Mazda"  | ||
|  |  irb(main):026:0> c.model  | ||
|  |  => "Mazda3"  | ||
|  |  irb(main):027:0> c.color = 'Brutal Blue'  | ||
|  |  => "Brutal Blue"  | ||
|  |  irb(main):028:0> c.make = 'Prius'  | ||
|  |  Traceback (most recent call last):  | ||
|  |         2: from /usr/local/bin/irb:11:in `<main>'  | ||
|  |         1: from (irb):28  | ||
|  |  NoMethodError (undefined method `make=' for #<Car:0x00007fd3ca13fdd0>)  | ||
|  |  Did you mean?  make  | ||
|  | ``  | ||
|  | 
 | ||
|  | عرض الإخراج السابق من `irb` ، يمكنك أن ترى أن كل واحد من متغيرات الحالة للقراءة. يمكننا أن نكتب إلى `@color` ، لكننا في نهاية المطاف يسبب استثناء `NoMethodError` عندما نحاول الكتابة إلى `@make` . هذا لأن `@make` تم تعريفه فقط باستخدام `attr_reader` ، لذلك `make=` غير معرف. | ||
|  | 
 | ||
|  | ### مصادر
 | ||
|  | 
 | ||
|  | *   [روبي البرمجة / بناء الجملة / الطبقات](https://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Classes) |