الكائنات قابلة للتغيير

يمكنك تغيير محتويات كائن بعمل إسناد لأحد متغيرات الحالة الخاصة به. مثلاً، "لتحريك" مستطيل بدون تغيير حجمه، يمكنك تغيير قيم x وy:
كود:
box.x = box.x + 50;
box.y = box.y + 100;
تظهر النتيجة في الشكل:

http://file.topmaxtech.net/images/ph...3961812731.jpg

يمكننا أخذ هذه الشفرة وتغليفها في عملية، وتعميمها لتحريك المستطيل بأية قيمة:
كود:
public static void moveRect (Rectangle box, int dx, int dy) {
  box.x = box.x + dx;
  box.y = box.y + dy;
}
يشير المتغيران dx وdy إلى المسافة المطلوب تحريك المستطيل إليها في كل اتجاه. إن استدعاء هذه العملية يغير المستطيل المرر إليها كمتحول.
كود:
Rectangle box = new Rectangle (0, 0, 100, 200);
moveRect (box, 50, 100);
System.out.println (box);
تطبع java.awt.Rectangle[x=50,y=100,width=100,height=200].
يمكن أن يكون تعديل الكائنات بتمريرها إلى عملية مفيداً، لكنه يجعل من تنقيح البرنامج عملية صعبة لأنه ليس من الواضح دائماً متى تعدل استدعاءات للعمليات على متحولاتها أو لا تعدل. فيما بعد، سأناقش بعض مزايا ومساوئ أسلوب البرمجة هذا.
توفر Java عمليات تشتغل على النقاط (كائنات Points) والمستطيلات (كائنات Rectangle). يمكنك قراءة الوثائق على http://download.oracle.com/javase/6/...Rectangle.html
مثلاً، translate، التي تنفذ نفس وظيفة moveRect تماماً، لكن بدلاً من تمرير المستطيل كمتحول، نستخدم النقطة:
كود:
box.translate (50, 100);
النتيجة هي نفسها تماماً.