Namespaces, Scopes, Access privileges

Slides:



Advertisements
Similar presentations
Local Variables and Scope Benjamin Fein. Variable Scope A variable’s scope consists of all code blocks in which it is visible. A variable is considered.
Advertisements

CIT 590 Intro to Programming Java lecture 3. Hashmaps The equivalent of python dictionaries. With both ArrayLists and Hashmaps, the syntax only allows.
23-May-15 Polymorphism. 2 Signatures In any programming language, a signature is what distinguishes one function or method from another In C, every function.
Week 9: Methods 1.  We have written lots of code so far  It has all been inside of the main() method  What about a big program?  The main() method.
CIT 590 Intro to Programming Java lecture 4. Agenda Types Collections – Arrays, ArrayLists, HashMaps Variable scoping Access modifiers – public, private,
Road Map Introduction to object oriented programming. Classes
Access to Names Namespaces, Scopes, Access privileges.
Starting Classes and Methods. Objects have behaviors In old style programming, you had: –data, which was completely passive –functions, which could manipulate.
19-Jun-15 Access to Names Namespaces, Scopes, Access privileges.
25-Jun-15 Starting Classes and Methods. Objects have behaviors In old style programming, you had: data, which was completely passive functions, which.
Terms and Rules Professor Evan Korth New York University (All rights reserved)
28-Jun-15 Access to Names Namespaces, Scopes, Access privileges.
Access. Overview Today we will discuss: –How do we access fields and methods? –Why have access restrictions? –What can have access restrictions? –How.
16-Jul-15 Access. 2 Overview Questions covered in this talk: How do we access fields and methods? Why have access restrictions? What can have access restrictions?
UML Basics & Access Modifier
Programming in Java Unit 2. Class and variable declaration A class is best thought of as a template from which objects are created. You can create many.
The Java Programming Language
Classes and Methods Computer Engineering Department Java Course Asst. Prof. Dr. Ahmet Sayar Kocaeli University - Fall 2014.
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
Methods in Java. Program Modules in Java  Java programs are written by combining new methods and classes with predefined methods in the Java Application.
10-Nov-15 Java Object Oriented Programming What is it?
Basic Java Syntax COMP 401, Spring 2014 Lecture 2 1/14/2014.
Java Class Structure. Class Structure package declaration import statements class declaration class (static) variable declarations* instance variable.
24-Dec-15 Class Structure. 2 Classes A class describes a set of objects The objects are called instances of the class A class describes: Fields (instance.
CIT 590 Intro to Programming Lecture 13. Some Eclipse shortcuts CTRL + SHIFT + F – format file (proper indentation etc). Please do this before you submit.
Programming Fundamentals. Topics to be covered Today Recursion Inline Functions Scope and Storage Class A simple class Constructor Destructor.
Quick Review of OOP Constructs Classes:  Data types for structured data and behavior  fields and methods Objects:  Variables whose data type is a class.
Chapter 4: More Object Concepts. Objectives Understand blocks and scope Overload a method Avoid ambiguity Create and call constructors with parameters.
OOP Basics Classes & Methods (c) IDMS/SQL News
Structured Programming Dr. Atif Alhejali Lecture 4 Modifiers Parameters passing 1Structured Programming.
Classes CS 162 (Summer 2009). Parts of a Class Instance Fields Methods.
CS100Lecture 61 Announcements Homework P1 due on Thursday Homework P2 handed out.
Object Oriented Programming. Constructors  Constructors are like special methods that are called implicitly as soon as an object is instantiated (i.e.
CPSC 233 Tutorial 12 March 4/5 th, TopHat Quiz int[] a = {0}; int[] b = {1}; a = b; What is the value of a[0] i) 0 ii) 1.
Chapter 7 User-Defined Methods.
Java Programming: From Problem Analysis to Program Design, 3e Chapter 7 User-Defined Methods.
Class Structure 15-Jun-18.
Some Eclipse shortcuts
Classes & Objects.
Agenda Warmup Lesson 2.5 (Ascii, Method Overloading)
Methods The real power of an object-oriented programming language takes place when you start to manipulate objects. A method defines an action that allows.
Polymorphism 11-Nov-18.
Recursion 12-Nov-18.
Object Based Programming
Class Structure 16-Nov-18.
Class Structure 28-Nov-18.
Polymorphism 28-Nov-18.
Classes & Objects: Examples
Group Status Project Status.
Recursion 2-Dec-18.
Recursion 2-Dec-18.
Class Structure 7-Dec-18.
Object Oriented Programming
Recursion 29-Dec-18.
Class Structure 2-Jan-19.
Namespaces, Scopes, Access privileges
Class Structure 25-Feb-19.
Polymorphism 15-Apr-19.
Polymorphism 21-Apr-19.
Recursion 23-Apr-19.
Drawing complex figures
Classes, Objects and Methods
Agenda Warmup Lesson 2.2 (parameters, etc)
Just Enough Java 17-May-19.
CS 1054: Lecture 2, Chapter 1 Objects and Classes.
Loops and Iteration CS 21a: Introduction to Computing I
Review for Midterm 3.
Classes and Methods 15-Aug-19.
CSG2H3 Object Oriented Programming
Presentation transcript:

Namespaces, Scopes, Access privileges Access to Names Namespaces, Scopes, Access privileges 15-Sep-18

Overview In Java you name various things: classes, methods, variables, etc. Sometimes you can refer to these things by name, but other times Java gives you an error You need to know when you can refer to something by name, and when you can’t You also need to know how to refer to things Java’s rules are complex, but they are not arbitrary--once you understand them, they do make sense!

Part I: Namespaces 15-Sep-18

Names are not unique My name is Mike Smith Hi. My name is Hello. I’m

Variable names How do we find the card we want? int card int card 2 int card 8 int card 'Q' char card String card "Jack of clubs" refers to How do we find the card we want?

Declarations Variables are declared like this: Examples: [access] [static] type name [ = value] , ... ; Examples: int m; public double e = 2.718281828459045; static final int ONE = 1, TWO = 2, THREE = 3; public static boolean pluggedIn; Once we declare some variables, where can we use them? Java’s rules are quite complex, but it’s very important to understand them

Declare a variable only once public class Test { public static void main(String[] args) { int var = 5; double var = 8.33; System.out.println(var); } } var is already defined in main(java.lang.String[])

Namespaces Java figures out what kind of thing a name refers to, and puts it in one of six different namespaces: package names type names field names method names local variable names (including parameters) labels

The puzzle solved public class main { // type name int main = 5; // field name public static void main(String[] args) { // method name main main = new main(); // local names (incl. args) System.out.print(main); } } Java prints out object main@ecf76e in local variable main Note that this is terrible style!

What you should remember A namespace is a place that Java keeps track of names Java uses six different namespaces If you name things intelligently, and don’t use the same name for different things, you don’t have to worry much about namespaces

Part II: Scope 15-Sep-18

Scope The scope of a name is the part of the program in which the name is visible In Java, scope rules apply to single methods Variables declared in a method can only be used within that method; you cannot ever use them anywhere outside the method Between classes, we use access rules rather than scope rules

Methods may have local variables A method may have local (method) variables Formal parameters are a kind of local variable int add(int m, int n) { int sum = m + n; return sum; } m, n, and sum are all local variables The scope of m, n, and sum is the method These variables can only be used in the method, nowhere else The names can be re-used elsewhere, for other variables

Compound statements and blocks A compound statement consists of zero or more statements inside braces Examples: { }, { temp = x; x = y; y = temp; } A block consists of zero or more statements or declarations inside braces Example: { int temp = x; x = y; y = temp; } This distinction is not important in Java I’ll just use the terms interchangeably

Blocks occur in methods The braces in a class declaration do not indicate a compound statement: public class MyClass { /* not a block */ } Elsewhere, braces do indicate a compound statement: int absoluteValue(int n) { if (n < 0) { return -n; } else return n; }

Declarations in a class The braces in a class declaration do not indicate a block or compound statement: public class MyClass { // not a block int foo; // instance variable static int bar; // class variable Instance variables and class variables are available throughout the entire class that declares them Java doesn’t care in what order you declare things However, declarations with initializations must precede use of their value Example: int half = whole / 2; int whole = 100; is not legal It's usually good style to put variable declarations first, then constructors, then methods

Declarations in a method The scope of formal parameters is the entire method The scope of a variable in a block starts where you define it and extends to the end of the block if (x > y) { int larger = x; } else { int larger = y; } return larger; larger scope of larger larger scope of a different larger Illegal: not declared in current scope

Nested scopes int fibonacci(int limit) { int first = 1; int second = 1; while (first < 1000) { System.out.print(first + " "); int next = first + second; first = second; second = next; } System.out.println( ); } limit first second next

The for loop The for loop is a special case You can declare variables in the for statement The scope of those variables is the entire for loop This is true even if the loop is not a block void multiplicationTable() { for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) System.out.print(" " + i * j); System.out.println(); } } i j

Duplicate definitions void duplicate1( ) { int i = 0; for (int i = 0; i < 10; i++) { //illegal System.out.println(i); } } void duplicate2( ) { for (int i = 0; i < 10; i++) { System.out.println(i); } for (int i = 0; i < 10; i++) { // legal System.out.println(i); } } public class Scope { int i; void duplicate3( ) { for (int i = 0; i < 10; i++) { // legal System.out.println(i); } } }

What you should remember Names (of variables, constructors, or methods) declared anywhere in a class are available everywhere within the class (order doesn’t matter) Formal parameters of a method are available everywhere within the method Variables declared in a block are available from where they are declared to the end of that block Variables declared in a for loop are available within the for loop

Part III: Access privileges 15-Sep-18

Packages = directories = folders A public class must be put in a file of the same name Example: public class Test { ... } must be saved in a file named Test.java Similarly, if you use a package statement, the file must be in a directory (folder) of the same name Example: If you specify package assignment_2; then it must be in a directory named assignment_2 Why use more than one package in a program? Sometimes you want to write classes that are useful in many different programs Sometimes you may be working on a large program that needs the extra level of organization We aren’t writing large programs in this course

Scope and access Local variables (formal parameters and method variables) are available only within the method that declares them, never anywhere else Names (of variables, constructors, and methods) declared in a class are available everywhere within that class, and may be available inside other classes Access to these names is controlled by the access modifiers public, package (default), protected, and private

How to access names From outside class Person: you can access an instance variable (say, of jack) by: jack.age you can access a class variable by: Person.population As a (confusing) convenience, you can also access a class variable by way of any instance of that class: jack.population // works, but is confusing--avoid These techniques also work for methods and constructors

public and private access If you declare a name to be public, you are allowing every other class in the world to see it and to change it (called read-write access) If random changes to this name can invalidate the object, it should not be public If you declare a name to be private, you are saying that only the class in which it is declared can see it and change it If all your .java files are in the same directory (recommended for this course), there is no difference between public, protected, and package

Why private is important The fields (instance variables) of an object describe its state This is just about the only legitimate use of instance variables Other communication between methods should be done with parameters The state of an object must be kept valid Examples: Employee IDs must be unique; a person’s age may not be negative; a tic-tac-toe game may contain Xs and Os, but not Ms From outside the class, objects must always be valid Inside the class, objects may be temporarily in an invalid state, as they are being manipulated It is the responsibility of a class to ensure that objects of that class are, and remain, valid If a field is not private, the object can be manipulated from outside the class, and the class loses control Moral: Instances variables should almost always be private

Package and protected access Package access means that a name is available everywhere in the same package (the same directory) protected access means that a name is available everywhere in the same package (the same directory), but also to any subclasses, wherever they may be protected access is “more public” than package access Question: Why have protected access? Answer: Because, although you would usually prefer your instance variables to be private, sometimes you need to access them in subclasses It would be nice if protected variables were available in subclasses but not to everything in the same directory Access controls in Java are not very well designed 

Read-only access If you want a variable to be read-only: Example: Declare the variable to be private Provide a “getter” method to return its value Do not provide a “setter” method to set its value Example: public class Person { private int population; int getPopulation( ) { return population; } ... }

Vocabulary namespace -- a place that Java keeps track of names scope of a name -- the part of the program in which the name is visible compound statement -- zero or more statements inside braces block -- zero or more statements or declarations inside braces access modifier -- one of the keywords public, protected, and private

The End