代码之家  ›  专栏  ›  技术社区  ›  Asmor

实践中的私有成员与公共成员(封装有多重要?)[关闭]

  •  22
  • Asmor  · 技术社区  · 17 年前

    面向对象编程的最大优势之一是封装,我们(或者至少我)学到的一个“真理”是成员应该始终是私有的,并且通过访问器和赋值器方法使其可用,从而确保验证和验证更改的能力。

    不过,我很好奇,这在实践中到底有多重要。特别是,如果您有一个更复杂的成员(如集合),那么只公开它就非常有诱惑力,而不是使用一系列方法来获取集合的键、从集合中添加/删除项等。

    你一般遵守规则吗?你的答案是否会根据你自己写的代码和别人使用的代码而改变?有没有更微妙的原因让我对这件事感到困惑?

    22 回复  |  直到 17 年前
        1
  •  16
  •   Kyle Cronin    17 年前

        2
  •  16
  •   Smashery    17 年前

        3
  •  8
  •   Derek Park    17 年前

        4
  •  3
  •   Oliver Drotbohm    16 年前

        5
  •  2
  •   Joel    17 年前

        6
  •  2
  •   community wiki 2 revs, 2 users 97% deworde    9 年前

        7
  •  1
  •   Richard Walton    17 年前

        8
  •  1
  •   Noel Walters    16 年前


        9
  •  0
  •   SCdF    17 年前

    private Foo foo;
    public Foo getFoo() {}
    public void setFoo(Foo foo) {}
    

        10
  •  0
  •   Thomas    17 年前

        11
  •  0
  •   Jonathan Adelson    17 年前

        12
  •  0
  •   Mike Stone    17 年前

    private static class SomeSmallDataStructure {
        public int someField;
        public String someOtherField;
    }
    

    public fields

        13
  •  0
  •   Al.    17 年前

        14
  •  0
  •   VonC    17 年前





        16
  •  0
  •   Esko Luontola    16 年前

    code smell

    x setX(String)

    public boolean isEmployeeStatusEnabled() {
        return pinCodeValidation.equals(PinCodeValidation.VALID);
    }
    
    public EmployeeStatus getEmployeeStatus() {
        Employee employee;
        if (isEmployeeStatusEnabled()
                && (employee = getSelectedEmployee()) != null) {
            return employee.getStatus();
        }
        return null;
    }
    
    public void setEmployeeStatus(EmployeeStatus status) {
        getSelectedEmployee().changeStatusTo(status, getPinCode());
        fireComponentStateChanged();
    }
    
        17
  •  -1
  •   RomanM    17 年前

        18
  •  -1
  •   Robert Gould    17 年前

        19
  •  -1
  •   Salman A    17 年前

        20
  •  -1
  •   John Mulder    17 年前

        21
  •  -1
  •   agartzke    17 年前

        22
  •  -1
  •   community wiki Matt J    17 年前

    推荐文章