Ethan's Blog


  • Home

  • Archives

  • Tags

  • Search

Simple Strategy for Delivering Better Talks

Posted on 2020-09-12

Giving a talk can open doors to new collaborations, increase your chances of funding success and make it more likely that other people will respond to your ideas. But scientific presentations are too often confusing, boring and overstuffed. Here are some suggestions, based on our experience as speakers, audience members and presentation trainers, that could make your next conference talk or seminar more enjoyable, engaging and effective.

Read the Room

People who turn up to a departmental lecture have different levels of interest and expertise compared with colleagues who attend specialist conferences in your field. If you treat all audiences as if they were the same, many people will leave dissatisfied.

Prepare an ‘advance scouting’ report: before you start work on your talk, make a short appraisal of your audience. What’s the setting of your presentation and how many people are likely to attend? What do they already know about the topic? Do they hold any preconceptions about your research that you’ll need to work against? The more you know about that particular group, the better your chances of crafting a presentation that will stay with them afterwards.

Be Clear about Your Main Message

Getting the subject of your work across is usually easy. Homing in on one central point and making certain the audience will remember it afterwards is vastly harder.

Before working on your slides, write down the main message you want to communicate in one or two sentences. Then, be ruthless: include only slides that support your central thread.

Read more »

多用组合少用继承

Posted on 2020-09-09

为什么不推荐使用继承

继承是面向对象的四大特性之一,用来表示类之间的 is-a 关系,可以解决代码复用的问题。虽然继承有诸多作用,但继承层次过深、过复杂,也会影响到代码的可维护性。

假设我们要设计一个关于鸟的类。我们将“鸟类”这样一个抽象的事物概念,定义为一个抽象类 AbstractBird。所有更细分的鸟,比如麻雀、鸽子、乌鸦等,都继承这个抽象类。

我们知道,大部分鸟都会飞,那我们可不可以在 AbstractBird 抽象类中,定义一个 fly() 方法呢?答案是否定的。尽管大部分鸟都会飞,但也有特例,比如鸵鸟就不会飞。鸵鸟继承具有 fly() 方法的父类,那鸵鸟就具有“飞”这样的行为,这显然不符合我们对现实世界中事物的认识。当然,你可能会说,我在鸵鸟这个子类中重写(override)fly() 方法,让它抛出 UnSupportedMethodException 异常不就可以了吗?具体的代码实现如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class AbstractBird 
{
//...省略其他属性和方法...
public void fly()
{
//...
}
}

public class Ostrich extends AbstractBird
{
// 鸵鸟
//...省略其他属性和方法...
public void fly()
{
throw new UnSupportedMethodException("I can't fly.'");
}
}
Read more »

基于接口而非实现编程

Posted on 2020-09-02

解读接口

“基于接口而非实现编程”这条原则的英文描述是:Program to an interface, not an implementation。我们理解这条原则的时候,千万不要一开始就与具体的编程语言挂钩,局限在编程语言的“接口”语法中(比如 Java 中的 interface 接口语法)。这条原则最早出现于 1994 年 GoF 的《设计模式》这本书,它先于很多编程语言而诞生(比如 Java 语言),是一条比较抽象、泛化的设计思想。

这条原则能非常有效地提高代码质量,之所以这么说,那是因为,应用这条原则,可以将接口和实现相分离,封装不稳定的实现,暴露稳定的接口。上游系统面向接口而非实现编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码基本上不需要做改动,以此来降低耦合性,提高扩展性。

在软件开发中,最大的挑战之一就是需求的不断变化,这也是考验代码设计好坏的一个标准。越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化。好的代码设计,不仅能应对当下的需求,而且在将来需求发生变化的时候,仍然能够在不破坏原有代码设计的情况下灵活应对。而抽象就是提高代码扩展性、灵活性、可维护性最有效的手段之一。

实战应用

假设我们的系统中有很多涉及图片处理和存储的业务逻辑。图片经过处理之后被上传到阿里云上。为了代码复用,我们封装了图片存储相关的代码逻辑,提供了一个统一的 AliyunImageStore 类,供整个系统来使用。具体的代码实现如下所示:

Read more »

抽象类 vs. 接口

Posted on 2020-08-29

在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用抽象类来实现面向对象的继承特性和模版设计模式,使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则。

不过,并不是所有的面向对象编程语言都支持这两个语法概念,比如,C++ 这种编程语言只支持抽象类,不支持接口;而像 Python 这样的动态编程语言,既不支持抽象类,也不支持接口。尽管有些编程语言没有提供现成的语法来支持接口和抽象类,我们仍然可以通过一些手段来模拟实现这两个语法概念。

什么是抽象类和接口

Java 这种编程语言,既支持抽象类,也支持接口,所以,为了让你对这两个语法概念有比较直观的认识,我们拿 Java 这种编程语言来举例讲解。

抽象类

下面这段代码是一个比较典型的抽象类的使用场景(模板设计模式)。Logger 是一个记录日志的抽象类,FileLogger 和 MessageQueueLogger 继承 Logger,分别实现两种不同的日志记录方式:记录日志到文件中和记录日志到消息队列中。FileLogger 和 MessageQueueLogger 两个子类复用了父类 Logger 中的 name、enabled、minPermittedLevel 属性和 log() 方法,但因为这两个子类写日志的方式不同,它们又各自重写了父类中的 doLog() 方法:

Read more »

面向过程风格的代码

Posted on 2020-08-24

下面我就通过三个典型的代码案例,给你展示一下,什么样的代码看似是面向对象风格,实际上是面向过程风格的。

滥用 getter、setter 方法

实际上,这样的做法我是非常不推荐的。它违反了面向对象编程的封装特性,相当于将面向对象编程风格退化成了面向过程编程风格。我通过下面这个例子来给你解释一下这句话:

Read more »
1…404142…55
necusjz

necusjz

274 posts
16 tags
© 2016 - 2025 necusjz
Powered by Hexo
Theme - NexT.Mist