面向对象编程Object Oriented Programming(OOP)

把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

一:封装(类内的事)

假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个dict表示:
#面向程序
std1 = { ‘name‘: ‘Michael‘, ‘score‘: 98 }
std2 = { ‘name‘: ‘Bob‘, ‘score‘: 81 }

def print_score(std):
    print(‘%s: %s‘ % (std[‘name‘], std[‘score‘]))

#面向对象
class Student(object): # 继承类object,所有类最终都会继承的类
#属性
def __init__(self, name, score):
   self.name = name self.score = score
#数据封装,类的方法,为了和类关联起来
def print_score(self):
  print(‘%s: %s‘ % (self.name, self.score)) 

#封装的另一个好处是可以给Student类增加新的方法
    def get_grade(self):
        if self.score >= 90:
            return ‘A‘
        elif self.score >= 60:
            return ‘B‘
        else:
            return ‘C‘
#给对象发消息就是调用对象对应的关联函数,称为对象的方法,实例
 bart = Student(‘Bart Simpson‘, 59)
 bart.print_score()
#类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都互相独立,互不影响;
#方法就是与实例绑定的函数,和普通函数不同,方法可以直接访问实例的数据;

访问限制

#属性的名称前加上两个下划线__,私有变量(private),只有内部可以访问
class Student(object):

    def __init__(self, name, score):
        self.__name = name
        self.__score = score

    def print_score(self):
        print(‘%s: %s‘ % (self.__name, self.__score))

#如果外部代码要获取name和score怎么办?可以给Student类增加get_name和get_score这样的方法
    def get_name(self):
        return self.__name

    def get_score(self):
        return self.__score

#如果又要允许外部代码修改score
    def set_score(self, score):
        self.__score = score

#bart.score = 59也可以修改,因为在方法中,可以对参数做检查,避免传入无效的参数
    def set_score(self, score):
        if 0 <= score <= 100:
            self.__score = score
        else:
            raise ValueError(‘bad score‘)

#变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的

#一个下划线开头的实例变量名,比如_name,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,  意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”

#不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,强烈建议你不要这么干,因为不同版本的Python解释器可能会把__name改成不同的变量名
>>> bart._Student__name
‘Bart Simpson‘

二:继承(类之间的事)

当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)

三:多态

时间: 2024-10-08 10:28:10

面向对象编程Object Oriented Programming(OOP)的相关文章

面向对象编程(Object Oriented Programming,OOP)

类是一个通用的概念,Java.C++.C#.PHP等很多编程语言中都有类,都可以通过类创建对象.可以将类看做是结构体的升级版,C语言的晚辈们看到了C语言的不足,尝试加以改善,继承了结构体的思想,并进行了升级,让程序员在开发或扩展大中型项目时更加容易. 因为Java.C++等语言都支持类和对象,所以使用这些语言编写程序也被称为面向对象编程,这些语言也被称为面向对象的编程语言.C语言因为不支持类和对象的概念,被称为面向过程的编程语言. 实际上,面向对象只是面向过程的升级. 在C语言中,可以将完成某个

javaScript设计模式之面向对象编程(object-oriented programming,OOP)(一)

面试的时候,总会被问到,你对javascript面向对象的理解? 面向对象编程(object-oriented programming,OOP)是一种程序设计范型.它讲对象作为程序的设计基本单元,讲程序和数据封装其中,以提高程序的重用性.灵活性和扩展性. 一.举个例子 有这么一个需求:做一个验证表单功能,仅需要验证用户名,邮箱,密码等 觉得在项目产品开发中,自己是这么写的 function checkName(){ //验证姓名 } function checkEmail(){ //验证邮箱 }

Java Object Oriented Programming concepts

Introduction This tutorial will help you to understand about Java OOP'S concepts with examples. Let's discuss about what are the features of Object Oriented Programming. Writing object-oriented programs involves creating classes, creating objects fro

Object Oriented Programming python

new concepts of the object oriented programming : class encapsulation inheritance polymorphism the three features of an object are : identity, state and behaviora class is an abstraction which regroup objects who have the same attributes and the same

CSE210 Advanced Object Oriented Programming

CSE210 Advanced Object Oriented ProgrammingCoursework 2019 Release date: 11th, Mar, 2019Deadline: 12:00PM, 23rd, Apr, 2019 1. DescriptionThe objective of the coursework is to develop a practical application for data processing, analysis and content s

MQF Object Oriented Programming

MQF Object Oriented Programming I Fall 2019Hw2 Due 10/1/2019 before midnightSpecificationsRutgers parking garage management system is required to take care Rutgers University Paringneeds. The system can keep track of all the cars parked in your garag

CSC72002 Object Oriented Programming

CSC72002 Object Oriented Programming - Assignment 2Weight: 40% of your final markSpecificationsYour task is to complete various exercises in NetBeans, using the Java language, and to submitthese via the MySCU link created for this purpose.Marking cri

what&#39;s the problem of Object oriented programming

The problem came from the Object itselft.It can divided into two aspect: 1.Everything is an Object: that's not true,lots of so called object is  not object ,it's just a Wrapper.You dont know what it is  ,but you just need one to let  things go on. Sa

第八章 C#面向对象编程(Object-Oriented Programming,OOP)简介

.NET OOP 一.面向对象编程的含义 1.函数(过程化)编程常常导致单一的应用程序,即所有的功能都包含在几个代码模块中(常常是一个代码模块) 而使用OOP技术,常常使用许多代码模块,每个模块提供特定的功能,每个模块都是孤立的,甚至与其他模块完全孤立.这种模块化编程方法提供了非常大的多样性,打打增加了重用代码的机会. (把更多的精力放在项目的设计阶段) 2.对象是从类型中创建的,对象的类型叫类.可以用类的定义实例化对象.类相当于汽车的模板或者用于构建汽车的规划,汽车本身是这些规划的实例,可以看