2015-03-15 3 views
0

Я новичок в инкапсуляции.Можно ли это назвать инкапсуляцией?

Я закодировал простую java-программу, которая может идентифицировать, если ей задано нечетное или четное число, и я попытался использовать инкапсуляцию с ней. Я знаю, что инкапсуляция использует метод get и set, но я сделал это таким образом.

По-прежнему считается инкапсуляцией?

Главная

import java.util.Scanner; 

public class Implement 
{ 
    public static void main(String[]args) 
    { 
     Scanner inp = new Scanner(System.in); 
     System.out.println("Please enter number: "); 
     int ent = inp.nextInt(); 
     Practice pract = new Practice(); 
     pract.oddeven(ent); 
    } 
} 

Практика класс

public class Practice 
{ 
    public void oddeven(int a) 
    { 
     do 
     { 
      if(a>=2) 
      { 
       a-=2;  
      } 
     } 
     while(a>1); 

     if(a==1) 
     { 
      System.out.println("This number is Odd."); 
     } 
     else if(a==0) 
     { 
      System.out.println("This number is Even."); 
     } 
    } 
} 
+0

Работа над кодом форматирования (большинство редакторов поддерживают различное «автоматическое форматирование») как плохое отступов делает код трудно читать. – user2864740

+0

Отформатирован код. Исправлена ​​формулировка названия. –

+0

Число нечетное, если оно не делится на два. Вы можете проверить это с помощью оператора modulo: 'a% 2 == 1' означает, что он нечетный. Или вы можете использовать деление '(a/2) * 2! = A' означает, что это нечетно. Вы можете использовать двоичное представление числа с помощью побитового и оператора: 'a & 1 == 1' означает, что это странно. –

ответ

0

инкапсуляция применяется на уровне объекта и специфичен для метода и полей. У вас есть метод, который действует на входной параметр и не имеет ничего общего с инкапсуляцией.

Определение Oracle для данных encapsulation: «Скрытие внутреннего состояния и требующее взаимодействия, которое должно выполняться посредством методов объекта, известно как инкапсуляция данных - фундаментальный принцип объектно-ориентированного программирования».

2

По-прежнему считается инкапсуляцией?

Ваш класс не имеет внутреннего состояния, поэтому внутреннего состояния не существует. Это означает, что «инкапсуляция» (которая касается скрытия внутреннего состояния) полностью спорна.


Я хотел бы также отметить, что:

  • Ваш метод oddeven глючит. Он не будет печатать ничего для чисел меньше нуля.

  • Это ужасно неэффективный подход к тестированию для нечетного или четного.

  • Метод, который выполняет вычисление и выводит результат на стандартный вывод, является менее полезным, гибким и многоразовым, чем метод, который выполняет тот же расчет и возвращает его.

  • Есть целый ряд нарушений в стиле Java в вашем коде:

    • Вы нарушаете правила для идентификаторов Java. Имя метода oddeven должно быть oddEven, потому что «oddeven» не является английским словом.
    • Ваш углубление все испорчено.
    • Неправильное использование пробелов между токенами.
0

Для того, чтобы быть воплощен в методе вы должны скрывать Что происходит. Это истинная суть концепции Encapsulation.Это делается с помощью двух методов:

Getter: получает значение для основного класса

сеттера: установите значение внутри класса Encapsulation (используется здесь частные переменные). Следующий код покажет модификацию ваших используется инкапсуляция:

public class implement 
{ 
    public static void main(String[]args) 
    { 
     Practice pract = new Practice(); 
     Scanner inp = new Scanner(System.in); 
     System.out.println("Please enter number: "); 
     int ent = inp.nextInt(); 
     pract.setNum(ent); 
     if(pract.getNum() == 1){ 
      System.out.println("This number is Odd"); 
     }else if (pract.getNum() == 0){ 
      System.out.println("This is Even"); 
     } 
    } 
} 

практики Класс:

public class Practice 
    { 
     private int x;  

     public int getNum(){ 
      return x; 
     } 
     public void setNum(int a){ 
      x = a; 
      do{if(x >= 2) 
       x -=2; 
      }while(x>1); 

     } 
    } 
Смежные вопросы