面向对象编程所具备的三个特性

释放双眼,带上耳机,听听看~!

大家都知道面向对象的编程有封装、继承、多态三大特性,而我们在做一般的数据库项目的时候,感觉好少用到继承和多态的思想,本文将讲述,如何在一般的数据库管理系统上用上这些特性,使你的代码更具有面向对象的特性.

一、封装

  封装的定义:

  每个对象都包含了他能进行操作所需要的所有信息,因此对象不必依靠其他的对象来完成自己的操作,这样的特性叫封装。

   封装在简单数据库项目中的例子: 

public class Class1
    {
        private string myConStr;
        public Class1()
        {
        }
        public string MyConStr
        {
            get { return myConStr; }
            set { myConStr = value; }
        }
 

        public virtual void  dboperate()
        {
        }
    }

上面就是一个封装好了的简单的类

二、继承

继承代表了一种“is-a”的关系,个人觉的继承的最大好处是少些好多的代码及多态功能

例子:

 public class Class2 : Class1
    {
        private SqlConnection myCon;
        private SqlCommand myCom;
        private SqlDataReader myReader;
        public Class2(string str):base()
        {
            base.MyConStr = str;
        }
        public override void  dboperate()
        {
            myCon = new SqlConnection(base.MyConStr);
            myCon.Open();
            myCom = new SqlCommand("insert into table1(NO,NAME,SEX) VALUES('001','BIIL','MAN')", myCon);
            myReader =  myCom.ExecuteNonQuery();       
        }
    }

这里用重载的方法少写了从父类继承过来的代码。

三、多态

定义:是允许将父对象设置成为和一个和多个它的子对象相等的技术,比如Parent=Child 赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。 

在定义一个跟新数据库的类:

public class Class3:Class1
    {
        private SqlConnection myCon;
        private SqlCommand myCom;
        public Class3(string str):base()
        {
            base.MyConStr = str;
        }
        public override void  dboperate()
        {
            myCon = new SqlConnection(base.MyConStr);
            myCon.Open();
            myCom = new SqlCommand("update table1 set SEX='WOMAN'where ID='001'", myCon);
           myCom.ExecuteNonQuery();       
        }
    }

多态的实现:

string connstring = "Data Source=tty1;Initial Catalog=Northwind;Integrated Security=True";
  Class1 pclass1 = new Class2(connstring);//Parent=Child 
  Class1 pclass2 = new Class3(connstring);//Parent=Child 
  pclass1.dboperate();//执行Class2的dboperate()方法
  pclass2.dboperate();//执行Class3的dboperate()方法

四、结尾:

到现在我们已经实现了数据操作的面向对象的三大特性,但是,从上面的例子却不敢恭维,从继承的角度来看,并不成功,可以考虑将 SqlConnection myCon, SqlCommand myCom放在父类中,修改之后的代码如下:

//父类Class1
   public class Class1
    {
        private string myConStr;
       protected SqlConnection myCon;
       protected SqlCommand myCom;
        public Class1()
        {
        }
        public string MyConStr
        {
            get { return myConStr; }
            set { myConStr = value; }
        }
 

        public virtual void  dboperate()
        {
        }
    }
//子类Class2
    public class Class2 : Class1
    {
       
        public Class2(string str):base()
        {
            base.MyConStr = str;
        }
        public override void  dboperate()
        {
            myCon = new SqlConnection(base.MyConStr);
            myCon.Open();
            myCom = new SqlCommand("insert into table1(NO,NAME,SEX) VALUES('001','BIIL','MAN')", myCon);
           myCom.ExecuteNonQuery();
          
        }
    }
//子类Class3
    public class Class3:Class1
    {
        public Class3(string str):base()
        {
            base.MyConStr = str;
        }
        public override void  dboperate()
        {
           
            myCon = new SqlConnection(base.MyConStr);
            myCon.Open();
            myCom = new SqlCommand("update table1 set SEX='WOMAN'where ID='001'", myCon);
           myCom.ExecuteNonQuery();       
        }
    }
 //操作
   string connstring = "Data Source=tty1;Initial Catalog=Northwind;Integrated Security=True";
            Class1 pclass1 = new Class2(connstring);
            Class1 pclass2 = new Class3(connstring);
            pclass1.dboperate();
            pclass2.dboperate();

【转自慕课】https://www.imooc.com

PHP

SWOOLE 从入门到放弃之写个小框架(二十)

2022-3-2 23:24:49

PHP

php7.0新特性

2022-3-2 23:25:20

搜索