首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是前端课和后端课?

什么是前端课和后端课?
EN

Stack Overflow用户
提问于 2012-05-15 00:17:30
回答 1查看 2.5K关注 0票数 0

男人们在寻找作文和遗传的区别,然后我在某个地方找到了这篇文章。

在代码重用方面,post组合优于继承。

代码语言:javascript
复制
class Fruit {

    // Return int number of pieces of peel that
    // resulted from the peeling activity.
    public int peel() {

        System.out.println("Peeling is appealing.");
        return 1;
    }
}

class Apple {

    private Fruit fruit = new Fruit();

    public int peel() {
        return fruit.peel();
    }
}

class Example2 {

    public static void main(String[] args) {

        Apple apple = new Apple();
        int pieces = apple.peel();
    }
}

更改后端类

代码语言:javascript
复制
class Peel {

    private int peelCount;

    public Peel(int peelCount) {
        this.peelCount = peelCount;
    }

    public int getPeelCount() {

        return peelCount;
    }
    //...
}

class Fruit {

    // Return int number of pieces of peel that
    // resulted from the peeling activity.
    public Peel peel() {

        System.out.println("Peeling is appealing.");
        return new Peel(1);
    }
}

//苹果必须更改以适应//果品的变化

代码语言:javascript
复制
class Apple {

    private Fruit fruit = new Fruit();

    public int peel() {

        Peel peel = fruit.peel();
        return peel.getPeelCount();
    }
}

// Example2 //的旧实现仍然正常工作。

代码语言:javascript
复制
class Example1 {

    public static void main(String[] args) {

        Apple apple = new Apple();
        int pieces = apple.peel();
    }
}

这就是我根据帖子没有得到的是说的“如果后端类的接口发生变化,前端类的实现也会改变,但它的接口不会改变”

这里的implementation是什么接口

这只是我的假设,告诉我如果IM错了??(也许一切都是错的)。

后端类是否是接口,因为前端类依赖于它?

前端类的implementation是前端类中的实现代码吗?

前端类也是接口,因为示例中的代码依赖于吗?

它们是否是大声耦合的,因为更改到后端接口没有更改为前端接口?因此,依赖于前端接口的代码仍然有效。

如果我使用继承,子类是否紧密耦合在超类中?因为对超类的更改也将更改为子类,因此依赖于子类的代码可能无法工作。

Wny继承是弱封装的。

EN

回答 1

Stack Overflow用户

发布于 2012-05-15 01:18:58

是苹果和水果之间应该发生的直观的继承关系。然而,这不是上面的例子所做的。

上面的例子是使用组合,这意味着FruitApple的一部分(参见uml 这里)。这太违反直觉了!在这种情况下,FruitApple都有单独的peel实现。peel()Apple中的实现使用Fruit.peel()

我认为要点是,如果Apple使用与Fruit的组合关系,那么它的实现可以独立于果树。例如,我可以使用其他一些实现,而不是使用Fruit.peel()来获取Apple.peel()的计数。但是如果Apple继承了Fruit的果皮,那么Fruit的变化也会改变Apple。因此,Apple并不独立于Fruit,所以我们说它是紧密耦合的。

从几个方面来说,这是一个不好的例子: 1)我们都知道苹果是水果,因此继承似乎是最正确的实现。2)继承似乎是实现事物的最枯燥的方式,因为使用组合要求您更正Apple类,以便在对Fruit.peel()进行更改时执行与Fruit.peel()相同的操作。

编辑:阅读了这篇文章后,我觉得主要是概述使用继承的缺陷。适当地使用继承是没有问题的。仅仅为了代码重用而使用它可能会导致问题,如果子类没有真正从超类继承行为。

回答你的问题!

后端类是否是接口,因为前端类依赖于它?

足够近了。所有类都有一个“接口”。这并不意味着它们在类声明中确实有implements IFruit,它只是指对象的形状--对象拥有哪些方法,而不管这些方法是如何工作的。

前端类的实现是前端类中的实现代码吗?

粗略地说是的。构成类中方法主体的代码的实际逻辑是该类的实现。

前端类是否也是一个接口,因为示例中的代码依赖于它?

差不多吧。与任何其他类一样,Apple有一个隐式接口。如果Example使用Apple类,那么它只能使用作为接口一部分的方法。

它们是不是因为后端接口的更改没有改变前端接口而导致耦合呢?

是的,这是用“松耦合”这个词的一种方式。

如果我使用继承,子类是否紧密耦合在超类中?因为对超类的更改也将更改为子类,因此依赖于子类的代码可能无法工作。

是的是的。这两个类是紧密耦合的,因为它们的行为并不完全封装在每个单独的类中。这并不总是错的,这取决于情况。

Wny遗传是弱encapsulation.sic

因为行为是在超类和子类之间共享的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10592683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档