ABA


"שאלה לגבי גאווה והגדרה של סוגי מתודות"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15608 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15608
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   23:10   11.12.09   
אל הפורום  
  שאלה לגבי גאווה והגדרה של סוגי מתודות  
 
   אז ככה יש לי קלאס מסויים נגיד קלאס2 שהגדרתי בו משתנה מסוג PRIVATE
עשיתי לו GETTER ו SETTER המשתנה עצמו הוא מסוג מערך דו מימדי

עכשיו בקלאס אחר אני רוצה לבדוק במערכת שהוגדר בקלאס 1 האם תא מסויים הוא ריק או מלא.
אני חייב שהפונקציית GETTER והמשתנה עצמו ב קלאס 2 יהיה מוגדר כ STATIC ולא כPRIVATE ?

זאת הדרך היחידה?


ניסיתי להיות כמה שיותר מובן.. תודה לעוזרים..



                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  זה משתנה משותף לכל האינסטנסים (לקלאס) או לכל ldan192  12.12.09 00:37 1
     מכתב Yariv-H 12.12.09 10:30 2
         לא, זה לא נכון מה שאתה עושה. ldan192  12.12.09 11:13 3
             מכתב Yariv-H 12.12.09 11:31 4
                 תשמע, לא התעמקתי בקוד, אבל אני בטוח ldan192  12.12.09 13:09 5
                     אוקיי... Yariv-H 12.12.09 15:28 6
                         הגיוני שאמרו שלא, כי זה תיכנות לרוב לא נכון. בכיף :) ldan192  12.12.09 15:29 7

       
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   00:37   12.12.09   
אל הפורום  
  1. זה משתנה משותף לכל האינסטנסים (לקלאס) או לכל  
בתגובה להודעה מספר 0
 
אובייקט יהיה משתנה בפני עצמו?
בגדול אתה קורא לאובייקט שיצרת (נניח בשם obj) למתודה obj.isEmpty(3 /*the cell you ask for */);

תגגל מה ההבדלים בין שדה סטטי ללא סטטי ב-Java.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   10:30   12.12.09   
אל הפורום  
  2. מכתב  
בתגובה להודעה מספר 1
 
  

זה הקלאס הראשון
public class Start {

private CheckTool m_ChessBord = new CheckTool;
public Start ()
{
start();
}
public boolean getm_ChessBord(int x ,int y)
{
boolean empty = false;
if (m_ChessBord==null)
{
empty = true;
}
return empty;
}

}

הקלאס השני..
public class pawn extends CheckTool{
.
.
.
.
if (Start.this.getm_ChessBord(x, y)==null)

השורה האחרונה פה לא עוברת קומפילציה..
רק כאשר אני משנה את סוג המשתנה בקלאס הראשון ל
Public static CheckTool m_ChessBord = new CheckTool;
public static boolean getm_ChessBord(int x ,int y)

אז אני יכול להגיע לערך אבל הצורה טיפה שונה..
Start.getm_ChessBord(XX,YY);


איך אפשר לסדר את זה ללא ה static?



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   11:13   12.12.09   
אל הפורום  
  3. לא, זה לא נכון מה שאתה עושה.  
בתגובה להודעה מספר 2
 
1. למה הקונסטרקטור שלך קורא לעצמו רקרוסיבית? (כמובן שזה לא עושה כלום, אבל זה לא נכון).

2. לא ענית. האם m_ChessBord משותף לכל new שתיצור או אינדוידואלי לכל אחד?
מהמימוש שאני רואה פה ומנכונות התיכנות - הוא לא משותף לקלאסים, כלומר לא סטטי.

3. שמות קלאסים צריכים להתחיל באות גדולה, בשונה ממתודות ושדות (גם אם לא מבחינת נכונות - מבחינת קריאות).

4 .אתה פשוט צריך ליצור ב-main דבר כזה:


Start st = new Start();
pawn pn = new pawn();

if(st.getm_ChessBord(x, y)==null) {...}


דרך האיסטנס עצמו אתה קורא למתודה getm...
ככה לכל אינסטנס (st הוא אחד מהם) שאתה יוצר, יש m_ChessBord משל עצמו.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   11:31   12.12.09   
אל הפורום  
  4. מכתב  
בתגובה להודעה מספר 3
 
   הקלאס של Start לא קורה לעצמו רקורסיבית ב קונסטראקטור.. הוא קורה למתודה בשם start עם s קטנה שמפעילה את כול התוכנית.
הסיבה שאני עושה את זה, כי אמרו לנו שב main אסור שיהיה יותר מ 10 שורות.

בתוך main עצמו אני עושה


Start a = new Start;

בשביל שיתחיל להריץ את את המתודה של Start בשם start שנמצאת בקונסטראקטור שלו

אני טיפה חלש בהגדרות.. אבל אני ינסה לפשט את מה שאני מנסה לעשות..

m_ChessBord זה המערך של לוח השח מט שלי.
לכול סוג של חייל אני פותח קלאס , בפנים אני יוצר מתודה שבה אני לוקח את הקורדינטה שהוא נמצא בא , ובדוק האם הקורדינטה שהוא רוצה להגיע אליה על הלוח היא ריקה או תפוסה.

מה שרשמתי בהודעה הראשונה .getm_ChessBord(x, y)==null מתבצע מתוך הקלאס של החייל , אני צריך מישם גישה למשתנה m_ChessBord לבצע בדיקות בתאים שלו.

m_ChessBord יכיל בתוך כול תא (לא בכולם ) חיילים שהם מוגדרים מסוג CheckTool



/**
* This Class is the main class of all the check tools that will extend this class
* will have a general stuff.
* Color , name , position (source).
*/
public class CheckTool {

private String m_Name; // contain the color of the Soldier
private String m_Color; // contain the color of the Soldier
private int m_Xsource; // Contain the X coordination of the source position
private int m_Ysource; // Contain the Y coordination of the source position

/**
* The Contractor that set for the default value
*/
public CheckTool (String a_Name , String a_Color , int a_Xsource ,int a_Ysource)
{
m_Name = a_Name; // getting the Soldier name
m_Color = a_Color; // setting the default
m_Xsource = a_Xsource; // setting the default
m_Ysource = a_Ysource; // setting the default
}

/**
* This method set the color of the Soldier
* @param a_Color - hold a string with the color of the soldier
*/
public void setm_Color(String a_Color)
{
this.m_Color = a_Color;
}

/**
* This method getting the color of the Soldier
* @return the m_Color
*/
public String getm_Color()
{
return m_Color;
}

/**
* This method setting the X coordination of the soldier
* @param m_Xsource - hold the int of the X coordination of the soldier
*/
public void setm_Xsource(int a_Xsource)
{
this.m_Xsource = a_Xsource;
}

/**
* This method getting the X coordination of the soldier
* @return the m_Xsource
*/
public int getm_Xsource()
{
return m_Xsource;
}

/**
* This method setting the Y coordination of the soldier
* @param m_Ysource - hold the int of the Y coordination of the soldier
*/
public void setm_Ysource(int a_Ysource)
{
this.m_Ysource = a_Ysource;
}

/**
* This method getting the Y coordination of the soldier
* @return the m_Ysource
*/
public int getm_Ysource()
{
return m_Ysource;
}

/**
* This method setting the Soldier name
* @param m_Name the m_Name to set
*/
public void setm_Name(String a_Name)
{
this.m_Name = a_Name;
}

/**
* This method getting the Soldier name
* @return the m_Name
*/
public String getm_Name()
{
return m_Name;
}
}


**
*
* This Class will contain all the Program method's and process
*
*/
public class Start {

public static CheckTool m_ChessBord = new CheckTool 8X8;
מישום מה הוא מוחק לי את זה.. אבל זה רשום נכון כסינטקס
public Start ()
{
start();
}

public void start ()
{
סתם בדיקות
pawn b ;
b = new pawn();
boolean c = false;
c= b.ValidMove(0, 0, 5, 5);
System.out.println ("");
}

/**
* This method setting in the board a soldier in a certain coordination
* @param a_ChessBord - hold the soldier details
*/
public void setm_ChessBordEnemy(CheckTool a_ChessBord)
{
this.m_ChessBord = a_ChessBord;
}
/**
* This method getting if there any soldier in a certain coordination on the board
* @param x - holding the x coordination for checking
* @param y - holding the y coordination for checking
* @return the m_ChessBord
*/
public static boolean getm_ChessBordEnemy(int x ,int y)
{
boolean empty = false;
if (m_ChessBord==null)
{
empty = true;

}
return empty;
}



public class pawn extends CheckTool{

private boolean m_AsStart; // indicator if the Soldier moved from the game start or not
/**
* This is the contractor that will set the Soldier name
*/
public pawn (String a_Color,int a_Xsource , int a_Ysource)
{
super ("Pawn" ,a_Color,a_Xsource,a_Ysource); // starting the CheckTool contractor
m_AsStart = true; // setting the As Start to true (didn't moved from the start)

}
public boolean ValidMove (int X , int Y ,int XX ,int YY)
{
if (X==XX&&YY==Y+1&&כאן אני צריך את הפקודה שרשמתי בהודעה הראשונה)

כמו שאמרתי לך פה הוא לא נותן לי להכניס אותה .
רק אם אני מגדיר אותה כ static זה נותן לי
בצורה שרשמתי מעל.


אשמח להכוונות במידה ואני לא עובד נכון.
תודה רבה!



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   13:09   12.12.09   
אל הפורום  
  5. תשמע, לא התעמקתי בקוד, אבל אני בטוח  
בתגובה להודעה מספר 4
 
שכשאמרו לך שלא לכתוב ב-main מעל ל-10 שורות הכוונה הייתה שפשוט משתמשים באיטרטור שכל פעם ידמה שחקן אחר בלוח עם אוסף פעולות כאלה ואחרות.


בכל מקרה, התשובה שלי עדיין רלוונטית.
ב-main עצמו אתה יוצר שחקן/לוח.
כל שחקן יודע לקרוא למתודות שלו עם הפרמטרים האישיים שלו.
עכשיו, אם יש למתודה שלך שימוש במתודות של קלאסים אחרים (למשל לכל לוח יש 2 אובייקטים של שחקנים),
אז תדאג בזמן האתחול לאתחל לקלאס של הלוח 2 את האובייקטים של השחקנים, תשמור אותו כשדות בהצהרת בקלאס עצמו (נניח Player pl1 = new Player() וכנ"ל לגבי pl2),
ואז כל פעם כשאתה רוצה לבצע פעולה מהלוח, מכיוון שעכשיו יש לו איסטנס אישי של pl1 הוא ידע לפנות אליו כמו שרשמתי לך בתגובה 1.

תבין, ברגע שהמשתנה, שהמצאתי עכשיו - score, הוא סטטי, למשל עבור Player,
אז למרות שאתה יוצר 2 איסטנסים שונים pl1 ו-pl2, עדיין הציון שלהם יהיה משותף - ואני בטוח שלא לזה התכוונת.


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Yariv-H לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 24.3.02
5856 הודעות, 1 פידבק
   15:28   12.12.09   
אל הפורום  
  6. אוקיי...  
בתגובה להודעה מספר 5
 
   ניראה לי שהבנצתי אותך... אם אני יצור את המשתנה של הלוח ב MAIN זה באמת פותר לי את הבעייה...

צריך לקרוא יותר על הסטטי הזה =] אמרו לנו שלא להשתמש בזה...
תודה!



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ldan192 
חבר מתאריך 14.9.08
95119 הודעות
   15:29   12.12.09   
אל הפורום  
  7. הגיוני שאמרו שלא, כי זה תיכנות לרוב לא נכון. בכיף :)  
בתגובה להודעה מספר 6
 


בברכה,
עידן


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net