软件系统架构设计思维

1.在程序设计中,我们往往要设计对象,那么该怎么设计呢,最重要的是如何判断2个现实中的物体对象在程序中是相同的?

答案:主要是判断2个对象的成员属性是否相同,例如音乐和视频在现实生活中是不同的对象,但是就我们写程序而言,我们只需要得到它们的路径属性、大小属性、修改日期属性就够了,所以从那这个角度来说,它们是同一个类,同一种对象。因而java中将所有文件都用File表示

 1.2:什么是对象?什么是类,什么情况下才应该设计一个类?

面向对象我又称为面向变量集的编程思想,其实对象就是一组变量集。

什么情况下才应该设计一个类?

首先,类就是对变量集的封装,类是由变量集构成的,所以我们的思路应该是从变量开始,如果用变量就可以清楚的表示出一个事物,那么用一个变量就够了。如果需要用2个或2个以上变量才能表示出一个事物,那么这便上升到了类的高度。我们以银行业务调度系统为例,我们进入银行办理业务,都要取号码,而这号码分为普通号码,快速号码,VIP号码。普通号码以N开头,快速号码以H开头,VIP号码以V开头。刚开始我立马就想到为号码设计一个类,但是成员变量是什么呢,难道就一个String类型的number变量?所以我又认为这里没有必要设计一个类,因为使用一个String变量完全可以描述出号码。但是后来银行又增为每个号码增加了一项号码生成的时间,这样,便导致无法使用一个String变量来描述出号码了,还需要一个Stirng类型的时间变量。所以这里便上升到了要设计一个Number类的高度。

public class Number{

         String number;

         String time;

 

}

 

1.3 :其实现实生活中,任何不同的自然对象,从编程的角度说,我们都可以认为是同一个对象。

例如 面包的属性 :颜色,大小,味道

         电风扇的属性:颜色,大小,有电

但是在编写程序时,往往为了多态的方便,可以归纳到一个对象中。

{       颜色,大小,味道,有电},

2.使用多态的目的是什么?

答案:主要是为了减少重复的冗余代码,能够让我们的一段代码模具化,即可以接收不同的子类对象,自己就像一个模具。所以我们在设计实体类时,如果有多个类有相同的属性,那么应该尽量设计一些父类或者接口。

经验:我在编写显示本地音乐和视频时,都放到了一个Actvitiy,而原来我设计了2个Adapter, LocalVideoAdapter,LocalAudioAdapter,而这里面只能有一个对象名是myAdapter的变量,所以此时必须只能有一个adapter类,因而我又设计了一父抽象类,MyBaseAdapter,让LocalVideoAdapter,LocalAudioAdapter都继承它。

 

3.什么情况下使用构造方法重载,为什么要重载?

答案:如下所示。有2个是重载的

SecondAsyncTask(Activity activity, FileEntity fe){

 

}

SecondAsyncTask(Activity activity, File fe){

 

}

当我们需要添加成员数据的时候,而又不想修改原来的构造方法,我们就需要重载,目的是为了减少修改,减少工作量

4.编程时,什么时机下往上抛出异常,什么时机下处理异常?

答案:要想知道这个问题,就必须弄清楚往上抛异常和直接处理异常的重大区别:

假设有2个类,A,B,。

class A {

public readFile(){

 try {

        B bb= new Class B();

       File file =  bb.getFile();

        System.out.println(file.getName()); 

      }catch(FileNotFoundException e){

                  e.printStackTrace();

       }

}

 

}

class B throws FileNotFoundException {

public File getFile(){

    return new File("D:/aa.txt");

    }

}

其中A类调用了B类的一个方法getFile(),如果B类的方法代码出现异常则直接抛给了调用者A类的 File file = bb.getFile();那么它后面的代码    System.out.println(file.getName()); 也就不会执行了,而是跳到catch语句块中;

如果我们直接在B类中用catch处理了异常,那么A类的File file = bb.getFile(); 之后的代码

      System.out.println(file.getName()); 将会继续执行

class A {

public readFile(){

        B bb= new Class B();

       File file =  bb.getFile();

        System.out.println(file.getName()); 

      } 

}

 

class B {

    public File getFile(){

try{   

    return new File("D:/aa.txt");

    }catch(FileNotFoundException e){

                  e.printStackTrace();

       }

  }

}

以上便是这2者的区别,那么在什么情况下需要抛异常呢。经我查看,第一,别人写的代码都是底层往上抛,一直到UI层为止,然后用个Dialog来显示错误信息,第二,为了减少

重复的处理。例如在上传一个文件时可能会出现很多异常,但是不管是什么异常,只要有异常就直接往数据库插入一条上传失败的记录。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值