• 面向对象的三大特性


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

    一、封装

      封装的定义:

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

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

    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网站安全吗?

    如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!

    SSL检测评估

    快速了解HTTPS网站安全情况。

    安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。

    SSL证书工具

    安装部署SSL证书变得更方便。

    SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。

    SSL漏洞检测

    让服务器远离SSL证书漏洞侵扰

    TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。

  • 相关阅读:
    想让进程后台运行,试试Linux的nohup命令,3分钟学会。
    面试官:你能说一下Redis的常见应用场景吗?
    面试被问MySQL 主从复制,怎么破?
    Spring Boot 解决跨域问题的 3 种方案!
    Kafka如果丢了消息,怎么处理的?
    惊呆,这样操作 Nginx 并发数就能达到3w?
    easyexcel 自动设置列宽(转)
    Ubuntu18.04自适应VMware调整桌面大小
    IDEA将maven项目打包时同时带上项目的maven依赖(转)
    python 定时框架APScheduler
  • 原文地址:https://www.cnblogs.com/zhuqil/p/1271565.html
Copyright © 2020-2023  润新知